Some changes for HA

This commit is contained in:
Gunnar Skjold
2023-12-21 14:12:46 +01:00
parent d49753ed33
commit d7ca741c92
5 changed files with 125 additions and 121 deletions

View File

@@ -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,

View File

@@ -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",

View File

@@ -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"
} }

View File

@@ -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,

View File

@@ -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);
}
} }
} }