powermeter refactor: publish values to MQTT in base class
"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.
This commit is contained in:
parent
9eb4f1714c
commit
d99cfd5b31
@ -37,6 +37,8 @@ protected:
|
||||
|
||||
void gotUpdate() { _lastUpdate = millis(); }
|
||||
|
||||
void mqttPublish(String const& topic, float const& value) const;
|
||||
|
||||
bool _verboseLogging;
|
||||
|
||||
private:
|
||||
|
||||
@ -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"
|
||||
@ -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)
|
||||
|
||||
@ -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>
|
||||
@ -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()
|
||||
|
||||
@ -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,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<uint32_t>::max() / 2;
|
||||
if ((_lastUpdate - _lastMqttPublish) > halfOfAllMillis) { return; }
|
||||
|
||||
mqttPublish("powertotal", getPowerTotal());
|
||||
|
||||
doMqttPublish();
|
||||
|
||||
_lastMqttPublish = millis();
|
||||
|
||||
@ -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<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()
|
||||
|
||||
@ -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<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()
|
||||
|
||||
@ -4,7 +4,6 @@
|
||||
*/
|
||||
#include "PowerMeterUdpSmaHomeManager.h"
|
||||
#include <Arduino.h>
|
||||
#include "MqttSettings.h"
|
||||
#include <WiFiUdp.h>
|
||||
#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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user