Publish HASS config when deleting, editing or adding a inverter

This commit is contained in:
Thomas Basler 2022-07-18 23:34:32 +02:00
parent aaca7ad0b6
commit 526137da98
4 changed files with 20 additions and 2 deletions

View File

@ -53,11 +53,13 @@ public:
void init(); void init();
void loop(); void loop();
void publishConfig(); void publishConfig();
void forceUpdate();
private: private:
void publishField(std::shared_ptr<InverterAbstract> inv, uint8_t channel, byteAssign_fieldDeviceClass_t fieldType, bool clear = false); void publishField(std::shared_ptr<InverterAbstract> inv, uint8_t channel, byteAssign_fieldDeviceClass_t fieldType, bool clear = false);
bool _wasConnected = false; bool _wasConnected = false;
bool _updateForced = false;
}; };
extern MqttHassPublishingClass MqttHassPublishing; extern MqttHassPublishingClass MqttHassPublishing;

View File

@ -16,6 +16,11 @@ void MqttHassPublishingClass::init()
void MqttHassPublishingClass::loop() void MqttHassPublishingClass::loop()
{ {
if (_updateForced) {
publishConfig();
_updateForced = false;
}
if (MqttSettings.getConnected() && !_wasConnected) { if (MqttSettings.getConnected() && !_wasConnected) {
// Connection established // Connection established
_wasConnected = true; _wasConnected = true;
@ -26,6 +31,11 @@ void MqttHassPublishingClass::loop()
} }
} }
void MqttHassPublishingClass::forceUpdate()
{
_updateForced = true;
}
void MqttHassPublishingClass::publishConfig() void MqttHassPublishingClass::publishConfig()
{ {
if (!Configuration.get().Mqtt_Hass_Enabled) { if (!Configuration.get().Mqtt_Hass_Enabled) {

View File

@ -7,6 +7,7 @@
#include "AsyncJson.h" #include "AsyncJson.h"
#include "Configuration.h" #include "Configuration.h"
#include "Hoymiles.h" #include "Hoymiles.h"
#include "MqttHassPublishing.h"
#include "helper.h" #include "helper.h"
void WebApiInverterClass::init(AsyncWebServer* server) 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++) { for (uint8_t c = 0; c < INV_MAX_CHAN_COUNT; c++) {
inv->Statistics()->setChannelMaxPower(c, inverter->MaxChannelPower[c]); inv->Statistics()->setChannelMaxPower(c, inverter->MaxChannelPower[c]);
} }
MqttHassPublishing.forceUpdate();
} }
void WebApiInverterClass::onInverterEdit(AsyncWebServerRequest* request) void WebApiInverterClass::onInverterEdit(AsyncWebServerRequest* request)
@ -217,7 +220,6 @@ void WebApiInverterClass::onInverterEdit(AsyncWebServerRequest* request)
return; return;
} }
INVERTER_CONFIG_T& inverter = Configuration.get().Inverter[root[F("id")].as<uint8_t>()]; INVERTER_CONFIG_T& inverter = Configuration.get().Inverter[root[F("id")].as<uint8_t>()];
char* t; char* t;
@ -250,6 +252,8 @@ void WebApiInverterClass::onInverterEdit(AsyncWebServerRequest* request)
for (uint8_t c = 0; c < INV_MAX_CHAN_COUNT; c++) { for (uint8_t c = 0; c < INV_MAX_CHAN_COUNT; c++) {
inv->Statistics()->setChannelMaxPower(c, inverter.MaxChannelPower[c]); inv->Statistics()->setChannelMaxPower(c, inverter.MaxChannelPower[c]);
} }
MqttHassPublishing.forceUpdate();
} }
void WebApiInverterClass::onInverterDelete(AsyncWebServerRequest* request) void WebApiInverterClass::onInverterDelete(AsyncWebServerRequest* request)
@ -311,4 +315,6 @@ void WebApiInverterClass::onInverterDelete(AsyncWebServerRequest* request)
request->send(response); request->send(response);
Hoymiles.removeInverterByPos(inverter_id); Hoymiles.removeInverterByPos(inverter_id);
MqttHassPublishing.forceUpdate();
} }

View File

@ -211,5 +211,5 @@ void WebApiMqttClass::onMqttAdminPost(AsyncWebServerRequest* request)
request->send(response); request->send(response);
MqttSettings.performReconnect(); MqttSettings.performReconnect();
MqttHassPublishing.publishConfig(); MqttHassPublishing.forceUpdate();
} }