mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-01-23 02:58:13 +00:00
112 lines
2.9 KiB
C++
112 lines
2.9 KiB
C++
/**
|
|
* @copyright Utilitech AS 2023
|
|
* License: Fair Source
|
|
*
|
|
*/
|
|
|
|
#include "DomoticzMqttHandler.h"
|
|
#include "json/domoticz_json.h"
|
|
#include "Uptime.h"
|
|
|
|
bool DomoticzMqttHandler::publish(AmsData* update, AmsData* previousState, EnergyAccounting* ea, PriceService* ps) {
|
|
bool ret = false;
|
|
|
|
AmsData data;
|
|
if(mqttConfig.stateUpdate) {
|
|
uint64_t now = millis64();
|
|
if(now-lastStateUpdate < mqttConfig.stateUpdateInterval * 1000) return false;
|
|
data.apply(*previousState);
|
|
data.apply(*update);
|
|
lastStateUpdate = now;
|
|
} else {
|
|
data = *update;
|
|
}
|
|
|
|
if (config.elidx > 0) {
|
|
if(data.getActiveImportCounter() > 1.0 && !data.isCounterEstimated()) {
|
|
energy = data.getActiveImportCounter();
|
|
}
|
|
if(energy > 0.0) {
|
|
char val[16];
|
|
snprintf_P(val, 16, PSTR("%.1f;%.1f"), (data.getActiveImportPower()/1.0), energy*1000.0);
|
|
snprintf_P(json, BufferSize, DOMOTICZ_JSON,
|
|
config.elidx,
|
|
val
|
|
);
|
|
ret = mqtt.publish(F("domoticz/in"), json);
|
|
mqtt.loop();
|
|
}
|
|
}
|
|
|
|
if(data.getListType() == 1)
|
|
return ret;
|
|
|
|
if (config.vl1idx > 0){
|
|
char val[16];
|
|
snprintf_P(val, 16, PSTR("%.2f"), data.getL1Voltage());
|
|
snprintf_P(json, BufferSize, DOMOTICZ_JSON,
|
|
config.vl1idx,
|
|
val
|
|
);
|
|
ret |= mqtt.publish(F("domoticz/in"), json);
|
|
mqtt.loop();
|
|
}
|
|
|
|
if (config.vl2idx > 0){
|
|
char val[16];
|
|
snprintf_P(val, 16, PSTR("%.2f"), data.getL2Voltage());
|
|
snprintf_P(json, BufferSize, DOMOTICZ_JSON,
|
|
config.vl2idx,
|
|
val
|
|
);
|
|
ret |= mqtt.publish(F("domoticz/in"), json);
|
|
mqtt.loop();
|
|
}
|
|
|
|
if (config.vl3idx > 0){
|
|
char val[16];
|
|
snprintf(val, 16, "%.2f", data.getL3Voltage());
|
|
snprintf_P(json, BufferSize, DOMOTICZ_JSON,
|
|
config.vl3idx,
|
|
val
|
|
);
|
|
ret |= mqtt.publish(F("domoticz/in"), json);
|
|
mqtt.loop();
|
|
}
|
|
|
|
if (config.cl1idx > 0){
|
|
char val[16];
|
|
snprintf(val, 16, "%.1f;%.1f;%.1f", data.getL1Current(), data.getL2Current(), data.getL3Current());
|
|
snprintf_P(json, BufferSize, DOMOTICZ_JSON,
|
|
config.cl1idx,
|
|
val
|
|
);
|
|
ret |= mqtt.publish(F("domoticz/in"), json);
|
|
mqtt.loop();
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
bool DomoticzMqttHandler::publishTemperatures(AmsConfiguration* config, HwTools* hw) {
|
|
return false;
|
|
}
|
|
|
|
bool DomoticzMqttHandler::publishPrices(PriceService* ps) {
|
|
return false;
|
|
}
|
|
|
|
bool DomoticzMqttHandler::publishSystem(HwTools* hw, PriceService* ps, EnergyAccounting* ea) {
|
|
return false;
|
|
}
|
|
|
|
uint8_t DomoticzMqttHandler::getFormat() {
|
|
return 3;
|
|
}
|
|
|
|
bool DomoticzMqttHandler::publishRaw(String data) {
|
|
return false;
|
|
}
|
|
|
|
void DomoticzMqttHandler::onMessage(String &topic, String &payload) {
|
|
}
|