From f320c021b27f59b68deb2f2dad7a809d97397e73 Mon Sep 17 00:00:00 2001 From: e2002 Date: Tue, 29 Jul 2025 10:42:00 +0300 Subject: [PATCH] v0.9.553 --- HA/custom_components/yoradio/media_player.py | 23 ++++---- README.md | 6 ++ yoRadio/data/www/script.js.gz | Bin 7466 -> 7493 bytes yoRadio/src/core/options.h | 2 +- yoRadio/src/core/timekeeper.cpp | 59 ++++++++++--------- 5 files changed, 51 insertions(+), 39 deletions(-) diff --git a/HA/custom_components/yoradio/media_player.py b/HA/custom_components/yoradio/media_player.py index 27223e1..95af1ac 100644 --- a/HA/custom_components/yoradio/media_player.py +++ b/HA/custom_components/yoradio/media_player.py @@ -20,7 +20,7 @@ from homeassistant.components.media_player import ( RepeatMode, ) -VERSION = '0.9.410' +VERSION = '0.9.553' _LOGGER = logging.getLogger(__name__) @@ -137,16 +137,19 @@ class yoradioDevice(MediaPlayerEntity): await mqtt.async_subscribe(self.api.hass, self.api.root_topic+'/volume', self.volume_listener, 0, "utf-8") async def status_listener(self, msg): - js = json.loads(msg.payload) - self._media_title = js['title'] - self._track_artist = js['name'] - if js['on']==1: - self._state = MediaPlayerState.PLAYING if js['status']==1 else MediaPlayerState.IDLE - else: - self._state = MediaPlayerState.PLAYING if js['status']==1 else MediaPlayerState.OFF - self._current_source = str(js['station']) + '. ' + js['name'] try: - self.async_schedule_update_ha_state() + js = json.loads(msg.payload) + self._media_title = js['title'] + self._track_artist = js['name'] + if js['on']==1: + self._state = MediaPlayerState.PLAYING if js['status']==1 else MediaPlayerState.IDLE + else: + self._state = MediaPlayerState.PLAYING if js['status']==1 else MediaPlayerState.OFF + self._current_source = str(js['station']) + '. ' + js['name'] + try: + self.async_schedule_update_ha_state() + except: + pass except: pass diff --git a/README.md b/README.md index 0b47392..014f772 100644 --- a/README.md +++ b/README.md @@ -234,6 +234,12 @@ Work is in progress... --- ## Version history +### 0.9.553 +- fix "No 'Access-Control-Allow-Origin' header is present on the requested resource" on saving playlist\ + just reupload the file `script.js.gz` with Webboard uploader +- fixed error "assert failed: udp_new_ip_type /IDF/components/lwip/lwip/src/core/udp.c:1278 (Required to lock TCPIP core functionality!)" +- fixed error "Exception in status_listener when handling msg" in HA component + ### 0.9.552 - fixed compilation error for ESP cores version below 3.0.0\ Thanks to @salawalas ! https://github.com/e2002/yoradio/pull/197/ diff --git a/yoRadio/data/www/script.js.gz b/yoRadio/data/www/script.js.gz index bc97896f1c4a4dc6e231bdde27374f32c3ee72ce..47875396f20a139b1ab5740bc7238b6d672e6ed4 100644 GIT binary patch delta 3430 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 Ie$;LN0COIfS^xk5 delta 3459 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 diff --git a/yoRadio/src/core/options.h b/yoRadio/src/core/options.h index 1a308c7..f893323 100644 --- a/yoRadio/src/core/options.h +++ b/yoRadio/src/core/options.h @@ -1,7 +1,7 @@ #ifndef options_h #define options_h -#define YOVERSION "0.9.552" +#define YOVERSION "0.9.553" /******************************************************* DO NOT EDIT THIS FILE. diff --git a/yoRadio/src/core/timekeeper.cpp b/yoRadio/src/core/timekeeper.cpp index a2b60b6..e7810de 100644 --- a/yoRadio/src/core/timekeeper.cpp +++ b/yoRadio/src/core/timekeeper.cpp @@ -53,36 +53,11 @@ bool TimeKeeper::loop0(){ // core0 (display) _last2s = currentTime; _upRSSI(); } - if (currentTime - _last5s >= 5000) { // 2sec + if (currentTime - _last5s >= 5000) { // 5sec _last5s = currentTime; //HEAP_INFO(); } - #ifdef DUMMYDISPLAY - return true; - #endif - static uint32_t lastWeatherTime = 0; - if (currentTime - lastWeatherTime >= WEATHER_SYNC_INTERVAL) { - lastWeatherTime = currentTime; - forceWeather = true; - } - static uint32_t lastTimeTime = 0; - if (currentTime - lastTimeTime >= TIME_SYNC_INTERVAL) { - lastTimeTime = currentTime; - forceTimeSync = true; - } - if (!busy && (forceWeather || forceTimeSync) && network.status == CONNECTED) { - busy = true; - //config.setTimeConf(); - xTaskCreatePinnedToCore( - _syncTask, - "syncTask", - SYNC_STACK_SIZE, - NULL, // Params - SYNC_TASK_PRIORITY, - NULL, // Descriptor - SYNC_TASK_CORE - ); - } + return true; // just in case } @@ -106,6 +81,35 @@ bool TimeKeeper::loop1(){ // core1 (player) if (currentTime - _last2s >= 2000) { // 2sec _last2s = currentTime; } + + #ifdef DUMMYDISPLAY + return true; + #endif + // Sync weather & time + static uint32_t lastWeatherTime = 0; + if (currentTime - lastWeatherTime >= WEATHER_SYNC_INTERVAL) { + lastWeatherTime = currentTime; + forceWeather = true; + } + static uint32_t lastTimeTime = 0; + if (currentTime - lastTimeTime >= TIME_SYNC_INTERVAL) { + lastTimeTime = currentTime; + forceTimeSync = true; + } + if (!busy && (forceWeather || forceTimeSync) && network.status == CONNECTED) { + busy = true; + //config.setTimeConf(); + xTaskCreatePinnedToCore( + _syncTask, + "syncTask", + SYNC_STACK_SIZE, + NULL, // Params + SYNC_TASK_PRIORITY, + NULL, // Descriptor + SYNC_TASK_CORE + ); + } + return true; // just in case } @@ -217,7 +221,6 @@ void TimeKeeper::weatherTask(){ bool _getWeather(char *wstr) { #if (DSP_MODEL!=DSP_DUMMY || defined(USE_NEXTION)) && !defined(HIDE_WEATHER) - WiFiClient client; const char* host = "api.openweathermap.org"; if (!client.connect(host, 80)) {