From 2ae15ac13af8af570569e1e4c7596ed7d7f8b808 Mon Sep 17 00:00:00 2001 From: Gunnar Skjold Date: Fri, 15 Dec 2023 20:19:49 +0100 Subject: [PATCH] Expire time on HA sensors --- .../include/HomeAssistantStatic.h | 97 ++++++++++--------- .../json/hadiscover.json | 1 + .../src/HomeAssistantMqttHandler.cpp | 4 + 3 files changed, 54 insertions(+), 48 deletions(-) diff --git a/lib/HomeAssistantMqttHandler/include/HomeAssistantStatic.h b/lib/HomeAssistantMqttHandler/include/HomeAssistantStatic.h index 8fceefad..8709c546 100644 --- a/lib/HomeAssistantMqttHandler/include/HomeAssistantStatic.h +++ b/lib/HomeAssistantMqttHandler/include/HomeAssistantStatic.h @@ -7,6 +7,7 @@ struct HomeAssistantSensor { const char* name; const char* topic; const char* path; + const uint16_t ttl; const char* uom; const char* devcl; const char* stacl; @@ -15,98 +16,98 @@ struct HomeAssistantSensor { const uint8_t List1SensorCount PROGMEM = 1; const HomeAssistantSensor List1Sensors[List1SensorCount] PROGMEM = { - {"Active import", "/power", "P", "W", "power", "measurement"} + {"Active import", "/power", "P", 30, "W", "power", "measurement"} }; const uint8_t List2SensorCount PROGMEM = 8; const HomeAssistantSensor List2Sensors[List2SensorCount] PROGMEM = { - {"Reactive import", "/power", "Q", "var", "reactive_power", "measurement"}, - {"Reactive export", "/power", "QO", "var", "reactive_power", "measurement"}, - {"L1 current", "/power", "I1", "A", "current", "measurement"}, - {"L2 current", "/power", "I2", "A", "current", "measurement"}, - {"L3 current", "/power", "I3", "A", "current", "measurement"}, - {"L1 voltage", "/power", "U1", "V", "voltage", "measurement"}, - {"L2 voltage", "/power", "U2", "V", "voltage", "measurement"}, - {"L3 voltage", "/power", "U3", "V", "voltage", "measurement"} + {"Reactive import", "/power", "Q", 30, "var", "reactive_power", "measurement"}, + {"Reactive export", "/power", "QO", 30, "var", "reactive_power", "measurement"}, + {"L1 current", "/power", "I1", 30, "A", "current", "measurement"}, + {"L2 current", "/power", "I2", 30, "A", "current", "measurement"}, + {"L3 current", "/power", "I3", 30, "A", "current", "measurement"}, + {"L1 voltage", "/power", "U1", 30, "V", "voltage", "measurement"}, + {"L2 voltage", "/power", "U2", 30, "V", "voltage", "measurement"}, + {"L3 voltage", "/power", "U3", 30, "V", "voltage", "measurement"} }; const uint8_t List2ExportSensorCount PROGMEM = 1; const HomeAssistantSensor List2ExportSensors[List2ExportSensorCount] PROGMEM = { - {"Active export", "/power", "PO", "W", "power", "measurement"} + {"Active export", "/power", "PO", 30, "W", "power", "measurement"} }; const uint8_t List3SensorCount PROGMEM = 3; const HomeAssistantSensor List3Sensors[List3SensorCount] PROGMEM = { - {"Accumulated active import", "/energy", "tPI", "kWh", "energy", "total_increasing"}, - {"Accumulated reactive import","/energy", "tQI", "kvarh","", "total_increasing"}, - {"Accumulated reactive export","/energy", "tQO", "kvarh","", "total_increasing"} + {"Accumulated active import", "/energy", "tPI", 4000, "kWh", "energy", "total_increasing"}, + {"Accumulated reactive import","/energy", "tQI", 4000, "kvarh","", "total_increasing"}, + {"Accumulated reactive export","/energy", "tQO", 4000, "kvarh","", "total_increasing"} }; const uint8_t List3ExportSensorCount PROGMEM = 1; const HomeAssistantSensor List3ExportSensors[List3ExportSensorCount] PROGMEM = { - {"Accumulated active export", "/energy", "tPO", "kWh", "energy", "total_increasing"} + {"Accumulated active export", "/energy", "tPO", 4000, "kWh", "energy", "total_increasing"} }; const uint8_t List4SensorCount PROGMEM = 7; const HomeAssistantSensor List4Sensors[List4SensorCount] PROGMEM = { - {"Power factor", "/power", "PF", "%", "power_factor", "measurement"}, - {"L1 power factor", "/power", "PF1", "%", "power_factor", "measurement"}, - {"L2 power factor", "/power", "PF2", "%", "power_factor", "measurement"}, - {"L3 power factor", "/power", "PF3", "%", "power_factor", "measurement"}, - {"L1 active import", "/power", "P1", "W", "power", "measurement"}, - {"L2 active import", "/power", "P2", "W", "power", "measurement"}, - {"L3 active import", "/power", "P3", "W", "power", "measurement"} + {"Power factor", "/power", "PF", 30, "%", "power_factor", "measurement"}, + {"L1 power factor", "/power", "PF1", 30, "%", "power_factor", "measurement"}, + {"L2 power factor", "/power", "PF2", 30, "%", "power_factor", "measurement"}, + {"L3 power factor", "/power", "PF3", 30, "%", "power_factor", "measurement"}, + {"L1 active import", "/power", "P1", 30, "W", "power", "measurement"}, + {"L2 active import", "/power", "P2", 30, "W", "power", "measurement"}, + {"L3 active import", "/power", "P3", 30, "W", "power", "measurement"} }; const uint8_t List4ExportSensorCount PROGMEM = 3; const HomeAssistantSensor List4ExportSensors[List4ExportSensorCount] PROGMEM = { - {"L1 active export", "/power", "PO1", "W", "power", "measurement"}, - {"L2 active export", "/power", "PO2", "W", "power", "measurement"}, - {"L3 active export", "/power", "PO3", "W", "power", "measurement"} + {"L1 active export", "/power", "PO1", 30, "W", "power", "measurement"}, + {"L2 active export", "/power", "PO2", 30, "W", "power", "measurement"}, + {"L3 active export", "/power", "PO3", 30, "W", "power", "measurement"} }; const uint8_t RealtimeSensorCount PROGMEM = 8; const HomeAssistantSensor RealtimeSensors[RealtimeSensorCount] PROGMEM = { - {"Month max", "/realtime","max", "kWh", "energy", "total_increasing"}, - {"Tariff threshold", "/realtime","threshold", "kWh", "energy", "total_increasing"}, - {"Current hour used", "/realtime","hour.use", "kWh", "energy", "total_increasing"}, - {"Current hour cost", "/realtime","hour.cost", "", "monetary", ""}, - {"Current day used", "/realtime","day.use", "kWh", "energy", "total_increasing"}, - {"Current day cost", "/realtime","day.cost", "", "monetary", ""}, - {"Current month used", "/realtime","month.use", "kWh", "energy", "total_increasing"}, - {"Current month cost", "/realtime","month.cost", "", "monetary", ""} + {"Month max", "/realtime","max", 120, "kWh", "energy", "total_increasing"}, + {"Tariff threshold", "/realtime","threshold", 120, "kWh", "energy", "total_increasing"}, + {"Current hour used", "/realtime","hour.use", 120, "kWh", "energy", "total_increasing"}, + {"Current hour cost", "/realtime","hour.cost", 120, "", "monetary", ""}, + {"Current day used", "/realtime","day.use", 120, "kWh", "energy", "total_increasing"}, + {"Current day cost", "/realtime","day.cost", 120, "", "monetary", ""}, + {"Current month used", "/realtime","month.use", 120, "kWh", "energy", "total_increasing"}, + {"Current month cost", "/realtime","month.cost", 120, "", "monetary", ""} }; const uint8_t RealtimeExportSensorCount PROGMEM = 6; const HomeAssistantSensor RealtimeExportSensors[RealtimeExportSensorCount] PROGMEM = { - {"Current hour produced", "/realtime","hour.produced", "kWh", "energy", "total_increasing"}, - {"Current hour income", "/realtime","hour.income", "", "monetary", ""}, - {"Current day produced", "/realtime","day.produced", "kWh", "energy", "total_increasing"}, - {"Current day income", "/realtime","day.income", "", "monetary", ""}, - {"Current month produced", "/realtime","month.produced", "kWh", "energy", "total_increasing"}, - {"Current month income", "/realtime","month.income", "", "monetary", ""} + {"Current hour produced", "/realtime","hour.produced", 120, "kWh", "energy", "total_increasing"}, + {"Current hour income", "/realtime","hour.income", 120, "", "monetary", ""}, + {"Current day produced", "/realtime","day.produced", 120, "kWh", "energy", "total_increasing"}, + {"Current day income", "/realtime","day.income", 120, "", "monetary", ""}, + {"Current month produced", "/realtime","month.produced", 120, "kWh", "energy", "total_increasing"}, + {"Current month income", "/realtime","month.income", 120, "", "monetary", ""} }; -const HomeAssistantSensor RealtimePeakSensor PROGMEM = {"Current month peak %d", "/realtime", "peaks[%d]", "kWh", "energy", ""}; +const HomeAssistantSensor RealtimePeakSensor PROGMEM = {"Current month peak %d", "/realtime", "peaks[%d]", 4000, "kWh", "energy", ""}; const uint8_t PriceSensorCount PROGMEM = 5; const HomeAssistantSensor PriceSensors[PriceSensorCount] PROGMEM = { - {"Minimum price ahead", "/prices", "prices.min", "", "monetary", ""}, - {"Maximum price ahead", "/prices", "prices.max", "", "monetary", ""}, - {"Cheapest 1hr period ahead", "/prices", "prices.cheapest1hr","", "timestamp", ""}, - {"Cheapest 3hr period ahead", "/prices", "prices.cheapest3hr","", "timestamp", ""}, - {"Cheapest 6hr period ahead", "/prices", "prices.cheapest6hr","", "timestamp", ""} + {"Minimum price ahead", "/prices", "prices.min", 4000, "", "monetary", ""}, + {"Maximum price ahead", "/prices", "prices.max", 4000, "", "monetary", ""}, + {"Cheapest 1hr period ahead", "/prices", "prices.cheapest1hr",4000, "", "timestamp", ""}, + {"Cheapest 3hr period ahead", "/prices", "prices.cheapest3hr",4000, "", "timestamp", ""}, + {"Cheapest 6hr period ahead", "/prices", "prices.cheapest6hr",4000, "", "timestamp", ""} }; -const HomeAssistantSensor PriceSensor PROGMEM = {"Price in %02d %s", "/prices", "prices['%d']", "", "monetary", ""}; +const HomeAssistantSensor PriceSensor PROGMEM = {"Price in %02d %s", "/prices", "prices['%d']", 4000, "", "monetary", ""}; const uint8_t SystemSensorCount PROGMEM = 2; const HomeAssistantSensor SystemSensors[SystemSensorCount] PROGMEM = { - {"Status", "/state", "rssi", "dBm", "signal_strength", "measurement"}, - {"Supply volt", "/state", "vcc", "V", "voltage", "measurement"} + {"Status", "/state", "rssi", 180, "dBm", "signal_strength", "measurement"}, + {"Supply volt", "/state", "vcc", 180, "V", "voltage", "measurement"} }; -const HomeAssistantSensor TemperatureSensor PROGMEM = {"Temperature sensor %s", "/temperatures", "temperatures['%s']", "°C", "temperature", "measurement"}; +const HomeAssistantSensor TemperatureSensor PROGMEM = {"Temperature sensor %s", "/temperatures", "temperatures['%s']", 900, "°C", "temperature", "measurement"}; #endif diff --git a/lib/HomeAssistantMqttHandler/json/hadiscover.json b/lib/HomeAssistantMqttHandler/json/hadiscover.json index 6665e690..d8df3265 100644 --- a/lib/HomeAssistantMqttHandler/json/hadiscover.json +++ b/lib/HomeAssistantMqttHandler/json/hadiscover.json @@ -5,6 +5,7 @@ "obj_id" : "%s_%s", "unit_of_meas" : "%s", "val_tpl" : "{{ value_json.%s | is_defined }}", + "expire_after" : %d, "dev" : { "ids" : [ "%s" ], "name" : "%s", diff --git a/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp b/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp index 4e8b409c..17abcc7f 100644 --- a/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp +++ b/lib/HomeAssistantMqttHandler/src/HomeAssistantMqttHandler.cpp @@ -350,6 +350,7 @@ void HomeAssistantMqttHandler::publishSensor(const HomeAssistantSensor& sensor) deviceUid.c_str(), uid.c_str(), sensor.uom, sensor.path, + sensor.ttl, deviceUid.c_str(), deviceName.c_str(), deviceModel.c_str(), @@ -449,6 +450,7 @@ void HomeAssistantMqttHandler::publishRealtimeSensors(EnergyAccounting* ea, Ents name, RealtimePeakSensor.topic, path, + RealtimePeakSensor.ttl, RealtimePeakSensor.uom, RealtimePeakSensor.devcl, RealtimePeakSensor.stacl @@ -487,6 +489,7 @@ void HomeAssistantMqttHandler::publishTemperatureSensor(uint8_t index, String id name, index == 0 ? SystemSensors[0].topic : TemperatureSensor.topic, path, + TemperatureSensor.ttl, TemperatureSensor.uom, TemperatureSensor.devcl, TemperatureSensor.stacl @@ -522,6 +525,7 @@ void HomeAssistantMqttHandler::publishPriceSensors(EntsoeApi* eapi) { i == 0 ? "Price current hour" : name, PriceSensor.topic, path, + PriceSensor.ttl, uom.c_str(), PriceSensor.devcl, i == 0 ? "total" : PriceSensor.stacl