diff --git a/include/PowerMeterProvider.h b/include/PowerMeterProvider.h index 8b9225ab..17704135 100644 --- a/include/PowerMeterProvider.h +++ b/include/PowerMeterProvider.h @@ -37,6 +37,8 @@ protected: void gotUpdate() { _lastUpdate = millis(); } + void mqttPublish(String const& topic, float const& value) const; + bool _verboseLogging; private: diff --git a/src/PowerMeterHttpJson.cpp b/src/PowerMeterHttpJson.cpp index bf13ca25..c8d95bd3 100644 --- a/src/PowerMeterHttpJson.cpp +++ b/src/PowerMeterHttpJson.cpp @@ -2,7 +2,6 @@ #include "Configuration.h" #include "PowerMeterHttpJson.h" #include "MessageOutput.h" -#include "MqttSettings.h" #include #include #include "mbedtls/sha256.h" @@ -57,13 +56,9 @@ float PowerMeterHttpJson::getPowerTotal() const void PowerMeterHttpJson::doMqttPublish() const { - String topic = "powermeter"; - auto power = getPowerTotal(); - - MqttSettings.publish(topic + "/power1", String(_powerValues[0])); - MqttSettings.publish(topic + "/power2", String(_powerValues[1])); - MqttSettings.publish(topic + "/power3", String(_powerValues[2])); - MqttSettings.publish(topic + "/powertotal", String(power)); + mqttPublish("power1", _powerValues[0]); + mqttPublish("power2", _powerValues[1]); + mqttPublish("power3", _powerValues[2]); } bool PowerMeterHttpJson::queryPhase(int phase, PowerMeterHttpConfig const& config) diff --git a/src/PowerMeterHttpSml.cpp b/src/PowerMeterHttpSml.cpp index e7462fdf..f3d8e0c7 100644 --- a/src/PowerMeterHttpSml.cpp +++ b/src/PowerMeterHttpSml.cpp @@ -2,7 +2,6 @@ #include "Configuration.h" #include "PowerMeterHttpSml.h" #include "MessageOutput.h" -#include "MqttSettings.h" #include #include #include @@ -15,10 +14,6 @@ float PowerMeterHttpSml::getPowerTotal() const void PowerMeterHttpSml::doMqttPublish() const { - String topic = "powermeter"; - - std::lock_guard l(_mutex); - MqttSettings.publish(topic + "/powertotal", String(_activePower)); } void PowerMeterHttpSml::loop() diff --git a/src/PowerMeterMqtt.cpp b/src/PowerMeterMqtt.cpp index 1a74f41d..3204bf1f 100644 --- a/src/PowerMeterMqtt.cpp +++ b/src/PowerMeterMqtt.cpp @@ -63,12 +63,8 @@ float PowerMeterMqtt::getPowerTotal() const void PowerMeterMqtt::doMqttPublish() const { - String topic = "powermeter"; - auto totalPower = getPowerTotal(); - std::lock_guard l(_mutex); - MqttSettings.publish(topic + "/power1", String(_powerValueOne)); - MqttSettings.publish(topic + "/power2", String(_powerValueTwo)); - MqttSettings.publish(topic + "/power3", String(_powerValueThree)); - MqttSettings.publish(topic + "/powertotal", String(totalPower)); + mqttPublish("power1", _powerValueOne); + mqttPublish("power2", _powerValueTwo); + mqttPublish("power3", _powerValueThree); } diff --git a/src/PowerMeterProvider.cpp b/src/PowerMeterProvider.cpp index 8becdebd..d1c7d628 100644 --- a/src/PowerMeterProvider.cpp +++ b/src/PowerMeterProvider.cpp @@ -7,6 +7,11 @@ bool PowerMeterProvider::isDataValid() const return _lastUpdate > 0 && ((millis() - _lastUpdate) < (30 * 1000)); } +void PowerMeterProvider::mqttPublish(String const& topic, float const& value) const +{ + MqttSettings.publish("powermeter/" + topic, String(value)); +} + void PowerMeterProvider::mqttLoop() const { if (!MqttSettings.getConnected()) { return; } @@ -16,6 +21,8 @@ void PowerMeterProvider::mqttLoop() const auto constexpr halfOfAllMillis = std::numeric_limits::max() / 2; if ((_lastUpdate - _lastMqttPublish) > halfOfAllMillis) { return; } + mqttPublish("powertotal", getPowerTotal()); + doMqttPublish(); _lastMqttPublish = millis(); diff --git a/src/PowerMeterSerialSdm.cpp b/src/PowerMeterSerialSdm.cpp index d08cac19..f040c173 100644 --- a/src/PowerMeterSerialSdm.cpp +++ b/src/PowerMeterSerialSdm.cpp @@ -3,7 +3,6 @@ #include "Configuration.h" #include "PinMapping.h" #include "MessageOutput.h" -#include "MqttSettings.h" #include "SerialPortManager.h" void PowerMeterSerialSdm::deinit() @@ -47,19 +46,15 @@ float PowerMeterSerialSdm::getPowerTotal() const void PowerMeterSerialSdm::doMqttPublish() const { - String topic = "powermeter"; - auto power = getPowerTotal(); - std::lock_guard l(_mutex); - MqttSettings.publish(topic + "/power1", String(_phase1Power)); - MqttSettings.publish(topic + "/power2", String(_phase2Power)); - MqttSettings.publish(topic + "/power3", String(_phase3Power)); - MqttSettings.publish(topic + "/powertotal", String(power)); - MqttSettings.publish(topic + "/voltage1", String(_phase1Voltage)); - MqttSettings.publish(topic + "/voltage2", String(_phase2Voltage)); - MqttSettings.publish(topic + "/voltage3", String(_phase3Voltage)); - MqttSettings.publish(topic + "/import", String(_energyImport)); - MqttSettings.publish(topic + "/export", String(_energyExport)); + mqttPublish("power1", _phase1Power); + mqttPublish("power2", _phase2Power); + mqttPublish("power3", _phase3Power); + mqttPublish("voltage1", _phase1Voltage); + mqttPublish("voltage2", _phase2Voltage); + mqttPublish("voltage3", _phase3Voltage); + mqttPublish("import", _energyImport); + mqttPublish("export", _energyExport); } void PowerMeterSerialSdm::loop() diff --git a/src/PowerMeterSerialSml.cpp b/src/PowerMeterSerialSml.cpp index 04792514..9236dcd7 100644 --- a/src/PowerMeterSerialSml.cpp +++ b/src/PowerMeterSerialSml.cpp @@ -3,7 +3,6 @@ #include "Configuration.h" #include "PinMapping.h" #include "MessageOutput.h" -#include "MqttSettings.h" bool PowerMeterSerialSml::init() { @@ -35,12 +34,9 @@ void PowerMeterSerialSml::deinit() void PowerMeterSerialSml::doMqttPublish() const { - String topic = "powermeter"; - std::lock_guard l(_mutex); - MqttSettings.publish(topic + "/powertotal", String(_activePower)); - MqttSettings.publish(topic + "/import", String(_energyImport)); - MqttSettings.publish(topic + "/export", String(_energyExport)); + mqttPublish("import", _energyImport); + mqttPublish("export", _energyExport); } void PowerMeterSerialSml::loop() diff --git a/src/PowerMeterUdpSmaHomeManager.cpp b/src/PowerMeterUdpSmaHomeManager.cpp index b79ae3d9..1347bfb4 100644 --- a/src/PowerMeterUdpSmaHomeManager.cpp +++ b/src/PowerMeterUdpSmaHomeManager.cpp @@ -4,7 +4,6 @@ */ #include "PowerMeterUdpSmaHomeManager.h" #include -#include "MqttSettings.h" #include #include "MessageOutput.h" @@ -37,12 +36,9 @@ void PowerMeterUdpSmaHomeManager::deinit() void PowerMeterUdpSmaHomeManager::doMqttPublish() const { - String topic = "powermeter"; - - MqttSettings.publish(topic + "/powertotal", String(_powerMeterPower)); - MqttSettings.publish(topic + "/power1", String(_powerMeterL1)); - MqttSettings.publish(topic + "/power2", String(_powerMeterL2)); - MqttSettings.publish(topic + "/power3", String(_powerMeterL3)); + mqttPublish("power1", _powerMeterL1); + mqttPublish("power2", _powerMeterL2); + mqttPublish("power3", _powerMeterL3); } uint8_t* PowerMeterUdpSmaHomeManager::decodeGroup(uint8_t* offset, uint16_t grouplen)