From 4b7160b5024356a188b17567b88475e359a1d8a8 Mon Sep 17 00:00:00 2001 From: Gunnar Skjold Date: Mon, 27 Feb 2023 08:30:56 +0100 Subject: [PATCH] Only report realtime data on MQTT if EnergyAccounting is initialized --- .../include/EnergyAccounting.h | 1 + lib/EnergyAccounting/src/EnergyAccounting.cpp | 4 ++ .../src/HomeAssistantMqttHandler.cpp | 46 ++++++++++--------- lib/RawMqttHandler/src/RawMqttHandler.cpp | 26 ++++++----- 4 files changed, 43 insertions(+), 34 deletions(-) diff --git a/lib/EnergyAccounting/include/EnergyAccounting.h b/lib/EnergyAccounting/include/EnergyAccounting.h index ab3dc026..5531ce84 100644 --- a/lib/EnergyAccounting/include/EnergyAccounting.h +++ b/lib/EnergyAccounting/include/EnergyAccounting.h @@ -52,6 +52,7 @@ public: bool update(AmsData* amsData); bool load(); bool save(); + bool isInitialized(); double getUseThisHour(); double getUseToday(); diff --git a/lib/EnergyAccounting/src/EnergyAccounting.cpp b/lib/EnergyAccounting/src/EnergyAccounting.cpp index 33e8ff19..8662c49e 100644 --- a/lib/EnergyAccounting/src/EnergyAccounting.cpp +++ b/lib/EnergyAccounting/src/EnergyAccounting.cpp @@ -26,6 +26,10 @@ void EnergyAccounting::setTimezone(Timezone* tz) { this->tz = tz; } +bool EnergyAccounting::isInitialized() { + return this->init; +} + bool EnergyAccounting::update(AmsData* amsData) { if(config == NULL) return false; time_t now = time(nullptr); diff --git a/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp b/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp index 02ec96b8..5f8dc9c8 100644 --- a/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp +++ b/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp @@ -80,28 +80,30 @@ bool HomeAssistantMqttHandler::publish(AmsData* data, AmsData* previousState, En mqtt->publish(topic + "/power", json); } - String peaks = ""; - uint8_t peakCount = ea->getConfig()->hours; - if(peakCount > 5) peakCount = 5; - for(uint8_t i = 1; i <= peakCount; i++) { - if(!peaks.isEmpty()) peaks += ","; - peaks += String(ea->getPeak(i).value / 100.0, 2); - } - snprintf_P(json, BufferSize, REALTIME_JSON, - ea->getMonthMax(), - peaks.c_str(), - ea->getCurrentThreshold(), - ea->getUseThisHour(), - ea->getCostThisHour(), - ea->getProducedThisHour(), - ea->getUseToday(), - ea->getCostToday(), - ea->getProducedToday(), - ea->getUseThisMonth(), - ea->getCostThisMonth(), - ea->getProducedThisMonth() - ); - mqtt->publish(topic + "/realtime", json); + if(ea->isInitialized()) { + String peaks = ""; + uint8_t peakCount = ea->getConfig()->hours; + if(peakCount > 5) peakCount = 5; + for(uint8_t i = 1; i <= peakCount; i++) { + if(!peaks.isEmpty()) peaks += ","; + peaks += String(ea->getPeak(i).value / 100.0, 2); + } + snprintf_P(json, BufferSize, REALTIME_JSON, + ea->getMonthMax(), + peaks.c_str(), + ea->getCurrentThreshold(), + ea->getUseThisHour(), + ea->getCostThisHour(), + ea->getProducedThisHour(), + ea->getUseToday(), + ea->getCostToday(), + ea->getProducedToday(), + ea->getUseThisMonth(), + ea->getCostThisMonth(), + ea->getProducedThisMonth() + ); + mqtt->publish(topic + "/realtime", json); + } return true; } diff --git a/lib/RawMqttHandler/src/RawMqttHandler.cpp b/lib/RawMqttHandler/src/RawMqttHandler.cpp index 35a516f8..2ec9e5bc 100644 --- a/lib/RawMqttHandler/src/RawMqttHandler.cpp +++ b/lib/RawMqttHandler/src/RawMqttHandler.cpp @@ -90,19 +90,21 @@ bool RawMqttHandler::publish(AmsData* data, AmsData* meterState, EnergyAccountin mqtt->publish(topic + "/meter/import/active", String(data->getActiveImportPower())); } } - mqtt->publish(topic + "/realtime/import/hour", String(ea->getUseThisHour(), 3)); - mqtt->publish(topic + "/realtime/import/day", String(ea->getUseToday(), 2)); - mqtt->publish(topic + "/realtime/import/month", String(ea->getUseThisMonth(), 1)); - uint8_t peakCount = ea->getConfig()->hours; - if(peakCount > 5) peakCount = 5; - for(uint8_t i = 1; i <= peakCount; i++) { - mqtt->publish(topic + "/realtime/import/peak/" + String(i, 10), String(ea->getPeak(i).value / 100.0, 10), true, 0); + if(ea->isInitialized()) { + mqtt->publish(topic + "/realtime/import/hour", String(ea->getUseThisHour(), 3)); + mqtt->publish(topic + "/realtime/import/day", String(ea->getUseToday(), 2)); + mqtt->publish(topic + "/realtime/import/month", String(ea->getUseThisMonth(), 1)); + uint8_t peakCount = ea->getConfig()->hours; + if(peakCount > 5) peakCount = 5; + for(uint8_t i = 1; i <= peakCount; i++) { + mqtt->publish(topic + "/realtime/import/peak/" + String(i, 10), String(ea->getPeak(i).value / 100.0, 10), true, 0); + } + mqtt->publish(topic + "/realtime/import/threshold", String(ea->getCurrentThreshold(), 10), true, 0); + mqtt->publish(topic + "/realtime/import/monthmax", String(ea->getMonthMax(), 3), true, 0); + mqtt->publish(topic + "/realtime/export/hour", String(ea->getProducedThisHour(), 3)); + mqtt->publish(topic + "/realtime/export/day", String(ea->getProducedToday(), 2)); + mqtt->publish(topic + "/realtime/export/month", String(ea->getProducedThisMonth(), 1)); } - mqtt->publish(topic + "/realtime/import/threshold", String(ea->getCurrentThreshold(), 10), true, 0); - mqtt->publish(topic + "/realtime/import/monthmax", String(ea->getMonthMax(), 3), true, 0); - mqtt->publish(topic + "/realtime/export/hour", String(ea->getProducedThisHour(), 3)); - mqtt->publish(topic + "/realtime/export/day", String(ea->getProducedToday(), 2)); - mqtt->publish(topic + "/realtime/export/month", String(ea->getProducedThisMonth(), 1)); return true; }