From 3dd4997094ef4698bc60ff31d0dce6c97c39f0b4 Mon Sep 17 00:00:00 2001 From: lumapu Date: Tue, 2 Jan 2024 14:43:33 +0100 Subject: [PATCH 1/2] 0.8.40 * fix display of sunrise and sunset in `/system` #1308 * fix MqTT set power limit #1313 --- src/CHANGES.md | 6 +++++- src/defines.h | 2 +- src/hm/Communication.h | 2 +- src/hm/hmInverter.h | 2 +- src/publisher/pubMqtt.h | 12 +++++++----- src/web/html/system.html | 4 ++-- 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/CHANGES.md b/src/CHANGES.md index c83130c8..bbede74c 100644 --- a/src/CHANGES.md +++ b/src/CHANGES.md @@ -1,9 +1,13 @@ # Development Changes +## 0.8.40 - 2024-01-02 +* fix display of sunrise and sunset in `/system` #1308 +* fix MqTT set power limit #1313 + ## 0.8.39 - 2024-01-01 * fix MqTT dis_night_comm in the morning #1309 #1286 * seperated offset for sunrise and sunset #1308 -* **BREAKING CHANGE**: powerlimit (active power control) now has one decimal place (MqTT / API) #1199 +* powerlimit (active power control) now has one decimal place (MqTT / API) #1199 * merge Prometheus metrics fix #1310 * merge MI grid profile request #1306 * merge update documentation / readme #1305 diff --git a/src/defines.h b/src/defines.h index d5aa04c2..26ddf237 100644 --- a/src/defines.h +++ b/src/defines.h @@ -13,7 +13,7 @@ //------------------------------------- #define VERSION_MAJOR 0 #define VERSION_MINOR 8 -#define VERSION_PATCH 39 +#define VERSION_PATCH 40 //------------------------------------- typedef struct { diff --git a/src/hm/Communication.h b/src/hm/Communication.h index a448884e..d44e860f 100644 --- a/src/hm/Communication.h +++ b/src/hm/Communication.h @@ -397,7 +397,7 @@ class Communication : public CommQueue<> { DBGPRINT(F("has ")); if(!accepted) DBGPRINT(F("not ")); DBGPRINT(F("accepted power limit set point ")); - DBGPRINT(String(q->iv->powerLimit[0]/10)); + DBGPRINT(String((float)q->iv->powerLimit[0]/10.0)); DBGPRINT(F(" with PowerLimitControl ")); DBGPRINTLN(String(q->iv->powerLimit[1])); q->iv->actPowerLimit = 0xffff; // unknown, readback current value diff --git a/src/hm/hmInverter.h b/src/hm/hmInverter.h index 37a469a7..25f575e5 100644 --- a/src/hm/hmInverter.h +++ b/src/hm/hmInverter.h @@ -805,7 +805,7 @@ class Inverter { bool mDevControlRequest; // true if change needed uint8_t mGridLen = 0; uint8_t mGridProfile[MAX_GRID_LENGTH]; - uint8_t mGetLossInterval; // request iv every AHOY_GET_LOSS_INTERVAL RealTimeRunData_Debug + uint8_t mGetLossInterval; // request iv every AHOY_GET_LOSS_INTERVAL RealTimeRunData_Debug }; template diff --git a/src/publisher/pubMqtt.h b/src/publisher/pubMqtt.h index 9834f29a..76ec452f 100644 --- a/src/publisher/pubMqtt.h +++ b/src/publisher/pubMqtt.h @@ -310,15 +310,18 @@ class PubMqtt { char *pyld = new char[len + 1]; strncpy(pyld, (const char*)payload, len); pyld[len] = '\0'; - root[F("val")] = atoi(pyld); + if(NULL == strstr(topic, "limit")) + root[F("val")] = atoi(pyld); + else + root[F("val")] = (int)(atof(pyld) * 10.0f); + if(pyld[len-1] == 'W') limitAbs = true; delete[] pyld; } const char *p = topic + strlen(mCfgMqtt->topic); - uint8_t pos = 0; - uint8_t elm = 0; + uint8_t pos = 0, elm = 0; char tmp[30]; while(1) { @@ -333,8 +336,7 @@ class PubMqtt { root[F("cmd")] = F("limit_nonpersistent_absolute"); else root[F("cmd")] = F("limit_nonpersistent_relative"); - } - else + } else root[F("cmd")] = String(tmp); break; case 3: root[F("id")] = atoi(tmp); break; diff --git a/src/web/html/system.html b/src/web/html/system.html index eb25d5fa..0415864b 100644 --- a/src/web/html/system.html +++ b/src/web/html/system.html @@ -108,8 +108,8 @@ ml("tbody", {}, [ tr("Sunrise", new Date(obj.ts_sunrise * 1000).toLocaleString('de-DE')), tr("Sunset", new Date(obj.ts_sunset * 1000).toLocaleString('de-DE')), - tr("Communication start", new Date((obj.ts_sunrise - obj.ts_offset) * 1000).toLocaleString('de-DE')), - tr("Communication stop", new Date((obj.ts_sunset + obj.ts_offset) * 1000).toLocaleString('de-DE')), + tr("Communication start", new Date((obj.ts_sunrise - obj.ts_offsSr) * 1000).toLocaleString('de-DE')), + tr("Communication stop", new Date((obj.ts_sunset + obj.ts_offsSs) * 1000).toLocaleString('de-DE')), tr("Night behaviour", badge(obj.disNightComm, ((obj.disNightComm) ? "not" : "") + " communicating", "warning")) ]) ) From f2e1e536f52a7f21efddde1f505a53c0aff29601 Mon Sep 17 00:00:00 2001 From: lumapu Date: Tue, 2 Jan 2024 15:12:24 +0100 Subject: [PATCH 2/2] 0.8.41 * fix display timeout (OLED) to 60s * change offs to signed value --- src/CHANGES.md | 4 ++++ src/app.cpp | 6 +++--- src/config/settings.h | 8 ++++---- src/defines.h | 2 +- src/plugins/Display/Display_Mono.h | 2 +- src/publisher/pubMqtt.h | 6 +++--- src/web/html/setup.html | 2 +- src/web/html/system.html | 2 +- 8 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/CHANGES.md b/src/CHANGES.md index bbede74c..43e58613 100644 --- a/src/CHANGES.md +++ b/src/CHANGES.md @@ -1,5 +1,9 @@ # Development Changes +## 0.8.41 - 2024-01-02 +* fix display timeout (OLED) to 60s +* change offs to signed value + ## 0.8.40 - 2024-01-02 * fix display of sunrise and sunset in `/system` #1308 * fix MqTT set power limit #1313 diff --git a/src/app.cpp b/src/app.cpp index 8e70778a..cd13050b 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -235,7 +235,7 @@ void app::tickCalcSunrise(void) { onceAt(std::bind(&app::tickCalcSunrise, this), nxtTrig, "Sunri"); if (mMqttEnabled) { tickSun(); - nxtTrig = mSunrise - mConfig->sun.offsetSecMorning + 1; // one second safety to trigger correctly + nxtTrig = mSunrise + mConfig->sun.offsetSecMorning + 1; // one second safety to trigger correctly onceAt(std::bind(&app::tickSun, this), nxtTrig, "mqSr"); // trigger on sunrise to update 'dis_night_comm' } } @@ -254,8 +254,8 @@ void app::tickIVCommunication(void) { iv->commEnabled = !iv->config->disNightCom; // if sun.disNightCom is false, communication is always on if (!iv->commEnabled) { // inverter communication only during the day - if (mTimestamp < (mSunrise - mConfig->sun.offsetSecMorning)) { // current time is before communication start, set next trigger to communication start - nxtTrig = mSunrise - mConfig->sun.offsetSecMorning; + if (mTimestamp < (mSunrise + mConfig->sun.offsetSecMorning)) { // current time is before communication start, set next trigger to communication start + nxtTrig = mSunrise + mConfig->sun.offsetSecMorning; } else { if (mTimestamp >= (mSunset + mConfig->sun.offsetSecEvening)) { // current time is past communication stop, nothing to do. Next update will be done at midnight by tickCalcSunrise nxtTrig = 0; diff --git a/src/config/settings.h b/src/config/settings.h index c493eb1a..5cecd46a 100644 --- a/src/config/settings.h +++ b/src/config/settings.h @@ -106,8 +106,8 @@ typedef struct { typedef struct { float lat; float lon; - uint16_t offsetSecMorning; - uint16_t offsetSecEvening; + int16_t offsetSecMorning; + int16_t offsetSecEvening; } cfgSun_t; typedef struct { @@ -635,8 +635,8 @@ class settings { } else { getVal(obj, F("lat"), &mCfg.sun.lat); getVal(obj, F("lon"), &mCfg.sun.lon); - getVal(obj, F("offs"), &mCfg.sun.offsetSecMorning); - getVal(obj, F("offsEve"), &mCfg.sun.offsetSecEvening); + getVal(obj, F("offs"), &mCfg.sun.offsetSecMorning); + getVal(obj, F("offsEve"), &mCfg.sun.offsetSecEvening); } } diff --git a/src/defines.h b/src/defines.h index 26ddf237..9ee93c17 100644 --- a/src/defines.h +++ b/src/defines.h @@ -13,7 +13,7 @@ //------------------------------------- #define VERSION_MAJOR 0 #define VERSION_MINOR 8 -#define VERSION_PATCH 40 +#define VERSION_PATCH 41 //------------------------------------- typedef struct { diff --git a/src/plugins/Display/Display_Mono.h b/src/plugins/Display/Display_Mono.h index 3e998b6d..322e991e 100644 --- a/src/plugins/Display/Display_Mono.h +++ b/src/plugins/Display/Display_Mono.h @@ -80,7 +80,7 @@ class DisplayMono { uint8_t mExtra; int8_t mPixelshift=0; - TimeMonitor mDisplayTime = TimeMonitor(1000 * 15, true); + TimeMonitor mDisplayTime = TimeMonitor(1000 * DISP_DEFAULT_TIMEOUT, true); bool mDisplayActive = true; // always start with display on char mFmtText[DISP_FMT_TEXT_LEN]; diff --git a/src/publisher/pubMqtt.h b/src/publisher/pubMqtt.h index 76ec452f..a1efa5fb 100644 --- a/src/publisher/pubMqtt.h +++ b/src/publisher/pubMqtt.h @@ -134,13 +134,13 @@ class PubMqtt { #endif } - bool tickerSun(uint32_t sunrise, uint32_t sunset, uint16_t offsM, uint16_t offsE) { + bool tickerSun(uint32_t sunrise, uint32_t sunset, int16_t offsM, int16_t offsE) { if (!mClient.connected()) return false; publish(subtopics[MQTT_SUNRISE], String(sunrise).c_str(), true); publish(subtopics[MQTT_SUNSET], String(sunset).c_str(), true); - publish(subtopics[MQTT_COMM_START], String(sunrise - offsM).c_str(), true); + publish(subtopics[MQTT_COMM_START], String(sunrise + offsM).c_str(), true); publish(subtopics[MQTT_COMM_STOP], String(sunset + offsE).c_str(), true); Inverter<> *iv; @@ -155,7 +155,7 @@ class PubMqtt { snprintf(mSubTopic, 32 + MAX_NAME_LENGTH, "comm_disabled"); - publish(mSubTopic, (((*mUtcTimestamp > (sunset + offsE)) || (*mUtcTimestamp < (sunrise - offsM))) ? dict[STR_TRUE] : dict[STR_FALSE]), true); + publish(mSubTopic, (((*mUtcTimestamp > (sunset + offsE)) || (*mUtcTimestamp < (sunrise + offsM))) ? dict[STR_TRUE] : dict[STR_FALSE]), true); return true; } diff --git a/src/web/html/setup.html b/src/web/html/setup.html index aef43dcf..aa52ac33 100644 --- a/src/web/html/setup.html +++ b/src/web/html/setup.html @@ -895,7 +895,7 @@ document.getElementsByName("sunLon")[0].value = obj["lon"]; for(p of [["sunOffsSr", "offsSr"], ["sunOffsSs", "offsSs"]]) { const sel = document.getElementsByName(p[0])[0]; - for(var i = 0; i <= 60; i++) { + for(var i = -60; i <= 60; i++) { sel.appendChild(opt(i, i + " minutes", (i == (obj[p[1]] / 60)))); } } diff --git a/src/web/html/system.html b/src/web/html/system.html index 0415864b..035f30ff 100644 --- a/src/web/html/system.html +++ b/src/web/html/system.html @@ -108,7 +108,7 @@ ml("tbody", {}, [ tr("Sunrise", new Date(obj.ts_sunrise * 1000).toLocaleString('de-DE')), tr("Sunset", new Date(obj.ts_sunset * 1000).toLocaleString('de-DE')), - tr("Communication start", new Date((obj.ts_sunrise - obj.ts_offsSr) * 1000).toLocaleString('de-DE')), + tr("Communication start", new Date((obj.ts_sunrise + obj.ts_offsSr) * 1000).toLocaleString('de-DE')), tr("Communication stop", new Date((obj.ts_sunset + obj.ts_offsSs) * 1000).toLocaleString('de-DE')), tr("Night behaviour", badge(obj.disNightComm, ((obj.disNightComm) ? "not" : "") + " communicating", "warning")) ])