From e14a78e9c002def7780d07dfb409899fe799fffc Mon Sep 17 00:00:00 2001 From: Alessandro Staniscia Date: Fri, 15 Oct 2021 01:46:13 +0200 Subject: [PATCH] Support Home Assistant Long-term Statistics #1087 (#1088) --- main/ZgatewayBT.ino | 194 ++++++++++++++++++------------------ main/ZgatewayRF.ino | 3 +- main/ZgatewayRF2.ino | 3 +- main/ZmqttDiscovery.ino | 188 +++++++++++++++++++++++++--------- main/ZsensorDS1820.ino | 4 +- main/config_mqttDiscovery.h | 75 +++++++------- main/zzHTTPUpdate.cpp | 1 - 7 files changed, 286 insertions(+), 182 deletions(-) diff --git a/main/ZgatewayBT.ino b/main/ZgatewayBT.ino index 480e0931..eef6f88d 100644 --- a/main/ZgatewayBT.ino +++ b/main/ZgatewayBT.ino @@ -291,12 +291,12 @@ void strupp(char* beg) { void MiFloraDiscovery(const char* mac, const char* sensorModel) { # define MiFloraparametersCount 5 Log.trace(F("MiFloraDiscovery" CR)); - const char* MiFlorasensor[MiFloraparametersCount][8] = { - {"sensor", "MiFlora-batt", mac, "battery", jsonBatt, "", "", "%"}, - {"sensor", "MiFlora-lux", mac, "illuminance", jsonLux, "", "", "lx"}, - {"sensor", "MiFlora-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "MiFlora-fer", mac, "", jsonFer, "", "", "µS/cm"}, - {"sensor", "MiFlora-moi", mac, "", jsonMoi, "", "", "%"} + const char* MiFlorasensor[MiFloraparametersCount][9] = { + {"sensor", "MiFlora-batt", mac, "battery", jsonBatt, "", "", "%", stateClassMeasurement}, + {"sensor", "MiFlora-lux", mac, "illuminance", jsonLux, "", "", "lx", stateClassMeasurement}, + {"sensor", "MiFlora-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "MiFlora-fer", mac, "", jsonFer, "", "", "µS/cm", stateClassMeasurement}, + {"sensor", "MiFlora-moi", mac, "", jsonMoi, "", "", "%", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -306,11 +306,11 @@ void MiFloraDiscovery(const char* mac, const char* sensorModel) { void VegTrugDiscovery(const char* mac, const char* sensorModel) { # define VegTrugparametersCount 4 Log.trace(F("VegTrugDiscovery" CR)); - const char* VegTrugsensor[VegTrugparametersCount][8] = { - {"sensor", "VegTrug-lux", mac, "illuminance", jsonLux, "", "", "lx"}, - {"sensor", "VegTrug-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "VegTrug-fer", mac, "", jsonFer, "", "", "µS/cm"}, - {"sensor", "VegTrug-moi", mac, "", jsonMoi, "", "", "%"} + const char* VegTrugsensor[VegTrugparametersCount][9] = { + {"sensor", "VegTrug-lux", mac, "illuminance", jsonLux, "", "", "lx", stateClassMeasurement}, + {"sensor", "VegTrug-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "VegTrug-fer", mac, "", jsonFer, "", "", "µS/cm", stateClassMeasurement}, + {"sensor", "VegTrug-moi", mac, "", jsonMoi, "", "", "%", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -320,10 +320,10 @@ void VegTrugDiscovery(const char* mac, const char* sensorModel) { void MiJiaDiscovery(const char* mac, const char* sensorModel) { # define MiJiaparametersCount 3 Log.trace(F("MiJiaDiscovery" CR)); - const char* MiJiasensor[MiJiaparametersCount][8] = { - {"sensor", "MiJia-batt", mac, "battery", jsonBatt, "", "", "%"}, - {"sensor", "MiJia-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "MiJia-hum", mac, "humidity", jsonHum, "", "", "%"} + const char* MiJiasensor[MiJiaparametersCount][9] = { + {"sensor", "MiJia-batt", mac, "battery", jsonBatt, "", "", "%", stateClassMeasurement}, + {"sensor", "MiJia-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "MiJia-hum", mac, "humidity", jsonHum, "", "", "%", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -333,11 +333,11 @@ void MiJiaDiscovery(const char* mac, const char* sensorModel) { void FormalDiscovery(const char* mac, const char* sensorModel) { # define FormalparametersCount 4 Log.trace(F("FormalDiscovery" CR)); - const char* Formalsensor[FormalparametersCount][8] = { - {"sensor", "Formal-batt", mac, "battery", jsonBatt, "", "", "%"}, - {"sensor", "Formal-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "Formal-hum", mac, "humidity", jsonHum, "", "", "%"}, - {"sensor", "Formal-for", mac, "", jsonFor, "", "", "%"} + const char* Formalsensor[FormalparametersCount][9] = { + {"sensor", "Formal-batt", mac, "battery", jsonBatt, "", "", "%", stateClassMeasurement}, + {"sensor", "Formal-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "Formal-hum", mac, "humidity", jsonHum, "", "", "%", stateClassMeasurement}, + {"sensor", "Formal-for", mac, "", jsonFor, "", "", "%", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -347,10 +347,10 @@ void FormalDiscovery(const char* mac, const char* sensorModel) { void LYWSD02Discovery(const char* mac, const char* sensorModel) { # define LYWSD02parametersCount 3 Log.trace(F("LYWSD02Discovery" CR)); - const char* LYWSD02sensor[LYWSD02parametersCount][8] = { - {"sensor", "LYWSD02-batt", mac, "battery", jsonBatt, "", "", "V"}, - {"sensor", "LYWSD02-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "LYWSD02-hum", mac, "humidity", jsonHum, "", "", "%"} + const char* LYWSD02sensor[LYWSD02parametersCount][9] = { + {"sensor", "LYWSD02-batt", mac, "battery", jsonBatt, "", "", "V", stateClassMeasurement}, + {"sensor", "LYWSD02-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "LYWSD02-hum", mac, "humidity", jsonHum, "", "", "%", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -360,10 +360,10 @@ void LYWSD02Discovery(const char* mac, const char* sensorModel) { void CLEARGRASSTRHDiscovery(const char* mac, const char* sensorModel) { # define CLEARGRASSTRHparametersCount 3 Log.trace(F("CLEARGRASSTRHDiscovery" CR)); - const char* CLEARGRASSTRHsensor[CLEARGRASSTRHparametersCount][8] = { - {"sensor", "CLEARGRASSTRH-batt", mac, "battery", jsonBatt, "", "", "V"}, - {"sensor", "CLEARGRASSTRH-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "CLEARGRASSTRH-hum", mac, "humidity", jsonHum, "", "", "%"} + const char* CLEARGRASSTRHsensor[CLEARGRASSTRHparametersCount][9] = { + {"sensor", "CLEARGRASSTRH-batt", mac, "battery", jsonBatt, "", "", "V", stateClassMeasurement}, + {"sensor", "CLEARGRASSTRH-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "CLEARGRASSTRH-hum", mac, "humidity", jsonHum, "", "", "%", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -373,9 +373,9 @@ void CLEARGRASSTRHDiscovery(const char* mac, const char* sensorModel) { void CLEARGRASSCGD1Discovery(const char* mac, const char* sensorModel) { # define CLEARGRASSCGD1parametersCount 2 Log.trace(F("CLEARGRASSCGD1Discovery" CR)); - const char* CLEARGRASSCGD1sensor[CLEARGRASSCGD1parametersCount][8] = { - {"sensor", "CLEARGRASSCGD1-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "CLEARGRASSCGD1-hum", mac, "humidity", jsonHum, "", "", "%"} + const char* CLEARGRASSCGD1sensor[CLEARGRASSCGD1parametersCount][9] = { + {"sensor", "CLEARGRASSCGD1-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "CLEARGRASSCGD1-hum", mac, "humidity", jsonHum, "", "", "%", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -385,9 +385,9 @@ void CLEARGRASSCGD1Discovery(const char* mac, const char* sensorModel) { void CLEARGRASSCGDK2Discovery(const char* mac, const char* sensorModel) { # define CLEARGRASSCGDK2parametersCount 2 Log.trace(F("CLEARGRASSCGDK2Discovery" CR)); - const char* CLEARGRASSCGDK2sensor[CLEARGRASSCGDK2parametersCount][8] = { - {"sensor", "CLEARGRASSCGDK2-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "CLEARGRASSCGDK2-hum", mac, "humidity", jsonHum, "", "", "%"} + const char* CLEARGRASSCGDK2sensor[CLEARGRASSCGDK2parametersCount][9] = { + {"sensor", "CLEARGRASSCGDK2-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "CLEARGRASSCGDK2-hum", mac, "humidity", jsonHum, "", "", "%", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -397,9 +397,9 @@ void CLEARGRASSCGDK2Discovery(const char* mac, const char* sensorModel) { void CLEARGRASSCGPR1Discovery(const char* mac, const char* sensorModel) { # define CLEARGRASSCGPR1parametersCount 2 Log.trace(F("CLEARGRASSCGPR1Discovery" CR)); - const char* CLEARGRASSCGPR1sensor[CLEARGRASSCGPR1parametersCount][8] = { - {"sensor", "CLEARGRASSCGPR1-pres", mac, "", jsonPres, "", "", ""}, - {"sensor", "CLEARGRASSCGPR1-lux", mac, "illuminance", jsonLux, "", "", "lx"} + const char* CLEARGRASSCGPR1sensor[CLEARGRASSCGPR1parametersCount][9] = { + {"sensor", "CLEARGRASSCGPR1-pres", mac, "", jsonPres, "", "", "", stateClassMeasurement}, + {"sensor", "CLEARGRASSCGPR1-lux", mac, "illuminance", jsonLux, "", "", "lx", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -409,8 +409,8 @@ void CLEARGRASSCGPR1Discovery(const char* mac, const char* sensorModel) { void CLEARGRASSCGH1Discovery(const char* mac, const char* sensorModel) { # define CLEARGRASSCGH1parametersCount 1 Log.trace(F("CLEARGRASSCGH1Discovery" CR)); - const char* CLEARGRASSCGH1sensor[CLEARGRASSCGH1parametersCount][8] = { - {"binary_sensor", "CLEARGRASSCGH1-open", mac, "door", jsonOpen, "True", "False", ""}, + const char* CLEARGRASSCGH1sensor[CLEARGRASSCGH1parametersCount][9] = { + {"binary_sensor", "CLEARGRASSCGH1-open", mac, "door", jsonOpen, "True", "False", "", stateClassNone}, //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -420,10 +420,10 @@ void CLEARGRASSCGH1Discovery(const char* mac, const char* sensorModel) { void CLEARGRASSTRHKPADiscovery(const char* mac, const char* sensorModel) { # define CLEARGRASSTRHKPAparametersCount 3 Log.trace(F("CLEARGRASSTRHKPADiscovery" CR)); - const char* CLEARGRASSTRHKPAsensor[CLEARGRASSTRHKPAparametersCount][8] = { - {"sensor", "CLEARGRASSTRHKPA-pres", mac, "pressure", jsonPres, "", "", "kPa"}, - {"sensor", "CLEARGRASSTRHKPA-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "CLEARGRASSTRHKPA-hum", mac, "humidity", jsonHum, "", "", "%"} + const char* CLEARGRASSTRHKPAsensor[CLEARGRASSTRHKPAparametersCount][9] = { + {"sensor", "CLEARGRASSTRHKPA-pres", mac, "pressure", jsonPres, "", "", "kPa", stateClassMeasurement}, + {"sensor", "CLEARGRASSTRHKPA-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "CLEARGRASSTRHKPA-hum", mac, "humidity", jsonHum, "", "", "%", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -434,8 +434,8 @@ void CLEARGRASSTRHKPADiscovery(const char* mac, const char* sensorModel) { void MiScaleDiscovery(const char* mac, const char* sensorModel) { # define MiScaleparametersCount 1 Log.trace(F("MiScaleDiscovery" CR)); - const char* MiScalesensor[MiScaleparametersCount][8] = { - {"sensor", "MiScale-weight", mac, "", jsonWeight, "", "", "kg"}, + const char* MiScalesensor[MiScaleparametersCount][9] = { + {"sensor", "MiScale-weight", mac, "", jsonWeight, "", "", "kg", stateClassMeasurement}, //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -445,8 +445,8 @@ void MiScaleDiscovery(const char* mac, const char* sensorModel) { void MiLampDiscovery(const char* mac, const char* sensorModel) { # define MiLampparametersCount 1 Log.trace(F("MiLampDiscovery" CR)); - const char* MiLampsensor[MiLampparametersCount][8] = { - {"sensor", "MiLamp-presence", mac, "", jsonPresence, "", "", "d"}, + const char* MiLampsensor[MiLampparametersCount][9] = { + {"sensor", "MiLamp-presence", mac, "", jsonPresence, "", "", "d", stateClassNone}, //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -456,8 +456,8 @@ void MiLampDiscovery(const char* mac, const char* sensorModel) { void MiBandDiscovery(const char* mac, const char* sensorModel) { # define MiBandparametersCount 1 Log.trace(F("MiBandDiscovery" CR)); - const char* MiBandsensor[MiBandparametersCount][8] = { - {"sensor", "MiBand-steps", mac, "", jsonStep, "", "", "nb"}, + const char* MiBandsensor[MiBandparametersCount][9] = { + {"sensor", "MiBand-steps", mac, "", jsonStep, "", "", "nb", stateClassNone}, //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -467,10 +467,10 @@ void MiBandDiscovery(const char* mac, const char* sensorModel) { void InkBirdTH1Discovery(const char* mac, const char* sensorModel) { # define InkBirdTH1parametersCount 3 Log.trace(F("InkBirdTH1Discovery" CR)); - const char* InkBirdTH1sensor[InkBirdTH1parametersCount][8] = { - {"sensor", "InkBirdTH1-batt", mac, "battery", jsonBatt, "", "", "%"}, - {"sensor", "InkBirdTH1-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "InkBirdTH1-hum", mac, "humidity", jsonHum, "", "", "%"} + const char* InkBirdTH1sensor[InkBirdTH1parametersCount][9] = { + {"sensor", "InkBirdTH1-batt", mac, "battery", jsonBatt, "", "", "%", stateClassMeasurement}, + {"sensor", "InkBirdTH1-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "InkBirdTH1-hum", mac, "humidity", jsonHum, "", "", "%", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -480,9 +480,9 @@ void InkBirdTH1Discovery(const char* mac, const char* sensorModel) { void InkBirdTH2Discovery(const char* mac, const char* sensorModel) { # define InkBirdTH2parametersCount 2 Log.trace(F("InkBirdTH2Discovery" CR)); - const char* InkBirdTH2sensor[InkBirdTH2parametersCount][8] = { - {"sensor", "InkBirdTH2-batt", mac, "battery", jsonBatt, "", "", "%"}, - {"sensor", "InkBirdTH2-temp", mac, "temperature", jsonTempc, "", "", "°C"}, + const char* InkBirdTH2sensor[InkBirdTH2parametersCount][9] = { + {"sensor", "InkBirdTH2-batt", mac, "battery", jsonBatt, "", "", "%", stateClassMeasurement}, + {"sensor", "InkBirdTH2-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -492,11 +492,11 @@ void InkBirdTH2Discovery(const char* mac, const char* sensorModel) { void InkBird4XSDiscovery(const char* mac, const char* sensorModel) { # define InkBird4XSparametersCount 4 Log.trace(F("InkBird4XSDiscovery" CR)); - const char* InkBird4XSsensor[InkBird4XSparametersCount][8] = { - {"sensor", "InkBird4XS-temp1", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "InkBird4XS-temp2", mac, "temperature", jsonTempc2, "", "", "°C"}, - {"sensor", "InkBird4XS-temp3", mac, "temperature", jsonTempc3, "", "", "°C"}, - {"sensor", "InkBird4XS-temp4", mac, "temperature", jsonTempc4, "", "", "°C"}, + const char* InkBird4XSsensor[InkBird4XSparametersCount][9] = { + {"sensor", "InkBird4XS-temp1", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "InkBird4XS-temp2", mac, "temperature", jsonTempc2, "", "", "°C", stateClassMeasurement}, + {"sensor", "InkBird4XS-temp3", mac, "temperature", jsonTempc3, "", "", "°C", stateClassMeasurement}, + {"sensor", "InkBird4XS-temp4", mac, "temperature", jsonTempc4, "", "", "°C", stateClassMeasurement}, //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -506,11 +506,11 @@ void InkBird4XSDiscovery(const char* mac, const char* sensorModel) { void LYWSD03MMCDiscovery(const char* mac, const char* sensorModel) { # define LYWSD03MMCparametersCount 4 Log.trace(F("LYWSD03MMCDiscovery" CR)); - const char* LYWSD03MMCsensor[LYWSD03MMCparametersCount][8] = { - {"sensor", "LYWSD03MMC-batt", mac, "battery", jsonBatt, "", "", "%"}, - {"sensor", "LYWSD03MMC-volt", mac, "", jsonVolt, "", "", "V"}, - {"sensor", "LYWSD03MMC-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "LYWSD03MMC-hum", mac, "humidity", jsonHum, "", "", "%"} + const char* LYWSD03MMCsensor[LYWSD03MMCparametersCount][9] = { + {"sensor", "LYWSD03MMC-batt", mac, "battery", jsonBatt, "", "", "%", stateClassMeasurement}, + {"sensor", "LYWSD03MMC-volt", mac, "", jsonVolt, "", "", "V", stateClassMeasurement}, + {"sensor", "LYWSD03MMC-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "LYWSD03MMC-hum", mac, "humidity", jsonHum, "", "", "%", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -520,11 +520,11 @@ void LYWSD03MMCDiscovery(const char* mac, const char* sensorModel) { void MHO_C401Discovery(const char* mac, const char* sensorModel) { # define MHO_C401parametersCount 4 Log.trace(F("MHO_C401Discovery" CR)); - const char* MHO_C401sensor[MHO_C401parametersCount][8] = { - {"sensor", "MHO_C401-batt", mac, "battery", jsonBatt, "", "", "%"}, - {"sensor", "MHO_C401-volt", mac, "", jsonVolt, "", "", "V"}, - {"sensor", "MHO_C401-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "MHO_C401-hum", mac, "humidity", jsonHum, "", "", "%"} + const char* MHO_C401sensor[MHO_C401parametersCount][9] = { + {"sensor", "MHO_C401-batt", mac, "battery", jsonBatt, "", "", "%", stateClassMeasurement}, + {"sensor", "MHO_C401-volt", mac, "", jsonVolt, "", "", "V", stateClassMeasurement}, + {"sensor", "MHO_C401-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "MHO_C401-hum", mac, "humidity", jsonHum, "", "", "%", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -534,10 +534,10 @@ void MHO_C401Discovery(const char* mac, const char* sensorModel) { void INodeEMDiscovery(const char* mac, const char* sensorModel) { # define INodeEMparametersCount 3 Log.trace(F("INodeEMDiscovery" CR)); - const char* INodeEMsensor[INodeEMparametersCount][8] = { - {"sensor", "iNodeEM-power", mac, "power", jsonPower, "", "", "W"}, - {"sensor", "iNodeEM-energy", mac, "", jsonEnergy, "", "", "kWh"}, - {"sensor", "iNodeEM-batt", mac, "battery", jsonBatt, "", "", "%"} + const char* INodeEMsensor[INodeEMparametersCount][9] = { + {"sensor", "iNodeEM-power", mac, "power", jsonPower, "", "", "W", stateClassMeasurement}, + {"sensor", "iNodeEM-energy", mac, "", jsonEnergy, "", "", "kWh", stateClassMeasurement}, + {"sensor", "iNodeEM-batt", mac, "battery", jsonBatt, "", "", "%", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -547,10 +547,10 @@ void INodeEMDiscovery(const char* mac, const char* sensorModel) { void WS02Discovery(const char* mac, const char* sensorModel) { # define WS02parametersCount 3 Log.trace(F("WS02Discovery" CR)); - const char* WS02sensor[WS02parametersCount][8] = { - {"sensor", "WS02-volt", mac, "", jsonVolt, "", "", "V"}, - {"sensor", "WS02-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "WS02-hum", mac, "humidity", jsonHum, "", "", "%"} + const char* WS02sensor[WS02parametersCount][9] = { + {"sensor", "WS02-volt", mac, "", jsonVolt, "", "", "V", stateClassMeasurement}, + {"sensor", "WS02-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "WS02-hum", mac, "humidity", jsonHum, "", "", "%", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -560,13 +560,13 @@ void WS02Discovery(const char* mac, const char* sensorModel) { void DT24Discovery(const char* mac, const char* sensorModel) { # define DT24parametersCount 6 Log.trace(F("DT24Discovery" CR)); - const char* DT24sensor[DT24parametersCount][8] = { - {"sensor", "DT24-volt", mac, "power", jsonVolt, "", "", "V"}, - {"sensor", "DT24-amp", mac, "power", jsonCurrent, "", "", "A"}, - {"sensor", "DT24-watt", mac, "power", jsonPower, "", "", "W"}, - {"sensor", "DT24-watt-hour", mac, "power", jsonEnergy, "", "", "kWh"}, - {"sensor", "DT24-price", mac, "", jsonMsg, "", "", ""}, - {"sensor", "DT24-temp", mac, "temperature", jsonTempc, "", "", "°C"} + const char* DT24sensor[DT24parametersCount][9] = { + {"sensor", "DT24-volt", mac, "power", jsonVolt, "", "", "V", stateClassMeasurement}, + {"sensor", "DT24-amp", mac, "power", jsonCurrent, "", "", "A", stateClassMeasurement}, + {"sensor", "DT24-watt", mac, "power", jsonPower, "", "", "W", stateClassMeasurement}, + {"sensor", "DT24-watt-hour", mac, "power", jsonEnergy, "", "", "kWh", stateClassMeasurement}, + {"sensor", "DT24-price", mac, "", jsonMsg, "", "", "", stateClassNone}, + {"sensor", "DT24-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -576,11 +576,11 @@ void DT24Discovery(const char* mac, const char* sensorModel) { void EddystoneTLMDiscovery(const char* mac, const char* sensorModel) { # define EddystoneTLMparametersCount 4 Log.trace(F("EddystoneTLMDiscovery" CR)); - const char* EddystoneTLMsensor[EddystoneTLMparametersCount][8] = { - {"sensor", "EddystoneTLM-volt", mac, "", jsonVolt, "", "", "V"}, - {"sensor", "EddystoneTLM-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "EddystoneTLM-count", mac, "", jsonCount, "", "", ""}, - {"sensor", "EddystoneTLM-time", mac, "", jsonTime, "", "", ""} + const char* EddystoneTLMsensor[EddystoneTLMparametersCount][9] = { + {"sensor", "EddystoneTLM-volt", mac, "", jsonVolt, "", "", "V", stateClassMeasurement}, + {"sensor", "EddystoneTLM-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "EddystoneTLM-count", mac, "", jsonCount, "", "", "", stateClassTotal}, + {"sensor", "EddystoneTLM-time", mac, "", jsonTime, "", "", "", stateClassNone} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -590,12 +590,12 @@ void EddystoneTLMDiscovery(const char* mac, const char* sensorModel) { void TPMSDiscovery(const char* mac, const char* sensorModel) { # define TPMSparametersCount 5 Log.trace(F("TPMSDiscovery" CR)); - const char* TPMSsensor[TPMSparametersCount][8] = { - {"sensor", "TPMS-batt", mac, "battery", jsonBatt, "", "", "%"}, - {"sensor", "TPMS-temp", mac, "temperature", jsonTempc, "", "", "°C"}, - {"sensor", "TPMS-pres", mac, "pressure", jsonPres, "", "", "kPa"}, - {"sensor", "TPMS-count", mac, "", jsonCount, "", "", ""}, - {"sensor", "TPMS-alarm", mac, "", jsonAlarm, "", "", ""} + const char* TPMSsensor[TPMSparametersCount][9] = { + {"sensor", "TPMS-batt", mac, "battery", jsonBatt, "", "", "%", stateClassMeasurement}, + {"sensor", "TPMS-temp", mac, "temperature", jsonTempc, "", "", "°C", stateClassMeasurement}, + {"sensor", "TPMS-pres", mac, "pressure", jsonPres, "", "", "kPa", stateClassMeasurement}, + {"sensor", "TPMS-count", mac, "", jsonCount, "", "", "", stateClassTotal}, + {"sensor", "TPMS-alarm", mac, "", jsonAlarm, "", "", "", stateClassNone} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; diff --git a/main/ZgatewayRF.ino b/main/ZgatewayRF.ino index 76fec185..2d2bedb5 100644 --- a/main/ZgatewayRF.ino +++ b/main/ZgatewayRF.ino @@ -51,7 +51,8 @@ void RFtoMQTTdiscovery(SIGNAL_SIZE_UL_ULL MQTTvalue) { //on the fly switch creat will_Topic, switchRF[3], switchRF[4], switchRF[5], switchRF[6], switchRF[7], 0, "", "", true, subjectMQTTtoRF, - "", "", "", "", false); + "", "", "", "", false, + stateClassNone); } # endif diff --git a/main/ZgatewayRF2.ino b/main/ZgatewayRF2.ino index d9fa3296..07d7f37c 100644 --- a/main/ZgatewayRF2.ino +++ b/main/ZgatewayRF2.ino @@ -111,7 +111,8 @@ void RF2toMQTTdiscovery(JsonObject& data) { (char*)getUniqueId(switchRF[1], "").c_str(), will_Topic, switchRF[3], switchRF[4], switchRF[5], switchRF[6], switchRF[7], 0, "", "", true, subjectMQTTtoRF2, - "", "", "", "", false); + "", "", "", "", false, + stateClassNone); } # endif diff --git a/main/ZmqttDiscovery.ino b/main/ZmqttDiscovery.ino index c26eab9b..1b3dc971 100644 --- a/main/ZmqttDiscovery.ino +++ b/main/ZmqttDiscovery.ino @@ -48,29 +48,81 @@ String getUniqueId(String name, String sufix) { } # ifdef ZgatewayBT -void createDiscoveryFromList(const char* mac, const char* sensorList[][8], int sensorCount, - const char* device_name, const char* device_manufacturer, const char* device_model) { +/** + * Create a discover messages form a list of attribute + * + * @param mac the mac adres + * @param sensorList[][0] = component type + * @param sensorList[][1] = name + * @param sensorList[][2] = availability topic + * @param sensorList[][3] = device class + * @param sensorList[][4] = value template + * @param sensorList[][5] = payload on + * @param sensorList[][6] = payload off + * @param sensorList[][7] = unit of measurement + * @param sensorList[][8] = unit of measurement + * @param sensorCount number of sensor + * @param device_name name of sensors + * @param device_manufacturer name of manufacturer + * @param device_model the model + * */ +void createDiscoveryFromList(const char* mac, + const char* sensorList[][9], + int sensorCount, + const char* device_name, + const char* device_manufacturer, + const char* device_model) { for (int i = 0; i < sensorCount; i++) { Log.trace(F("CreateDiscoverySensor %s" CR), sensorList[i][1]); String discovery_topic = String(subjectBTtoMQTT) + "/" + String(mac); String unique_id = String(mac) + "-" + sensorList[i][1]; + createDiscovery(sensorList[i][0], discovery_topic.c_str(), sensorList[i][1], unique_id.c_str(), will_Topic, sensorList[i][3], sensorList[i][4], sensorList[i][5], sensorList[i][6], sensorList[i][7], 0, "", "", false, "", - device_name, device_manufacturer, device_model, mac, false); + device_name, device_manufacturer, device_model, mac, false, + sensorList[i][8] //The state class + ); } } # endif +/** + * Generate message and publish it on an mqtt discovery exploiter @see https://www.home-assistant.io/docs/mqtt/discovery/ + * + * @param sensor_type the Type + * @param st_topic set state topic, + * @param s_name set name, + * @param unique_id set niqueId + * @param availability_topic set availability_topic, + * @param device_class set device_class, + * @param value_template set value_template, + * @param payload_on set payload_on, + * @param payload_off set payload_off, + * @param unit_of_meas set unit_of_meas, + * @param off_delay set off_delay + * @param payload_available set payload_avalaible, + * @param payload_not_avalaible set payload_not_avalaible + * @param gateway_entity set is a gateway entity, + * @param cmd_topic set command topic + * @param device_name set device name, + * @param device_manufacturer set device manufacturer, + * @param device_model set device model, + * @param device_mac set device mac, + * @param retainCmd set retain + * @param state_class set state class + * + * */ void createDiscovery(const char* sensor_type, const char* st_topic, const char* s_name, const char* unique_id, const char* availability_topic, const char* device_class, const char* value_template, const char* payload_on, const char* payload_off, const char* unit_of_meas, int off_delay, const char* payload_available, const char* payload_not_avalaible, bool gateway_entity, const char* cmd_topic, - const char* device_name, const char* device_manufacturer, const char* device_model, const char* device_mac, bool retainCmd) { + const char* device_name, const char* device_manufacturer, const char* device_model, const char* device_mac, bool retainCmd, + const char* state_class) { const int JSON_MSG_CALC_BUFFER = JSON_OBJECT_SIZE(14) + JSON_OBJECT_SIZE(5) + JSON_ARRAY_SIZE(1); StaticJsonDocument jsonBuffer; JsonObject sensor = jsonBuffer.to(); @@ -115,6 +167,8 @@ void createDiscovery(const char* sensor_type, sensor["pl_avail"] = payload_available; // payload_on if (payload_not_avalaible[0]) sensor["pl_not_avail"] = payload_not_avalaible; //payload_off + if (state_class[0]) + sensor["state_class"] = state_class; //add the state class on the sensors ( https://developers.home-assistant.io/docs/core/entity/sensor/#available-state-classes ) if (cmd_topic[0]) { char command_topic[mqtt_topic_max_size]; @@ -175,7 +229,8 @@ void pubMqttDiscovery() { Gateway_AnnouncementMsg, will_Message, "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay Gateway_AnnouncementMsg, will_Message, true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); createDiscovery("sensor", //set Type subjectSYStoMQTT, "SYS: Uptime", (char*)getUniqueId("uptime", "").c_str(), //set state_topic,name,uniqueId @@ -183,7 +238,8 @@ void pubMqttDiscovery() { "", "", "s", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # if defined(ESP8266) || defined(ESP32) @@ -193,7 +249,8 @@ void pubMqttDiscovery() { "", "", "B", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); createDiscovery("sensor", //set Type subjectSYStoMQTT, "SYS: IP", (char*)getUniqueId("ip", "").c_str(), //set state_topic,name,uniqueId @@ -201,7 +258,8 @@ void pubMqttDiscovery() { "", "", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # ifndef ESP32_ETHERNET createDiscovery("sensor", //set Type @@ -210,7 +268,8 @@ void pubMqttDiscovery() { "", "", "dB", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif # endif @@ -221,7 +280,8 @@ void pubMqttDiscovery() { "", "", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac + "", "", "", "", false, // device name, device manufacturer, device model, device mac + stateClassNone //State Class ); # if defined(ZboardM5STICKC) || defined(ZboardM5STICKCP) createDiscovery("sensor", //set Type @@ -230,7 +290,8 @@ void pubMqttDiscovery() { "", "", "V", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); createDiscovery("sensor", //set Type subjectSYStoMQTT, "SYS: Bat current", (char*)getUniqueId("m5batcurrent", "").c_str(), //set state_topic,name,uniqueId @@ -238,7 +299,8 @@ void pubMqttDiscovery() { "", "", "A", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); createDiscovery("sensor", //set Type subjectSYStoMQTT, "SYS: Vin voltage", (char*)getUniqueId("m5vinvoltage", "").c_str(), //set state_topic,name,uniqueId @@ -246,7 +308,8 @@ void pubMqttDiscovery() { "", "", "V", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); createDiscovery("sensor", //set Type subjectSYStoMQTT, "SYS: Vin current", (char*)getUniqueId("m5vincurrent", "").c_str(), //set state_topic,name,uniqueId @@ -254,7 +317,8 @@ void pubMqttDiscovery() { "", "", "A", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif # ifdef ZboardM5STACK @@ -264,7 +328,8 @@ void pubMqttDiscovery() { "", "", "%", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); createDiscovery("binary_sensor", //set Type subjectSYStoMQTT, "SYS: Is Charging", (char*)getUniqueId("m5ischarging", "").c_str(), //set state_topic,name,uniqueId @@ -272,7 +337,8 @@ void pubMqttDiscovery() { "", "", "%", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); createDiscovery("binary_sensor", //set Type subjectSYStoMQTT, "SYS: Is Charge Full", (char*)getUniqueId("m5ischargefull", "").c_str(), //set state_topic,name,uniqueId @@ -280,7 +346,8 @@ void pubMqttDiscovery() { "", "", "%", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a child device, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif # endif @@ -290,7 +357,8 @@ void pubMqttDiscovery() { "{\"cmd\":\"restart\"}", "", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoSYSset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); createDiscovery("switch", //set Type will_Topic, "SYS: Erase credentials", (char*)getUniqueId("erase", "").c_str(), //set state_topic,name,uniqueId @@ -298,7 +366,8 @@ void pubMqttDiscovery() { "{\"cmd\":\"erase\"}", "", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoSYSset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); createDiscovery("switch", //set Type "", "SYS: Auto discovery", (char*)getUniqueId("discovery", "").c_str(), //set state_topic,name,uniqueId @@ -306,7 +375,8 @@ void pubMqttDiscovery() { "{\"discovery\":true}", "{\"discovery\":false}", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoSYSset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", true // device name, device manufacturer, device model, device mac, retain + "", "", "", "", true, // device name, device manufacturer, device model, device mac, retain, + stateClassNone //State Class ); # ifdef ZsensorBME280 @@ -329,7 +399,8 @@ void pubMqttDiscovery() { will_Topic, BMEsensor[i][3], BMEsensor[i][4], BMEsensor[i][5], BMEsensor[i][6], BMEsensor[i][7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); } # endif @@ -351,7 +422,8 @@ void pubMqttDiscovery() { will_Topic, HTUsensor[i][3], HTUsensor[i][4], HTUsensor[i][5], HTUsensor[i][6], HTUsensor[i][7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); } # endif @@ -372,7 +444,8 @@ void pubMqttDiscovery() { will_Topic, AHTsensor[i][3], AHTsensor[i][4], AHTsensor[i][5], AHTsensor[i][6], AHTsensor[i][7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); } # endif @@ -394,7 +467,8 @@ void pubMqttDiscovery() { will_Topic, DHTsensor[i][3], DHTsensor[i][4], DHTsensor[i][5], DHTsensor[i][6], DHTsensor[i][7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); } # endif @@ -411,7 +485,8 @@ void pubMqttDiscovery() { will_Topic, ADCsensor[3], ADCsensor[4], ADCsensor[5], ADCsensor[6], ADCsensor[7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif @@ -433,7 +508,8 @@ void pubMqttDiscovery() { will_Topic, BH1750sensor[i][3], BH1750sensor[i][4], BH1750sensor[i][5], BH1750sensor[i][6], BH1750sensor[i][7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); } # endif @@ -456,7 +532,8 @@ void pubMqttDiscovery() { will_Topic, TSL2561sensor[i][3], TSL2561sensor[i][4], TSL2561sensor[i][5], TSL2561sensor[i][6], TSL2561sensor[i][7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); } # endif @@ -473,7 +550,8 @@ void pubMqttDiscovery() { will_Topic, HCSR501sensor[3], HCSR501sensor[4], HCSR501sensor[5], HCSR501sensor[6], HCSR501sensor[7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif @@ -489,7 +567,8 @@ void pubMqttDiscovery() { will_Topic, GPIOInputsensor[3], GPIOInputsensor[4], GPIOInputsensor[5], GPIOInputsensor[6], GPIOInputsensor[7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif @@ -511,7 +590,8 @@ void pubMqttDiscovery() { will_Topic, INA226sensor[i][3], INA226sensor[i][4], INA226sensor[i][5], INA226sensor[i][6], INA226sensor[i][7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); } # endif @@ -533,7 +613,8 @@ void pubMqttDiscovery() { will_Topic, actuatorONOFF[3], actuatorONOFF[4], actuatorONOFF[5], actuatorONOFF[6], actuatorONOFF[7], 0, "", "", true, subjectMQTTtoONOFF, - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif @@ -550,7 +631,8 @@ void pubMqttDiscovery() { will_Topic, gatewayRF[3], gatewayRF[4], gatewayRF[5], gatewayRF[6], gatewayRF[7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif @@ -567,7 +649,8 @@ void pubMqttDiscovery() { will_Topic, gatewayRF2[3], gatewayRF2[4], gatewayRF2[5], gatewayRF2[6], gatewayRF2[7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif @@ -584,7 +667,8 @@ void pubMqttDiscovery() { will_Topic, gatewayRFM69[3], gatewayRFM69[4], gatewayRFM69[5], gatewayRFM69[6], gatewayRFM69[7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif @@ -601,7 +685,8 @@ void pubMqttDiscovery() { will_Topic, gatewayLORA[3], gatewayLORA[4], gatewayLORA[5], gatewayLORA[6], gatewayLORA[7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif @@ -618,7 +703,8 @@ void pubMqttDiscovery() { will_Topic, gatewaySRFB[3], gatewaySRFB[4], gatewaySRFB[5], gatewaySRFB[6], gatewaySRFB[7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif @@ -635,7 +721,8 @@ void pubMqttDiscovery() { will_Topic, gatewayPilight[3], gatewayPilight[4], gatewayPilight[5], gatewayPilight[6], gatewayPilight[7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif @@ -652,7 +739,8 @@ void pubMqttDiscovery() { will_Topic, gatewayIR[3], gatewayIR[4], gatewayIR[5], gatewayIR[6], gatewayIR[7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif @@ -669,7 +757,8 @@ void pubMqttDiscovery() { will_Topic, gateway2G[3], gateway2G[4], gateway2G[5], gateway2G[6], gateway2G[7], 0, "", "", true, "", - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif @@ -680,7 +769,8 @@ void pubMqttDiscovery() { "", "", "ms", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain, + stateClassNone //State Class ); createDiscovery("sensor", //set Type subjectSYStoMQTT, "BT: Connnect every X scan(s)", (char*)getUniqueId("scanbcnct", "").c_str(), //set state_topic,name,uniqueId @@ -688,7 +778,8 @@ void pubMqttDiscovery() { "", "", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, "", //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); createDiscovery("switch", //set Type will_Topic, "BT: Force scan", (char*)getUniqueId("force_scan", "").c_str(), //set state_topic,name,uniqueId @@ -696,7 +787,8 @@ void pubMqttDiscovery() { "{\"interval\":0}", "", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoBTset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", false // device name, device manufacturer, device model, device mac, retain + "", "", "", "", false, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); createDiscovery("switch", //set Type "", "BT: Publish only sensors", (char*)getUniqueId("only_sensors", "").c_str(), //set state_topic,name,uniqueId @@ -704,7 +796,8 @@ void pubMqttDiscovery() { "{\"onlysensors\":true}", "{\"onlysensors\":false}", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoBTset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", true // device name, device manufacturer, device model, device mac, retain + "", "", "", "", true, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); createDiscovery("switch", //set Type "", "BT: Publish HASS presence", (char*)getUniqueId("hasspresence", "").c_str(), //set state_topic,name,uniqueId @@ -712,7 +805,8 @@ void pubMqttDiscovery() { "{\"hasspresence\":true}", "{\"hasspresence\":false}", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoBTset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", true // device name, device manufacturer, device model, device mac, retain + "", "", "", "", true, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # ifdef ESP32 createDiscovery("switch", //set Type @@ -721,7 +815,8 @@ void pubMqttDiscovery() { "{\"lowpowermode\":2}", "{\"lowpowermode\":0}", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay "", "", true, subjectMQTTtoBTset, //set,payload_avalaible,payload_not avalaible,is a gateway entity, command topic - "", "", "", "", true // device name, device manufacturer, device model, device mac, retain + "", "", "", "", true, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); createDiscovery("switch", //set Type "", "BT: Connect to devices", (char*)getUniqueId("bleconnect", "").c_str(), //set state_topic,name,uniqueId @@ -729,7 +824,8 @@ void pubMqttDiscovery() { "{\"bleconnect\":true}", "{\"bleconnect\":false}", "", //set,payload_on,payload_off,unit_of_meas, 0, //set off_delay Gateway_AnnouncementMsg, will_Message, true, subjectMQTTtoBTset, //set,payload_avalaible,payload_not avalaible ,is a gateway entity, command topic - "", "", "", "", true // device name, device manufacturer, device model, device mac, retain + "", "", "", "", true, // device name, device manufacturer, device model, device mac, retain + stateClassNone //State Class ); # endif # endif diff --git a/main/ZsensorDS1820.ino b/main/ZsensorDS1820.ino index 30f52164..4ae7d3f0 100644 --- a/main/ZsensorDS1820.ino +++ b/main/ZsensorDS1820.ino @@ -113,7 +113,9 @@ void pubOneWire_HADiscovery() { jsonTempc, "", "", "°C", 0, "", "", true, "", - "", "", "", "", false); + "", "", "", "", false, + stateClassMeasurement // state class + ); } } # endif diff --git a/main/config_mqttDiscovery.h b/main/config_mqttDiscovery.h index fb660e09..ad4e9e06 100644 --- a/main/config_mqttDiscovery.h +++ b/main/config_mqttDiscovery.h @@ -37,7 +37,8 @@ extern void createDiscovery(const char* sensor_type, const char* payload_on, const char* payload_off, const char* unit_of_meas, int off_delay, const char* payload_available, const char* payload_not_avalaible, bool gateway_entity, const char* command_topic, - const char* device_name, const char* device_manufacturer, const char* device_model, const char* device_mac, bool retainCmd); + const char* device_name, const char* device_manufacturer, const char* device_model, const char* device_mac, bool retainCmd, + const char* state_class); #define discovery_Topic "homeassistant" @@ -83,40 +84,44 @@ extern void createDiscovery(const char* sensor_type, # define jsonCount "{{ value_json.count }}" # define jsonAlarm "{{ value_json.alarm }}" #else // Home assistant autodiscovery value key definition -# define jsonBatt "{{ value_json.batt | is_defined }}" -# define jsonLux "{{ value_json.lux | is_defined }}" -# define jsonPres "{{ value_json.pres | is_defined }}" -# define jsonFer "{{ value_json.fer | is_defined }}" -# define jsonFor "{{ value_json.for | is_defined }}" -# define jsonMoi "{{ value_json.moi | is_defined }}" -# define jsonHum "{{ value_json.hum | is_defined }}" -# define jsonStep "{{ value_json.steps | is_defined }}" -# define jsonWeight "{{ value_json.weight | is_defined }}" -# define jsonPresence "{{ value_json.presence | is_defined }}" -# define jsonAltim "{{ value_json.altim | is_defined }}" -# define jsonAltif "{{ value_json.altift | is_defined }}" -# define jsonTempc "{{ value_json.tempc | is_defined }}" -# define jsonTempc2 "{{ value_json.tempc2 | is_defined }}" -# define jsonTempc3 "{{ value_json.tempc3 | is_defined }}" -# define jsonTempc4 "{{ value_json.tempc4 | is_defined }}" -# define jsonTempf "{{ value_json.tempf | is_defined }}" -# define jsonMsg "{{ value_json.message | is_defined }}" -# define jsonVal "{{ value_json.value | is_defined }}" -# define jsonVolt "{{ value_json.volt | is_defined }}" -# define jsonCurrent "{{ value_json.current | is_defined }}" -# define jsonPower "{{ value_json.power | is_defined }}" -# define jsonEnergy "{{ value_json.energy | is_defined }}" -# define jsonGpio "{{ value_json.gpio | is_defined }}" -# define jsonFtcd "{{ value_json.ftcd | is_defined }}" -# define jsonWm2 "{{ value_json.wattsm2 | is_defined }}" -# define jsonAdc "{{ value_json.adc | is_defined }}" -# define jsonPa "{{ float(value_json.pa) * 0.01 | is_defined }}" -# define jsonId "{{ value_json.id | is_defined }}" -# define jsonAddress "{{ value_json.address | is_defined }}" -# define jsonOpen "{{ value_json.open | is_defined }}" -# define jsonTime "{{ value_json.time | is_defined }}" -# define jsonCount "{{ value_json.count | is_defined }}" -# define jsonAlarm "{{ value_json.alarm | is_defined }}" +# define jsonBatt "{{ value_json.batt | is_defined }}" +# define jsonLux "{{ value_json.lux | is_defined }}" +# define jsonPres "{{ value_json.pres | is_defined }}" +# define jsonFer "{{ value_json.fer | is_defined }}" +# define jsonFor "{{ value_json.for | is_defined }}" +# define jsonMoi "{{ value_json.moi | is_defined }}" +# define jsonHum "{{ value_json.hum | is_defined }}" +# define jsonStep "{{ value_json.steps | is_defined }}" +# define jsonWeight "{{ value_json.weight | is_defined }}" +# define jsonPresence "{{ value_json.presence | is_defined }}" +# define jsonAltim "{{ value_json.altim | is_defined }}" +# define jsonAltif "{{ value_json.altift | is_defined }}" +# define jsonTempc "{{ value_json.tempc | is_defined }}" +# define jsonTempc2 "{{ value_json.tempc2 | is_defined }}" +# define jsonTempc3 "{{ value_json.tempc3 | is_defined }}" +# define jsonTempc4 "{{ value_json.tempc4 | is_defined }}" +# define jsonTempf "{{ value_json.tempf | is_defined }}" +# define jsonMsg "{{ value_json.message | is_defined }}" +# define jsonVal "{{ value_json.value | is_defined }}" +# define jsonVolt "{{ value_json.volt | is_defined }}" +# define jsonCurrent "{{ value_json.current | is_defined }}" +# define jsonPower "{{ value_json.power | is_defined }}" +# define jsonEnergy "{{ value_json.energy | is_defined }}" +# define jsonGpio "{{ value_json.gpio | is_defined }}" +# define jsonFtcd "{{ value_json.ftcd | is_defined }}" +# define jsonWm2 "{{ value_json.wattsm2 | is_defined }}" +# define jsonAdc "{{ value_json.adc | is_defined }}" +# define jsonPa "{{ float(value_json.pa) * 0.01 | is_defined }}" +# define jsonId "{{ value_json.id | is_defined }}" +# define jsonAddress "{{ value_json.address | is_defined }}" +# define jsonOpen "{{ value_json.open | is_defined }}" +# define jsonTime "{{ value_json.time | is_defined }}" +# define jsonCount "{{ value_json.count | is_defined }}" +# define jsonAlarm "{{ value_json.alarm | is_defined }}" +# define stateClassNone "" +# define stateClassMeasurement "measurement" +# define stateClassTotal "total" +# define stateClassTotalIncreasing "total_increasing" #endif #endif diff --git a/main/zzHTTPUpdate.cpp b/main/zzHTTPUpdate.cpp index 99456b1a..c2394cc5 100644 --- a/main/zzHTTPUpdate.cpp +++ b/main/zzHTTPUpdate.cpp @@ -29,7 +29,6 @@ # include // get running partition # include - // To do extern "C" uint32_t _SPIFFS_start; // To do extern "C" uint32_t _SPIFFS_end;