From 4dc64eb2d7d7de058f1ddc97519449b8e67a3eef Mon Sep 17 00:00:00 2001 From: HorstG-57 Date: Wed, 10 Aug 2022 23:15:50 +0200 Subject: [PATCH 1/4] Meine anpassungen wegen MQTT Intervall MQTT Test MQTT Subscribe muss nur nach dem MQTT Connect nicht bei jedem Connect Check --- tools/esp8266/app.cpp | 23 ++++++++++++++++++++++- tools/esp8266/mqtt.h | 11 ++++++----- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/tools/esp8266/app.cpp b/tools/esp8266/app.cpp index 4b3a8b56a..9afd44711 100644 --- a/tools/esp8266/app.cpp +++ b/tools/esp8266/app.cpp @@ -165,6 +165,8 @@ void app::setup(uint32_t timeout) { mMqtt.setup(mqttAddr, mqttTopic, mqttUser, mqttPwd, mqttDevName, mqttPort); mMqtt.mClient->setCallback(std::bind(&app::cbMqtt, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); mMqttTicker = 0; + // für mqtt test + mMqttTicker = mMqttInterval -10; mSerialTicker = 0; @@ -363,8 +365,12 @@ void app::loop(void) { } } snprintf(val, 10, "%ld", millis()/1000); - sendMqttDiscoveryConfig(); + // sendMqttDiscoveryConfig(); mMqtt.sendMsg("uptime", val); + + // für einfacheren Test mit MQTT, den MQTT abschnitt in 10 Sekunden wieder ausführen + mMqttTicker = mMqttInterval -10; + } if(mSerialValues) { @@ -488,6 +494,9 @@ bool app::buildPayload(uint8_t id) { //----------------------------------------------------------------------------- void app::processPayload(bool retransmit) { + + boolean doMQTT = false; + DPRINTLN(DBG_VERBOSE, F("app::processPayload")); for(uint8_t id = 0; id < mSys->getNumInverters(); id++) { Inverter<> *iv = mSys->getInverterByPos(id); @@ -544,11 +553,23 @@ void app::processPayload(bool retransmit) { yield(); } iv->doCalculations(); + doMQTT = true; + } } yield(); } } + +// ist MQTT aktiviert und es wurden Daten vom einem oder mehreren WR aufbereitet ( doMQTT = true) +// dann die den mMqttTicker auf mMqttIntervall -2 setzen, also +// MQTT aussenden in 2 sek aktivieren +// dies sollte noch über einen Schalter im Setup aktivier / deaktivierbar gemacht werden + if( (mMqttInterval != 0xffff) && doMQTT ) { + ++mMqttTicker = mMqttInterval -2; + DPRINT(DBG_DEBUG, F("MQTTticker auf Intervall -2 sec ")) ; + } + } diff --git a/tools/esp8266/mqtt.h b/tools/esp8266/mqtt.h index 1b02fb166..f8e0389e9 100644 --- a/tools/esp8266/mqtt.h +++ b/tools/esp8266/mqtt.h @@ -121,12 +121,13 @@ class mqtt { else mClient->connect(mDevName); } + // ein Subscribe ist nur nach einem connect notwendig + char topic[MQTT_TOPIC_LEN + 13 ]; // "/devcontrol/#" --> + 6 byte + // ToDo: "/devcontrol/#" is hardcoded + snprintf(topic, MQTT_TOPIC_LEN + 13, "%s/devcontrol/#", mTopic); + DPRINTLN(DBG_INFO, F("subscribe to ") + String(topic)); + mClient->subscribe(topic); // subscribe to mTopic + "/devcontrol/#" } - char topic[MQTT_TOPIC_LEN + 13 ]; // "/devcontrol/#" --> + 6 byte - // ToDo: "/devcontrol/#" is hardcoded - snprintf(topic, MQTT_TOPIC_LEN + 13, "%s/devcontrol/#", mTopic); - DPRINTLN(DBG_INFO, F("subscribe to ") + String(topic)); - mClient->subscribe(topic); // subscribe to mTopic + "/devcontrol/#" } WiFiClient mEspClient; From ef520b65ec717a4c0b234955522a6c68a86b8c79 Mon Sep 17 00:00:00 2001 From: HorstG-57 Date: Wed, 10 Aug 2022 23:49:38 +0200 Subject: [PATCH 2/4] =?UTF-8?q?in=20app.h=20defines=20eingebaut=20mit=20de?= =?UTF-8?q?m=20sich=20das=20verhalten=20der=20app=20in=20Bezug=20auf=20MQT?= =?UTF-8?q?T=20anpassen=20l=C3=A4st=20in=20app.cpp=20bedingte=20Compiler?= =?UTF-8?q?=20Abschnitte=20eingebaut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/esp8266/app.cpp | 31 ++++++++++++++++++++++--------- tools/esp8266/app.h | 6 ++++++ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/tools/esp8266/app.cpp b/tools/esp8266/app.cpp index 9afd44711..b0517c3d0 100644 --- a/tools/esp8266/app.cpp +++ b/tools/esp8266/app.cpp @@ -165,9 +165,11 @@ void app::setup(uint32_t timeout) { mMqtt.setup(mqttAddr, mqttTopic, mqttUser, mqttPwd, mqttDevName, mqttPort); mMqtt.mClient->setCallback(std::bind(&app::cbMqtt, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); mMqttTicker = 0; + +#ifdef __MQTT_TEST__ // für mqtt test mMqttTicker = mMqttInterval -10; - +#endif mSerialTicker = 0; if(mqttAddr[0] > 0) { @@ -365,12 +367,17 @@ void app::loop(void) { } } snprintf(val, 10, "%ld", millis()/1000); - // sendMqttDiscoveryConfig(); + +#ifndef __MQTT_NO_DISCOVERCONFIG__ + // MQTTDiscoveryConfig nur wenn nicht abgeschaltet. + sendMqttDiscoveryConfig(); +#endif mMqtt.sendMsg("uptime", val); +#ifdef __MQTT_TEST__ // für einfacheren Test mit MQTT, den MQTT abschnitt in 10 Sekunden wieder ausführen mMqttTicker = mMqttInterval -10; - +#endif } if(mSerialValues) { @@ -495,7 +502,9 @@ bool app::buildPayload(uint8_t id) { //----------------------------------------------------------------------------- void app::processPayload(bool retransmit) { +#ifdef __MQTT_AFTER_RX__ boolean doMQTT = false; +#endif DPRINTLN(DBG_VERBOSE, F("app::processPayload")); for(uint8_t id = 0; id < mSys->getNumInverters(); id++) { @@ -553,23 +562,27 @@ void app::processPayload(bool retransmit) { yield(); } iv->doCalculations(); + +#ifdef __MQTT_AFTER_RX__ doMQTT = true; - +#endif + } } yield(); } } -// ist MQTT aktiviert und es wurden Daten vom einem oder mehreren WR aufbereitet ( doMQTT = true) -// dann die den mMqttTicker auf mMqttIntervall -2 setzen, also -// MQTT aussenden in 2 sek aktivieren -// dies sollte noch über einen Schalter im Setup aktivier / deaktivierbar gemacht werden +#ifdef __MQTT_AFTER_RX__ + // ist MQTT aktiviert und es wurden Daten vom einem oder mehreren WR aufbereitet ( doMQTT = true) + // dann die den mMqttTicker auf mMqttIntervall -2 setzen, also + // MQTT aussenden in 2 sek aktivieren + // dies sollte noch über einen Schalter im Setup aktivier / deaktivierbar gemacht werden if( (mMqttInterval != 0xffff) && doMQTT ) { ++mMqttTicker = mMqttInterval -2; DPRINT(DBG_DEBUG, F("MQTTticker auf Intervall -2 sec ")) ; } - +#endif } diff --git a/tools/esp8266/app.h b/tools/esp8266/app.h index ca9bac1fc..8c563fe1e 100644 --- a/tools/esp8266/app.h +++ b/tools/esp8266/app.h @@ -17,6 +17,12 @@ #include "hmSystem.h" #include "mqtt.h" +// hier läst sich das Verhalten der app in Bezug auf MQTT +// durch PER-Conpiler defines anpassen +// +// #define __MQTT_TEST__ // MQTT Interval wird auf 10 Sekunden verkürzt ( nur für testzwecke ) +#define __MQTT_AFTER_RX__ // versendet die MQTT Daten sobald die WR daten Aufbereitet wurden ( gehört eigentlich ins Setup ) +// #define __MQTT_NO_DISCOVERCONFIG__ // das versenden der MQTTDiscoveryConfig abschalten ( gehört eigentlich ins Setup ) typedef CircularBuffer BufferType; typedef HmRadio RadioType; From e5be85cb2705fde41f837c83fa01eaf094bd3024 Mon Sep 17 00:00:00 2001 From: lumapu Date: Thu, 11 Aug 2022 13:42:26 +0200 Subject: [PATCH 3/4] Update hmRadio.h changes requested by @aschiffler regarding hmRadio.h --- tools/esp8266/hmRadio.h | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/tools/esp8266/hmRadio.h b/tools/esp8266/hmRadio.h index 23573dfd5..a5c6f8633 100644 --- a/tools/esp8266/hmRadio.h +++ b/tools/esp8266/hmRadio.h @@ -172,16 +172,17 @@ class HmRadio { // 4 bytes control data // Power Limit fix point 10 eg. 30 W --> 0d300 = 0x012c // -1 = 0xffff --> no limit - if (data[0] == 0xffff){ - data[0] &= 0xffff; // ToDo: unlimit value is needed and is inverter specific! --> get it via RF from inverter or via user interface + uint16_t powerLimit = data[0]; + uint16_t powerLimitSetting = data[1]; + if (powerLimit == 0xffff){ + powerLimit &= 0xffff; // ToDo: unlimit value is needed and is inverter specific! --> get it via RF from inverter or via user interface } else { - data[0] *= 10; // will overwrite the data bc it is a pointer + powerLimit *= 10; // will overwrite the data bc it is a pointer } - mTxBuf[10 + (++cnt)] = (data[0] >> 8) & 0xff; // power limit - mTxBuf[10 + (++cnt)] = (data[0] ) & 0xff; // power limit - mTxBuf[10 + (++cnt)] = (data[1] >> 8) & 0xff; // setting for persistens handling - mTxBuf[10 + (++cnt)] = (data[1] ) & 0xff; // setting for persistens handling - data[0] /= 10; // UGLY! + mTxBuf[10 + (++cnt)] = (powerLimit >> 8) & 0xff; // power limit + mTxBuf[10 + (++cnt)] = (powerLimit ) & 0xff; // power limit + mTxBuf[10 + (++cnt)] = (powerLimitSetting >> 8) & 0xff; // setting for persistens handling + mTxBuf[10 + (++cnt)] = (powerLimitSetting ) & 0xff; // setting for persistens handling } // crc control data uint16_t crc = crc16(&mTxBuf[10], cnt+1); From adf3de510f035c9baa8df8cf5d3a4b42770fe73e Mon Sep 17 00:00:00 2001 From: lumapu Date: Thu, 11 Aug 2022 13:43:22 +0200 Subject: [PATCH 4/4] Update defines.h update version to 0.5.6 --- tools/esp8266/defines.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/esp8266/defines.h b/tools/esp8266/defines.h index eade9a22f..b5813f938 100644 --- a/tools/esp8266/defines.h +++ b/tools/esp8266/defines.h @@ -21,7 +21,7 @@ //------------------------------------- #define VERSION_MAJOR 0 #define VERSION_MINOR 5 -#define VERSION_PATCH 5 +#define VERSION_PATCH 6 //-------------------------------------