Skip to content

Commit

Permalink
powermeter refactor: publish values to MQTT in base class
Browse files Browse the repository at this point in the history
"powertotal" is always published and it is published by the base class
directly. other values are still published by the derived classes, but
use a base class method, which takes care that a common base topic is
used in particular.
  • Loading branch information
schlimmchen committed Jun 26, 2024
1 parent 9eb4f17 commit d99cfd5
Show file tree
Hide file tree
Showing 8 changed files with 28 additions and 46 deletions.
2 changes: 2 additions & 0 deletions include/PowerMeterProvider.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ class PowerMeterProvider {

void gotUpdate() { _lastUpdate = millis(); }

void mqttPublish(String const& topic, float const& value) const;

bool _verboseLogging;

private:
Expand Down
11 changes: 3 additions & 8 deletions src/PowerMeterHttpJson.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
#include "Configuration.h"
#include "PowerMeterHttpJson.h"
#include "MessageOutput.h"
#include "MqttSettings.h"
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
#include "mbedtls/sha256.h"
Expand Down Expand Up @@ -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)
Expand Down
5 changes: 0 additions & 5 deletions src/PowerMeterHttpSml.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
#include "Configuration.h"
#include "PowerMeterHttpSml.h"
#include "MessageOutput.h"
#include "MqttSettings.h"
#include <WiFiClientSecure.h>
#include <base64.h>
#include <ESPmDNS.h>
Expand All @@ -15,10 +14,6 @@ float PowerMeterHttpSml::getPowerTotal() const

void PowerMeterHttpSml::doMqttPublish() const
{
String topic = "powermeter";

std::lock_guard<std::mutex> l(_mutex);
MqttSettings.publish(topic + "/powertotal", String(_activePower));
}

void PowerMeterHttpSml::loop()
Expand Down
10 changes: 3 additions & 7 deletions src/PowerMeterMqtt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,8 @@ float PowerMeterMqtt::getPowerTotal() const

void PowerMeterMqtt::doMqttPublish() const
{
String topic = "powermeter";
auto totalPower = getPowerTotal();

std::lock_guard<std::mutex> 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);
}
7 changes: 7 additions & 0 deletions src/PowerMeterProvider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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; }
Expand All @@ -16,6 +21,8 @@ void PowerMeterProvider::mqttLoop() const
auto constexpr halfOfAllMillis = std::numeric_limits<uint32_t>::max() / 2;
if ((_lastUpdate - _lastMqttPublish) > halfOfAllMillis) { return; }

mqttPublish("powertotal", getPowerTotal());

doMqttPublish();

_lastMqttPublish = millis();
Expand Down
21 changes: 8 additions & 13 deletions src/PowerMeterSerialSdm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
#include "Configuration.h"
#include "PinMapping.h"
#include "MessageOutput.h"
#include "MqttSettings.h"
#include "SerialPortManager.h"

void PowerMeterSerialSdm::deinit()
Expand Down Expand Up @@ -47,19 +46,15 @@ float PowerMeterSerialSdm::getPowerTotal() const

void PowerMeterSerialSdm::doMqttPublish() const
{
String topic = "powermeter";
auto power = getPowerTotal();

std::lock_guard<std::mutex> 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()
Expand Down
8 changes: 2 additions & 6 deletions src/PowerMeterSerialSml.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
#include "Configuration.h"
#include "PinMapping.h"
#include "MessageOutput.h"
#include "MqttSettings.h"

bool PowerMeterSerialSml::init()
{
Expand Down Expand Up @@ -35,12 +34,9 @@ void PowerMeterSerialSml::deinit()

void PowerMeterSerialSml::doMqttPublish() const
{
String topic = "powermeter";

std::lock_guard<std::mutex> 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()
Expand Down
10 changes: 3 additions & 7 deletions src/PowerMeterUdpSmaHomeManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
*/
#include "PowerMeterUdpSmaHomeManager.h"
#include <Arduino.h>
#include "MqttSettings.h"
#include <WiFiUdp.h>
#include "MessageOutput.h"

Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit d99cfd5

Please sign in to comment.