diff --git a/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp b/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp index baff3751..ce89446b 100644 --- a/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp +++ b/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp @@ -10,6 +10,7 @@ #include "json/jsonprices_json.h" #include "json/hadiscover_json.h" #include "json/realtime_json.h" +#include "FirmwareVersion.h" #if defined(ESP32) #include @@ -19,6 +20,9 @@ bool HomeAssistantMqttHandler::publish(AmsData* data, AmsData* previousState, En if(topic.isEmpty() || !mqtt.connected()) return false; + if(time(nullptr) < FirmwareVersion::BuildEpoch) + return false; + if(data->getListType() >= 3) { // publish energy counts publishList3(data, ea); loop(); @@ -42,9 +46,7 @@ bool HomeAssistantMqttHandler::publish(AmsData* data, AmsData* previousState, En bool HomeAssistantMqttHandler::publishList1(AmsData* data, EnergyAccounting* ea) { publishList1Sensors(); - snprintf_P(json, BufferSize, HA1_JSON, - data->getActiveImportPower() - ); + snprintf_P(json, BufferSize, HA1_JSON, data->getActiveImportPower()); return mqtt.publish(topic + "/power", json); } @@ -263,47 +265,46 @@ bool HomeAssistantMqttHandler::publishPrices(EntsoeApi* eapi) { breakTime(ts, tm); 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, WiFi.macAddress().c_str(), - values[0], - values[1], - values[2], - values[3], - values[4], - values[5], - values[6], - values[7], - values[8], - values[9], - values[10], - values[11], - values[12], - values[13], - values[14], - values[15], - values[16], - values[17], - values[18], - values[19], - values[20], - values[21], - values[22], - values[23], - values[24], - values[25], - values[26], - values[27], - values[28], - values[29], - values[30], - values[31], - values[32], - values[33], - values[34], - values[35], - values[36], - values[37], + values[0] == ENTSOE_NO_VALUE ? "null" : String(values[0], 4).c_str(), + values[1] == ENTSOE_NO_VALUE ? "null" : String(values[1], 4).c_str(), + values[2] == ENTSOE_NO_VALUE ? "null" : String(values[2], 4).c_str(), + values[3] == ENTSOE_NO_VALUE ? "null" : String(values[3], 4).c_str(), + values[4] == ENTSOE_NO_VALUE ? "null" : String(values[4], 4).c_str(), + values[5] == ENTSOE_NO_VALUE ? "null" : String(values[5], 4).c_str(), + values[6] == ENTSOE_NO_VALUE ? "null" : String(values[6], 4).c_str(), + values[7] == ENTSOE_NO_VALUE ? "null" : String(values[7], 4).c_str(), + values[8] == ENTSOE_NO_VALUE ? "null" : String(values[8], 4).c_str(), + values[9] == ENTSOE_NO_VALUE ? "null" : String(values[9], 4).c_str(), + values[10] == ENTSOE_NO_VALUE ? "null" : String(values[10], 4).c_str(), + values[11] == ENTSOE_NO_VALUE ? "null" : String(values[11], 4).c_str(), + values[12] == ENTSOE_NO_VALUE ? "null" : String(values[12], 4).c_str(), + values[13] == ENTSOE_NO_VALUE ? "null" : String(values[13], 4).c_str(), + values[14] == ENTSOE_NO_VALUE ? "null" : String(values[14], 4).c_str(), + values[15] == ENTSOE_NO_VALUE ? "null" : String(values[15], 4).c_str(), + values[16] == ENTSOE_NO_VALUE ? "null" : String(values[16], 4).c_str(), + values[17] == ENTSOE_NO_VALUE ? "null" : String(values[17], 4).c_str(), + values[18] == ENTSOE_NO_VALUE ? "null" : String(values[18], 4).c_str(), + values[19] == ENTSOE_NO_VALUE ? "null" : String(values[19], 4).c_str(), + values[20] == ENTSOE_NO_VALUE ? "null" : String(values[20], 4).c_str(), + values[21] == ENTSOE_NO_VALUE ? "null" : String(values[21], 4).c_str(), + values[22] == ENTSOE_NO_VALUE ? "null" : String(values[22], 4).c_str(), + values[23] == ENTSOE_NO_VALUE ? "null" : String(values[23], 4).c_str(), + values[24] == ENTSOE_NO_VALUE ? "null" : String(values[24], 4).c_str(), + values[25] == ENTSOE_NO_VALUE ? "null" : String(values[25], 4).c_str(), + values[26] == ENTSOE_NO_VALUE ? "null" : String(values[26], 4).c_str(), + values[27] == ENTSOE_NO_VALUE ? "null" : String(values[27], 4).c_str(), + values[28] == ENTSOE_NO_VALUE ? "null" : String(values[28], 4).c_str(), + values[29] == ENTSOE_NO_VALUE ? "null" : String(values[29], 4).c_str(), + values[30] == ENTSOE_NO_VALUE ? "null" : String(values[30], 4).c_str(), + values[31] == ENTSOE_NO_VALUE ? "null" : String(values[31], 4).c_str(), + values[32] == ENTSOE_NO_VALUE ? "null" : String(values[32], 4).c_str(), + values[33] == ENTSOE_NO_VALUE ? "null" : String(values[33], 4).c_str(), + values[34] == ENTSOE_NO_VALUE ? "null" : String(values[34], 4).c_str(), + values[35] == ENTSOE_NO_VALUE ? "null" : String(values[35], 4).c_str(), + values[36] == ENTSOE_NO_VALUE ? "null" : String(values[36], 4).c_str(), + values[37] == ENTSOE_NO_VALUE ? "null" : String(values[37], 4).c_str(), min == INT16_MAX ? 0.0 : min, max == INT16_MIN ? 0.0 : max, ts1hr, diff --git a/lib/JsonMqttHandler/json/jsonprices.json b/lib/JsonMqttHandler/json/jsonprices.json index 71303ced..988d734a 100644 --- a/lib/JsonMqttHandler/json/jsonprices.json +++ b/lib/JsonMqttHandler/json/jsonprices.json @@ -1,44 +1,44 @@ { "id" : "%s", "prices" : { - "0" : %.4f, - "1" : %.4f, - "2" : %.4f, - "3" : %.4f, - "4" : %.4f, - "5" : %.4f, - "6" : %.4f, - "7" : %.4f, - "8" : %.4f, - "9" : %.4f, - "10" : %.4f, - "11" : %.4f, - "12" : %.4f, - "13" : %.4f, - "14" : %.4f, - "15" : %.4f, - "16" : %.4f, - "17" : %.4f, - "18" : %.4f, - "19" : %.4f, - "20" : %.4f, - "21" : %.4f, - "22" : %.4f, - "23" : %.4f, - "24" : %.4f, - "25" : %.4f, - "26" : %.4f, - "27" : %.4f, - "28" : %.4f, - "29" : %.4f, - "30" : %.4f, - "31" : %.4f, - "32" : %.4f, - "33" : %.4f, - "34" : %.4f, - "35" : %.4f, - "36" : %.4f, - "37" : %.4f, + "0" : %s, + "1" : %s, + "2" : %s, + "3" : %s, + "4" : %s, + "5" : %s, + "6" : %s, + "7" : %s, + "8" : %s, + "9" : %s, + "10" : %s, + "11" : %s, + "12" : %s, + "13" : %s, + "14" : %s, + "15" : %s, + "16" : %s, + "17" : %s, + "18" : %s, + "19" : %s, + "20" : %s, + "21" : %s, + "22" : %s, + "23" : %s, + "24" : %s, + "25" : %s, + "26" : %s, + "27" : %s, + "28" : %s, + "29" : %s, + "30" : %s, + "31" : %s, + "32" : %s, + "33" : %s, + "34" : %s, + "35" : %s, + "36" : %s, + "37" : %s, "min" : %.4f, "max" : %.4f, "cheapest1hr" : "%s", diff --git a/lib/JsonMqttHandler/json/jsonsys.json b/lib/JsonMqttHandler/json/jsonsys.json index 55d0b443..da4d5987 100644 --- a/lib/JsonMqttHandler/json/jsonsys.json +++ b/lib/JsonMqttHandler/json/jsonsys.json @@ -3,7 +3,7 @@ "name" : "%s", "up" : %d, "vcc" : %.3f, - "rssi": %d, - "temp": %.2f, - "version": "%s" + "rssi" : %d, + "temp" : %.2f, + "version" : "%s" } diff --git a/lib/JsonMqttHandler/src/JsonMqttHandler.cpp b/lib/JsonMqttHandler/src/JsonMqttHandler.cpp index fbe38319..76ff717e 100644 --- a/lib/JsonMqttHandler/src/JsonMqttHandler.cpp +++ b/lib/JsonMqttHandler/src/JsonMqttHandler.cpp @@ -288,44 +288,44 @@ bool JsonMqttHandler::publishPrices(EntsoeApi* eapi) { snprintf_P(json, BufferSize, JSONPRICES_JSON, WiFi.macAddress().c_str(), - values[0], - values[1], - values[2], - values[3], - values[4], - values[5], - values[6], - values[7], - values[8], - values[9], - values[10], - values[11], - values[12], - values[13], - values[14], - values[15], - values[16], - values[17], - values[18], - values[19], - values[20], - values[21], - values[22], - values[23], - values[24], - values[25], - values[26], - values[27], - values[28], - values[29], - values[30], - values[31], - values[32], - values[33], - values[34], - values[35], - values[36], - values[37], + values[0] == ENTSOE_NO_VALUE ? "null" : String(values[0], 4).c_str(), + values[1] == ENTSOE_NO_VALUE ? "null" : String(values[1], 4).c_str(), + values[2] == ENTSOE_NO_VALUE ? "null" : String(values[2], 4).c_str(), + values[3] == ENTSOE_NO_VALUE ? "null" : String(values[3], 4).c_str(), + values[4] == ENTSOE_NO_VALUE ? "null" : String(values[4], 4).c_str(), + values[5] == ENTSOE_NO_VALUE ? "null" : String(values[5], 4).c_str(), + values[6] == ENTSOE_NO_VALUE ? "null" : String(values[6], 4).c_str(), + values[7] == ENTSOE_NO_VALUE ? "null" : String(values[7], 4).c_str(), + values[8] == ENTSOE_NO_VALUE ? "null" : String(values[8], 4).c_str(), + values[9] == ENTSOE_NO_VALUE ? "null" : String(values[9], 4).c_str(), + values[10] == ENTSOE_NO_VALUE ? "null" : String(values[10], 4).c_str(), + values[11] == ENTSOE_NO_VALUE ? "null" : String(values[11], 4).c_str(), + values[12] == ENTSOE_NO_VALUE ? "null" : String(values[12], 4).c_str(), + values[13] == ENTSOE_NO_VALUE ? "null" : String(values[13], 4).c_str(), + values[14] == ENTSOE_NO_VALUE ? "null" : String(values[14], 4).c_str(), + values[15] == ENTSOE_NO_VALUE ? "null" : String(values[15], 4).c_str(), + values[16] == ENTSOE_NO_VALUE ? "null" : String(values[16], 4).c_str(), + values[17] == ENTSOE_NO_VALUE ? "null" : String(values[17], 4).c_str(), + values[18] == ENTSOE_NO_VALUE ? "null" : String(values[18], 4).c_str(), + values[19] == ENTSOE_NO_VALUE ? "null" : String(values[19], 4).c_str(), + values[20] == ENTSOE_NO_VALUE ? "null" : String(values[20], 4).c_str(), + values[21] == ENTSOE_NO_VALUE ? "null" : String(values[21], 4).c_str(), + values[22] == ENTSOE_NO_VALUE ? "null" : String(values[22], 4).c_str(), + values[23] == ENTSOE_NO_VALUE ? "null" : String(values[23], 4).c_str(), + values[24] == ENTSOE_NO_VALUE ? "null" : String(values[24], 4).c_str(), + values[25] == ENTSOE_NO_VALUE ? "null" : String(values[25], 4).c_str(), + values[26] == ENTSOE_NO_VALUE ? "null" : String(values[26], 4).c_str(), + values[27] == ENTSOE_NO_VALUE ? "null" : String(values[27], 4).c_str(), + values[28] == ENTSOE_NO_VALUE ? "null" : String(values[28], 4).c_str(), + values[29] == ENTSOE_NO_VALUE ? "null" : String(values[29], 4).c_str(), + values[30] == ENTSOE_NO_VALUE ? "null" : String(values[30], 4).c_str(), + values[31] == ENTSOE_NO_VALUE ? "null" : String(values[31], 4).c_str(), + values[32] == ENTSOE_NO_VALUE ? "null" : String(values[32], 4).c_str(), + values[33] == ENTSOE_NO_VALUE ? "null" : String(values[33], 4).c_str(), + values[34] == ENTSOE_NO_VALUE ? "null" : String(values[34], 4).c_str(), + values[35] == ENTSOE_NO_VALUE ? "null" : String(values[35], 4).c_str(), + values[36] == ENTSOE_NO_VALUE ? "null" : String(values[36], 4).c_str(), + values[37] == ENTSOE_NO_VALUE ? "null" : String(values[37], 4).c_str(), min == INT16_MAX ? 0.0 : min, max == INT16_MIN ? 0.0 : max, ts1hr, diff --git a/src/AmsToMqttBridge.cpp b/src/AmsToMqttBridge.cpp index e0a2e156..6add82b4 100644 --- a/src/AmsToMqttBridge.cpp +++ b/src/AmsToMqttBridge.cpp @@ -1887,6 +1887,9 @@ void MQTT_connect() { if(mqttHandler != NULL) { mqttHandler->connect(); mqttHandler->publishSystem(&hw, eapi, &ea); + if(eapi != NULL && eapi->getValueForHour(0) != ENTSOE_NO_VALUE) { + mqttHandler->publishPrices(eapi); + } } }