mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-04-25 03:45:23 +00:00
Some changes for HA
This commit is contained in:
@@ -10,6 +10,7 @@
|
|||||||
#include "json/jsonprices_json.h"
|
#include "json/jsonprices_json.h"
|
||||||
#include "json/hadiscover_json.h"
|
#include "json/hadiscover_json.h"
|
||||||
#include "json/realtime_json.h"
|
#include "json/realtime_json.h"
|
||||||
|
#include "FirmwareVersion.h"
|
||||||
|
|
||||||
#if defined(ESP32)
|
#if defined(ESP32)
|
||||||
#include <esp_task_wdt.h>
|
#include <esp_task_wdt.h>
|
||||||
@@ -19,6 +20,9 @@ bool HomeAssistantMqttHandler::publish(AmsData* data, AmsData* previousState, En
|
|||||||
if(topic.isEmpty() || !mqtt.connected())
|
if(topic.isEmpty() || !mqtt.connected())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if(time(nullptr) < FirmwareVersion::BuildEpoch)
|
||||||
|
return false;
|
||||||
|
|
||||||
if(data->getListType() >= 3) { // publish energy counts
|
if(data->getListType() >= 3) { // publish energy counts
|
||||||
publishList3(data, ea);
|
publishList3(data, ea);
|
||||||
loop();
|
loop();
|
||||||
@@ -42,9 +46,7 @@ bool HomeAssistantMqttHandler::publish(AmsData* data, AmsData* previousState, En
|
|||||||
|
|
||||||
bool HomeAssistantMqttHandler::publishList1(AmsData* data, EnergyAccounting* ea) {
|
bool HomeAssistantMqttHandler::publishList1(AmsData* data, EnergyAccounting* ea) {
|
||||||
publishList1Sensors();
|
publishList1Sensors();
|
||||||
snprintf_P(json, BufferSize, HA1_JSON,
|
snprintf_P(json, BufferSize, HA1_JSON, data->getActiveImportPower());
|
||||||
data->getActiveImportPower()
|
|
||||||
);
|
|
||||||
return mqtt.publish(topic + "/power", json);
|
return mqtt.publish(topic + "/power", json);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -263,47 +265,46 @@ bool HomeAssistantMqttHandler::publishPrices(EntsoeApi* eapi) {
|
|||||||
breakTime(ts, tm);
|
breakTime(ts, tm);
|
||||||
sprintf_P(ts6hr, PSTR("%04d-%02d-%02dT%02d:00:00Z"), tm.Year+1970, tm.Month, tm.Day, tm.Hour);
|
sprintf_P(ts6hr, PSTR("%04d-%02d-%02dT%02d:00:00Z"), tm.Year+1970, tm.Month, tm.Day, tm.Hour);
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf_P(json, BufferSize, JSONPRICES_JSON,
|
snprintf_P(json, BufferSize, JSONPRICES_JSON,
|
||||||
WiFi.macAddress().c_str(),
|
WiFi.macAddress().c_str(),
|
||||||
values[0],
|
values[0] == ENTSOE_NO_VALUE ? "null" : String(values[0], 4).c_str(),
|
||||||
values[1],
|
values[1] == ENTSOE_NO_VALUE ? "null" : String(values[1], 4).c_str(),
|
||||||
values[2],
|
values[2] == ENTSOE_NO_VALUE ? "null" : String(values[2], 4).c_str(),
|
||||||
values[3],
|
values[3] == ENTSOE_NO_VALUE ? "null" : String(values[3], 4).c_str(),
|
||||||
values[4],
|
values[4] == ENTSOE_NO_VALUE ? "null" : String(values[4], 4).c_str(),
|
||||||
values[5],
|
values[5] == ENTSOE_NO_VALUE ? "null" : String(values[5], 4).c_str(),
|
||||||
values[6],
|
values[6] == ENTSOE_NO_VALUE ? "null" : String(values[6], 4).c_str(),
|
||||||
values[7],
|
values[7] == ENTSOE_NO_VALUE ? "null" : String(values[7], 4).c_str(),
|
||||||
values[8],
|
values[8] == ENTSOE_NO_VALUE ? "null" : String(values[8], 4).c_str(),
|
||||||
values[9],
|
values[9] == ENTSOE_NO_VALUE ? "null" : String(values[9], 4).c_str(),
|
||||||
values[10],
|
values[10] == ENTSOE_NO_VALUE ? "null" : String(values[10], 4).c_str(),
|
||||||
values[11],
|
values[11] == ENTSOE_NO_VALUE ? "null" : String(values[11], 4).c_str(),
|
||||||
values[12],
|
values[12] == ENTSOE_NO_VALUE ? "null" : String(values[12], 4).c_str(),
|
||||||
values[13],
|
values[13] == ENTSOE_NO_VALUE ? "null" : String(values[13], 4).c_str(),
|
||||||
values[14],
|
values[14] == ENTSOE_NO_VALUE ? "null" : String(values[14], 4).c_str(),
|
||||||
values[15],
|
values[15] == ENTSOE_NO_VALUE ? "null" : String(values[15], 4).c_str(),
|
||||||
values[16],
|
values[16] == ENTSOE_NO_VALUE ? "null" : String(values[16], 4).c_str(),
|
||||||
values[17],
|
values[17] == ENTSOE_NO_VALUE ? "null" : String(values[17], 4).c_str(),
|
||||||
values[18],
|
values[18] == ENTSOE_NO_VALUE ? "null" : String(values[18], 4).c_str(),
|
||||||
values[19],
|
values[19] == ENTSOE_NO_VALUE ? "null" : String(values[19], 4).c_str(),
|
||||||
values[20],
|
values[20] == ENTSOE_NO_VALUE ? "null" : String(values[20], 4).c_str(),
|
||||||
values[21],
|
values[21] == ENTSOE_NO_VALUE ? "null" : String(values[21], 4).c_str(),
|
||||||
values[22],
|
values[22] == ENTSOE_NO_VALUE ? "null" : String(values[22], 4).c_str(),
|
||||||
values[23],
|
values[23] == ENTSOE_NO_VALUE ? "null" : String(values[23], 4).c_str(),
|
||||||
values[24],
|
values[24] == ENTSOE_NO_VALUE ? "null" : String(values[24], 4).c_str(),
|
||||||
values[25],
|
values[25] == ENTSOE_NO_VALUE ? "null" : String(values[25], 4).c_str(),
|
||||||
values[26],
|
values[26] == ENTSOE_NO_VALUE ? "null" : String(values[26], 4).c_str(),
|
||||||
values[27],
|
values[27] == ENTSOE_NO_VALUE ? "null" : String(values[27], 4).c_str(),
|
||||||
values[28],
|
values[28] == ENTSOE_NO_VALUE ? "null" : String(values[28], 4).c_str(),
|
||||||
values[29],
|
values[29] == ENTSOE_NO_VALUE ? "null" : String(values[29], 4).c_str(),
|
||||||
values[30],
|
values[30] == ENTSOE_NO_VALUE ? "null" : String(values[30], 4).c_str(),
|
||||||
values[31],
|
values[31] == ENTSOE_NO_VALUE ? "null" : String(values[31], 4).c_str(),
|
||||||
values[32],
|
values[32] == ENTSOE_NO_VALUE ? "null" : String(values[32], 4).c_str(),
|
||||||
values[33],
|
values[33] == ENTSOE_NO_VALUE ? "null" : String(values[33], 4).c_str(),
|
||||||
values[34],
|
values[34] == ENTSOE_NO_VALUE ? "null" : String(values[34], 4).c_str(),
|
||||||
values[35],
|
values[35] == ENTSOE_NO_VALUE ? "null" : String(values[35], 4).c_str(),
|
||||||
values[36],
|
values[36] == ENTSOE_NO_VALUE ? "null" : String(values[36], 4).c_str(),
|
||||||
values[37],
|
values[37] == ENTSOE_NO_VALUE ? "null" : String(values[37], 4).c_str(),
|
||||||
min == INT16_MAX ? 0.0 : min,
|
min == INT16_MAX ? 0.0 : min,
|
||||||
max == INT16_MIN ? 0.0 : max,
|
max == INT16_MIN ? 0.0 : max,
|
||||||
ts1hr,
|
ts1hr,
|
||||||
|
|||||||
@@ -1,44 +1,44 @@
|
|||||||
{
|
{
|
||||||
"id" : "%s",
|
"id" : "%s",
|
||||||
"prices" : {
|
"prices" : {
|
||||||
"0" : %.4f,
|
"0" : %s,
|
||||||
"1" : %.4f,
|
"1" : %s,
|
||||||
"2" : %.4f,
|
"2" : %s,
|
||||||
"3" : %.4f,
|
"3" : %s,
|
||||||
"4" : %.4f,
|
"4" : %s,
|
||||||
"5" : %.4f,
|
"5" : %s,
|
||||||
"6" : %.4f,
|
"6" : %s,
|
||||||
"7" : %.4f,
|
"7" : %s,
|
||||||
"8" : %.4f,
|
"8" : %s,
|
||||||
"9" : %.4f,
|
"9" : %s,
|
||||||
"10" : %.4f,
|
"10" : %s,
|
||||||
"11" : %.4f,
|
"11" : %s,
|
||||||
"12" : %.4f,
|
"12" : %s,
|
||||||
"13" : %.4f,
|
"13" : %s,
|
||||||
"14" : %.4f,
|
"14" : %s,
|
||||||
"15" : %.4f,
|
"15" : %s,
|
||||||
"16" : %.4f,
|
"16" : %s,
|
||||||
"17" : %.4f,
|
"17" : %s,
|
||||||
"18" : %.4f,
|
"18" : %s,
|
||||||
"19" : %.4f,
|
"19" : %s,
|
||||||
"20" : %.4f,
|
"20" : %s,
|
||||||
"21" : %.4f,
|
"21" : %s,
|
||||||
"22" : %.4f,
|
"22" : %s,
|
||||||
"23" : %.4f,
|
"23" : %s,
|
||||||
"24" : %.4f,
|
"24" : %s,
|
||||||
"25" : %.4f,
|
"25" : %s,
|
||||||
"26" : %.4f,
|
"26" : %s,
|
||||||
"27" : %.4f,
|
"27" : %s,
|
||||||
"28" : %.4f,
|
"28" : %s,
|
||||||
"29" : %.4f,
|
"29" : %s,
|
||||||
"30" : %.4f,
|
"30" : %s,
|
||||||
"31" : %.4f,
|
"31" : %s,
|
||||||
"32" : %.4f,
|
"32" : %s,
|
||||||
"33" : %.4f,
|
"33" : %s,
|
||||||
"34" : %.4f,
|
"34" : %s,
|
||||||
"35" : %.4f,
|
"35" : %s,
|
||||||
"36" : %.4f,
|
"36" : %s,
|
||||||
"37" : %.4f,
|
"37" : %s,
|
||||||
"min" : %.4f,
|
"min" : %.4f,
|
||||||
"max" : %.4f,
|
"max" : %.4f,
|
||||||
"cheapest1hr" : "%s",
|
"cheapest1hr" : "%s",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"name" : "%s",
|
"name" : "%s",
|
||||||
"up" : %d,
|
"up" : %d,
|
||||||
"vcc" : %.3f,
|
"vcc" : %.3f,
|
||||||
"rssi": %d,
|
"rssi" : %d,
|
||||||
"temp": %.2f,
|
"temp" : %.2f,
|
||||||
"version": "%s"
|
"version" : "%s"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -288,44 +288,44 @@ bool JsonMqttHandler::publishPrices(EntsoeApi* eapi) {
|
|||||||
|
|
||||||
snprintf_P(json, BufferSize, JSONPRICES_JSON,
|
snprintf_P(json, BufferSize, JSONPRICES_JSON,
|
||||||
WiFi.macAddress().c_str(),
|
WiFi.macAddress().c_str(),
|
||||||
values[0],
|
values[0] == ENTSOE_NO_VALUE ? "null" : String(values[0], 4).c_str(),
|
||||||
values[1],
|
values[1] == ENTSOE_NO_VALUE ? "null" : String(values[1], 4).c_str(),
|
||||||
values[2],
|
values[2] == ENTSOE_NO_VALUE ? "null" : String(values[2], 4).c_str(),
|
||||||
values[3],
|
values[3] == ENTSOE_NO_VALUE ? "null" : String(values[3], 4).c_str(),
|
||||||
values[4],
|
values[4] == ENTSOE_NO_VALUE ? "null" : String(values[4], 4).c_str(),
|
||||||
values[5],
|
values[5] == ENTSOE_NO_VALUE ? "null" : String(values[5], 4).c_str(),
|
||||||
values[6],
|
values[6] == ENTSOE_NO_VALUE ? "null" : String(values[6], 4).c_str(),
|
||||||
values[7],
|
values[7] == ENTSOE_NO_VALUE ? "null" : String(values[7], 4).c_str(),
|
||||||
values[8],
|
values[8] == ENTSOE_NO_VALUE ? "null" : String(values[8], 4).c_str(),
|
||||||
values[9],
|
values[9] == ENTSOE_NO_VALUE ? "null" : String(values[9], 4).c_str(),
|
||||||
values[10],
|
values[10] == ENTSOE_NO_VALUE ? "null" : String(values[10], 4).c_str(),
|
||||||
values[11],
|
values[11] == ENTSOE_NO_VALUE ? "null" : String(values[11], 4).c_str(),
|
||||||
values[12],
|
values[12] == ENTSOE_NO_VALUE ? "null" : String(values[12], 4).c_str(),
|
||||||
values[13],
|
values[13] == ENTSOE_NO_VALUE ? "null" : String(values[13], 4).c_str(),
|
||||||
values[14],
|
values[14] == ENTSOE_NO_VALUE ? "null" : String(values[14], 4).c_str(),
|
||||||
values[15],
|
values[15] == ENTSOE_NO_VALUE ? "null" : String(values[15], 4).c_str(),
|
||||||
values[16],
|
values[16] == ENTSOE_NO_VALUE ? "null" : String(values[16], 4).c_str(),
|
||||||
values[17],
|
values[17] == ENTSOE_NO_VALUE ? "null" : String(values[17], 4).c_str(),
|
||||||
values[18],
|
values[18] == ENTSOE_NO_VALUE ? "null" : String(values[18], 4).c_str(),
|
||||||
values[19],
|
values[19] == ENTSOE_NO_VALUE ? "null" : String(values[19], 4).c_str(),
|
||||||
values[20],
|
values[20] == ENTSOE_NO_VALUE ? "null" : String(values[20], 4).c_str(),
|
||||||
values[21],
|
values[21] == ENTSOE_NO_VALUE ? "null" : String(values[21], 4).c_str(),
|
||||||
values[22],
|
values[22] == ENTSOE_NO_VALUE ? "null" : String(values[22], 4).c_str(),
|
||||||
values[23],
|
values[23] == ENTSOE_NO_VALUE ? "null" : String(values[23], 4).c_str(),
|
||||||
values[24],
|
values[24] == ENTSOE_NO_VALUE ? "null" : String(values[24], 4).c_str(),
|
||||||
values[25],
|
values[25] == ENTSOE_NO_VALUE ? "null" : String(values[25], 4).c_str(),
|
||||||
values[26],
|
values[26] == ENTSOE_NO_VALUE ? "null" : String(values[26], 4).c_str(),
|
||||||
values[27],
|
values[27] == ENTSOE_NO_VALUE ? "null" : String(values[27], 4).c_str(),
|
||||||
values[28],
|
values[28] == ENTSOE_NO_VALUE ? "null" : String(values[28], 4).c_str(),
|
||||||
values[29],
|
values[29] == ENTSOE_NO_VALUE ? "null" : String(values[29], 4).c_str(),
|
||||||
values[30],
|
values[30] == ENTSOE_NO_VALUE ? "null" : String(values[30], 4).c_str(),
|
||||||
values[31],
|
values[31] == ENTSOE_NO_VALUE ? "null" : String(values[31], 4).c_str(),
|
||||||
values[32],
|
values[32] == ENTSOE_NO_VALUE ? "null" : String(values[32], 4).c_str(),
|
||||||
values[33],
|
values[33] == ENTSOE_NO_VALUE ? "null" : String(values[33], 4).c_str(),
|
||||||
values[34],
|
values[34] == ENTSOE_NO_VALUE ? "null" : String(values[34], 4).c_str(),
|
||||||
values[35],
|
values[35] == ENTSOE_NO_VALUE ? "null" : String(values[35], 4).c_str(),
|
||||||
values[36],
|
values[36] == ENTSOE_NO_VALUE ? "null" : String(values[36], 4).c_str(),
|
||||||
values[37],
|
values[37] == ENTSOE_NO_VALUE ? "null" : String(values[37], 4).c_str(),
|
||||||
min == INT16_MAX ? 0.0 : min,
|
min == INT16_MAX ? 0.0 : min,
|
||||||
max == INT16_MIN ? 0.0 : max,
|
max == INT16_MIN ? 0.0 : max,
|
||||||
ts1hr,
|
ts1hr,
|
||||||
|
|||||||
@@ -1887,6 +1887,9 @@ void MQTT_connect() {
|
|||||||
if(mqttHandler != NULL) {
|
if(mqttHandler != NULL) {
|
||||||
mqttHandler->connect();
|
mqttHandler->connect();
|
||||||
mqttHandler->publishSystem(&hw, eapi, &ea);
|
mqttHandler->publishSystem(&hw, eapi, &ea);
|
||||||
|
if(eapi != NULL && eapi->getValueForHour(0) != ENTSOE_NO_VALUE) {
|
||||||
|
mqttHandler->publishPrices(eapi);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user