diff --git a/include/MqttHassPublishing.h b/include/MqttHassPublishing.h index 7a9cb8c..2329f13 100644 --- a/include/MqttHassPublishing.h +++ b/include/MqttHassPublishing.h @@ -53,11 +53,13 @@ public: void init(); void loop(); void publishConfig(); + void forceUpdate(); private: void publishField(std::shared_ptr inv, uint8_t channel, byteAssign_fieldDeviceClass_t fieldType, bool clear = false); bool _wasConnected = false; + bool _updateForced = false; }; extern MqttHassPublishingClass MqttHassPublishing; \ No newline at end of file diff --git a/src/MqttHassPublishing.cpp b/src/MqttHassPublishing.cpp index ceba1ca..adce730 100644 --- a/src/MqttHassPublishing.cpp +++ b/src/MqttHassPublishing.cpp @@ -16,6 +16,11 @@ void MqttHassPublishingClass::init() void MqttHassPublishingClass::loop() { + if (_updateForced) { + publishConfig(); + _updateForced = false; + } + if (MqttSettings.getConnected() && !_wasConnected) { // Connection established _wasConnected = true; @@ -26,6 +31,11 @@ void MqttHassPublishingClass::loop() } } +void MqttHassPublishingClass::forceUpdate() +{ + _updateForced = true; +} + void MqttHassPublishingClass::publishConfig() { if (!Configuration.get().Mqtt_Hass_Enabled) { diff --git a/src/WebApi_inverter.cpp b/src/WebApi_inverter.cpp index 0cc25f1..473425e 100644 --- a/src/WebApi_inverter.cpp +++ b/src/WebApi_inverter.cpp @@ -7,6 +7,7 @@ #include "AsyncJson.h" #include "Configuration.h" #include "Hoymiles.h" +#include "MqttHassPublishing.h" #include "helper.h" void WebApiInverterClass::init(AsyncWebServer* server) @@ -143,6 +144,8 @@ void WebApiInverterClass::onInverterAdd(AsyncWebServerRequest* request) for (uint8_t c = 0; c < INV_MAX_CHAN_COUNT; c++) { inv->Statistics()->setChannelMaxPower(c, inverter->MaxChannelPower[c]); } + + MqttHassPublishing.forceUpdate(); } void WebApiInverterClass::onInverterEdit(AsyncWebServerRequest* request) @@ -217,7 +220,6 @@ void WebApiInverterClass::onInverterEdit(AsyncWebServerRequest* request) return; } - INVERTER_CONFIG_T& inverter = Configuration.get().Inverter[root[F("id")].as()]; char* t; @@ -250,6 +252,8 @@ void WebApiInverterClass::onInverterEdit(AsyncWebServerRequest* request) for (uint8_t c = 0; c < INV_MAX_CHAN_COUNT; c++) { inv->Statistics()->setChannelMaxPower(c, inverter.MaxChannelPower[c]); } + + MqttHassPublishing.forceUpdate(); } void WebApiInverterClass::onInverterDelete(AsyncWebServerRequest* request) @@ -311,4 +315,6 @@ void WebApiInverterClass::onInverterDelete(AsyncWebServerRequest* request) request->send(response); Hoymiles.removeInverterByPos(inverter_id); + + MqttHassPublishing.forceUpdate(); } \ No newline at end of file diff --git a/src/WebApi_mqtt.cpp b/src/WebApi_mqtt.cpp index b6a6f37..08bc913 100644 --- a/src/WebApi_mqtt.cpp +++ b/src/WebApi_mqtt.cpp @@ -211,5 +211,5 @@ void WebApiMqttClass::onMqttAdminPost(AsyncWebServerRequest* request) request->send(response); MqttSettings.performReconnect(); - MqttHassPublishing.publishConfig(); + MqttHassPublishing.forceUpdate(); } \ No newline at end of file