perf(PowerMeter): query PowerMeter on demand

In addition to the cyclic query of the power meters, they will be queried on demand when total power is requested and last update is older than 1 second.
This commit is contained in:
helgeerbe 2023-06-14 11:25:54 +02:00
parent 8dac88e7b9
commit 86ee7e1a64
2 changed files with 20 additions and 6 deletions

View File

@ -60,6 +60,8 @@ private:
bool mqttInitDone = false; bool mqttInitDone = false;
void readPowerMeter();
bool smlReadLoop(); bool smlReadLoop();
const std::list<OBISHandler> smlHandlerList{ const std::list<OBISHandler> smlHandlerList{
{{0x01, 0x00, 0x10, 0x07, 0x00, 0xff}, &smlOBISW, &_powerMeter1Power}, {{0x01, 0x00, 0x10, 0x07, 0x00, 0xff}, &smlOBISW, &_powerMeter1Power},

View File

@ -96,6 +96,11 @@ void PowerMeterClass::onMqttMessage(const espMqttClientTypes::MessageProperties&
float PowerMeterClass::getPowerTotal() float PowerMeterClass::getPowerTotal()
{ {
CONFIG_T& config = Configuration.get();
if (!config.PowerMeter_Enabled
|| (millis() - _lastPowerMeterUpdate) < (1000)) {
readPowerMeter();
}
return _powerMeter1Power + _powerMeter2Power + _powerMeter3Power; return _powerMeter1Power + _powerMeter2Power + _powerMeter3Power;
} }
@ -137,6 +142,19 @@ void PowerMeterClass::loop()
return; return;
} }
readPowerMeter();
MessageOutput.printf("PowerMeterClass: TotalPower: %5.2f\r\n", getPowerTotal());
mqtt();
_lastPowerMeterCheck = millis();
}
void PowerMeterClass::readPowerMeter()
{
CONFIG_T& config = Configuration.get();
uint8_t _address = config.PowerMeter_SdmAddress; uint8_t _address = config.PowerMeter_SdmAddress;
if (config.PowerMeter_Source == SOURCE_SDM1PH) { if (config.PowerMeter_Source == SOURCE_SDM1PH) {
@ -169,12 +187,6 @@ void PowerMeterClass::loop()
_lastPowerMeterUpdate = millis(); _lastPowerMeterUpdate = millis();
} }
} }
MessageOutput.printf("PowerMeterClass: TotalPower: %5.2f\r\n", getPowerTotal());
mqtt();
_lastPowerMeterCheck = millis();
} }
bool PowerMeterClass::smlReadLoop() bool PowerMeterClass::smlReadLoop()