diff --git a/docs/img/OpenMQTTgateway_OpenHAB_Control.png b/docs/img/OpenMQTTgateway_OpenHAB_Control.png new file mode 100644 index 0000000..50a2a79 Binary files /dev/null and b/docs/img/OpenMQTTgateway_OpenHAB_Control.png differ diff --git a/docs/integrate/openhab2.md b/docs/integrate/openhab2.md index 6f15266..3d2317f 100644 --- a/docs/integrate/openhab2.md +++ b/docs/integrate/openhab2.md @@ -1,5 +1,18 @@ # Integrate OPENHAB2 +## Auto discovery through home assistant convention + +OpenMQTTGateway support autodiscovery of things for OpenHAB 2.4, so as to do that it rely on home assistant auto discovery convention. +So as to use the autodiscovery function you need to have: +* The Jinga transformation addon installed +* The Json transformation addon installed + +You need to set `OpenHABAutoDiscovery` to true into `config_mqttDiscovery.h` +`#define OpenHABDiscovery true` + +The things will appear in the inbox of the paperUI, add them and links the channels. You should see them into the control panel for further usage. +![](../img/OpenMQTTgateway_OpenHAB_Control.png) + ## MQTT 2 manual setup >=Openhab2.4 You should have a mqtt broker installed (either mosquitto or the OpenHAB2 embedded one) diff --git a/main/ZgatewayBT.ino b/main/ZgatewayBT.ino index ad5d587..f10d02b 100644 --- a/main/ZgatewayBT.ino +++ b/main/ZgatewayBT.ino @@ -149,10 +149,10 @@ void MiFloraDiscovery(char *mac) #define MiFloraparametersCount 4 Log.trace(F("MiFloraDiscovery" CR)); char *MiFlorasensor[MiFloraparametersCount][8] = { - {"sensor", "MiFlora-lux", mac, "illuminance", "{{ value_json.lux | is_defined }}", "", "", "lu"}, - {"sensor", "MiFlora-tem", mac, "temperature", "{{ value_json.tem | is_defined }}", "", "", "°C"}, - {"sensor", "MiFlora-fer", mac, "", "{{ value_json.fer | is_defined }}", "", "", "µS/cm"}, - {"sensor", "MiFlora-moi", mac, "", "{{ value_json.moi | is_defined }}", "", "", "%"} + {"sensor", "MiFlora-lux", mac, "illuminance", jsonLux, "", "", "lu"}, + {"sensor", "MiFlora-tem", mac, "temperature", jsonTemp, "", "", "°C"}, + {"sensor", "MiFlora-fer", mac, "", jsonFer, "", "", "µS/cm"}, + {"sensor", "MiFlora-moi", mac, "", jsonMoi, "", "", "%"} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -165,10 +165,10 @@ void VegTrugDiscovery(char *mac) #define VegTrugparametersCount 4 Log.trace(F("VegTrugDiscovery" CR)); char *VegTrugsensor[VegTrugparametersCount][8] = { - {"sensor", "VegTrug-lux", mac, "illuminance", "{{ value_json.lux | is_defined }}", "", "", "lu"}, - {"sensor", "VegTrug-tem", mac, "temperature", "{{ value_json.tem | is_defined }}", "", "", "°C"}, - {"sensor", "VegTrug-fer", mac, "", "{{ value_json.fer | is_defined }}", "", "", "µS/cm"}, - {"sensor", "VegTrug-moi", mac, "", "{{ value_json.moi | is_defined }}", "", "", "%"} + {"sensor", "VegTrug-lux", mac, "illuminance", jsonLux, "", "", "lu"}, + {"sensor", "VegTrug-tem", mac, "temperature", jsonTemp, "", "", "°C"}, + {"sensor", "VegTrug-fer", mac, "", jsonFer, "", "", "µS/cm"}, + {"sensor", "VegTrug-moi", mac, "", jsonMoi, "", "", "%"} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -181,9 +181,9 @@ void MiJiaDiscovery(char *mac) #define MiJiaparametersCount 3 Log.trace(F("MiJiaDiscovery" CR)); char *MiJiasensor[MiJiaparametersCount][8] = { - {"sensor", "MiJia-batt", mac, "battery", "{{ value_json.batt | is_defined }}", "", "", "%"}, - {"sensor", "MiJia-tem", mac, "temperature", "{{ value_json.tem | is_defined }}", "", "", "°C"}, - {"sensor", "MiJia-hum", mac, "humidity", "{{ value_json.hum | is_defined }}", "", "", "%"} + {"sensor", "MiJia-batt", mac, "battery", jsonBatt, "", "", "%"}, + {"sensor", "MiJia-tem", mac, "temperature", jsonTemp, "", "", "°C"}, + {"sensor", "MiJia-hum", mac, "humidity", jsonHum, "", "", "%"} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -196,9 +196,9 @@ void LYWSD02Discovery(char *mac) #define LYWSD02parametersCount 3 Log.trace(F("LYWSD02Discovery" CR)); char *LYWSD02sensor[LYWSD02parametersCount][8] = { - {"sensor", "LYWSD02-batt", mac, "battery", "{{ value_json.batt | is_defined }}", "", "", "V"}, - {"sensor", "LYWSD02-tem", mac, "temperature", "{{ value_json.tem | is_defined }}", "", "", "°C"}, - {"sensor", "LYWSD02-hum", mac, "humidity", "{{ value_json.hum | is_defined }}", "", "", "%"} + {"sensor", "LYWSD02-batt", mac, "battery", jsonBatt, "", "", "V"}, + {"sensor", "LYWSD02-tem", mac, "temperature", jsonTemp, "", "", "°C"}, + {"sensor", "LYWSD02-hum", mac, "humidity", jsonHum, "", "", "%"} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -211,9 +211,9 @@ void CLEARGRASSTRHDiscovery(char *mac) #define CLEARGRASSTRHparametersCount 3 Log.trace(F("CLEARGRASSTRHDiscovery" CR)); char *CLEARGRASSTRHsensor[CLEARGRASSTRHparametersCount][8] = { - {"sensor", "CLEARGRASSTRH-batt", mac, "battery", "{{ value_json.batt | is_defined }}", "", "", "V"}, - {"sensor", "CLEARGRASSTRH-tem", mac, "temperature", "{{ value_json.tem | is_defined }}", "", "", "°C"}, - {"sensor", "CLEARGRASSTRH-hum", mac, "humidity", "{{ value_json.hum | is_defined }}", "", "", "%"} + {"sensor", "CLEARGRASSTRH-batt", mac, "battery", jsonBatt, "", "", "V"}, + {"sensor", "CLEARGRASSTRH-tem", mac, "temperature", jsonTemp, "", "", "°C"}, + {"sensor", "CLEARGRASSTRH-hum", mac, "humidity", jsonHum, "", "", "%"} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -226,9 +226,9 @@ void CLEARGRASSCGD1Discovery(char *mac) #define CLEARGRASSCGD1parametersCount 3 Log.trace(F("CLEARGRASSCGD1Discovery" CR)); char *CLEARGRASSCGD1sensor[CLEARGRASSCGD1parametersCount][8] = { - {"sensor", "CLEARGRASSCGD1-batt", mac, "battery", "{{ value_json.batt | is_defined }}", "", "", "V"}, - {"sensor", "CLEARGRASSCGD1-tem", mac, "temperature", "{{ value_json.tem | is_defined }}", "", "", "°C"}, - {"sensor", "CLEARGRASSCGD1-hum", mac, "humidity", "{{ value_json.hum | is_defined }}", "", "", "%"} + {"sensor", "CLEARGRASSCGD1-batt", mac, "battery", jsonBatt, "", "", "V"}, + {"sensor", "CLEARGRASSCGD1-tem", mac, "temperature", jsonTemp, "", "", "°C"}, + {"sensor", "CLEARGRASSCGD1-hum", mac, "humidity", jsonHum, "", "", "%"} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -241,9 +241,9 @@ void CLEARGRASSTRHKPADiscovery(char *mac) #define CLEARGRASSTRHKPAparametersCount 3 Log.trace(F("CLEARGRASSTRHKPADiscovery" CR)); char *CLEARGRASSTRHKPAsensor[CLEARGRASSTRHKPAparametersCount][8] = { - {"sensor", "CLEARGRASSTRHKPA-pres", mac, "pressure", "{{ value_json.pres | is_defined }}", "", "", "kPa"}, - {"sensor", "CLEARGRASSTRHKPA-tem", mac, "temperature", "{{ value_json.tem | is_defined }}", "", "", "°C"}, - {"sensor", "CLEARGRASSTRHKPA-hum", mac, "humidity", "{{ value_json.hum | is_defined }}", "", "", "%"} + {"sensor", "CLEARGRASSTRHKPA-pres", mac, "pressure", jsonPres, "", "", "kPa"}, + {"sensor", "CLEARGRASSTRHKPA-tem", mac, "temperature", jsonTemp, "", "", "°C"}, + {"sensor", "CLEARGRASSTRHKPA-hum", mac, "humidity", jsonHum, "", "", "%"} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -256,7 +256,7 @@ void MiScaleDiscovery(char *mac) #define MiScaleparametersCount 1 Log.trace(F("MiScaleDiscovery" CR)); char *MiScalesensor[MiScaleparametersCount][8] = { - {"sensor", "MiScale-weight", mac, "", "{{ value_json.weight | is_defined }}", "", "", "kg"}, + {"sensor", "MiScale-weight", mac, "", jsonWeight, "", "", "kg"}, //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -269,7 +269,7 @@ void MiLampDiscovery(char *mac) #define MiLampparametersCount 1 Log.trace(F("MiLampDiscovery" CR)); char *MiLampsensor[MiLampparametersCount][8] = { - {"sensor", "MiLamp-presence", mac, "", "{{ value_json.presence}}", "", "", "d"}, + {"sensor", "MiLamp-presence", mac, "", jsonPresence, "", "", "d"}, //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -282,7 +282,7 @@ void MiBandDiscovery(char *mac) #define MiBandparametersCount 1 Log.trace(F("MiBandDiscovery" CR)); char *MiBandsensor[MiBandparametersCount][8] = { - {"sensor", "MiBand-steps", mac, "", "{{ value_json.steps | is_defined }}", "", "", "nb"}, + {"sensor", "MiBand-steps", mac, "", jsonStep, "", "", "nb"}, //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; diff --git a/main/ZmqttDiscovery.ino b/main/ZmqttDiscovery.ino index ed43adc..51ed4d7 100644 --- a/main/ZmqttDiscovery.ino +++ b/main/ZmqttDiscovery.ino @@ -109,14 +109,6 @@ void createDiscovery(char *sensor_type, sensor.set("cmd_t", command_topic); //command_topic } - /*if (strcmp(s_name, Gateway_Name) == 0){ - JsonArray &json_attributes = sensor.createNestedArray("json_attributes"); - json_attributes.add("uptime"); - json_attributes.add("freemem"); - json_attributes.add("rssi"); - json_attributes.add("SSID"); -}*/ - if (child_device) { StaticJsonBuffer jsonDeviceBuffer; @@ -161,12 +153,12 @@ void pubMqttDiscovery() #define BMEparametersCount 6 Log.trace(F("bme280Discovery" CR)); char *BMEsensor[BMEparametersCount][8] = { - {"sensor", "tempc", "bme", "temperature", "{{ value_json.tempc }}", "", "", "°C"}, - {"sensor", "tempf", "bme", "temperature", "{{ value_json.tempf }}", "", "", "°F"}, - {"sensor", "pa", "bme", "", "{{ float(value_json.pa) * 0.01 }}", "", "", "hPa"}, - {"sensor", "hum", "bme", "humidity", "{{ value_json.hum }}", "", "", "%"}, - {"sensor", "altim", "bme", "", "{{ value_json.altim }}", "", "", "m"}, - {"sensor", "altift", "bme", "", "{{ value_json.altift }}", "", "", "ft"} + {"sensor", "tempc", "bme", "temperature", jsonTemp, "", "", "°C"}, + {"sensor", "tempf", "bme", "temperature", jsonTempf, "", "", "°F"}, + {"sensor", "pa", "bme", "", jsonPa, "", "", "hPa"}, + {"sensor", "hum", "bme", "humidity", jsonHum, "", "", "%"}, + {"sensor", "altim", "bme", "", jsonAltim, "", "", "m"}, + {"sensor", "altift", "bme", "", jsonAltif, "", "", "ft"} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -186,9 +178,9 @@ void pubMqttDiscovery() #define HTUparametersCount 3 Log.trace(F("htu21Discovery" CR)); char *HTUsensor[HTUparametersCount][8] = { - {"sensor", "tempc", "htu", "temperature", "{{ value_json.tempc }}", "", "", "°C"}, - {"sensor", "tempf", "htu", "temperature", "{{ value_json.tempf }}", "", "", "°F"}, - {"sensor", "hum", "htu", "humidity", "{{ value_json.hum }}", "", "", "%"} + {"sensor", "tempc", "htu", "temperature", jsonTemp, "", "", "°C"}, + {"sensor", "tempf", "htu", "temperature", jsonTempf, "", "", "°F"}, + {"sensor", "hum", "htu", "humidity", jsonHum, "", "", "%"} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -208,8 +200,8 @@ void pubMqttDiscovery() #define DHTparametersCount 2 Log.trace(F("DHTDiscovery" CR)); char *DHTsensor[DHTparametersCount][8] = { - {"sensor", "tempc", "dht", "temperature", "{{ value_json.temp }}", "", "", "°C"}, - {"sensor", "hum", "dht", "humidity", "{{ value_json.hum }}", "", "", "%"}}; + {"sensor", "tempc", "dht", "temperature", jsonTemp, "", "", "°C"}, + {"sensor", "hum", "dht", "humidity", jsonHum, "", "", "%"}}; for (int i = 0; i < DHTparametersCount; i++) { @@ -225,7 +217,7 @@ void pubMqttDiscovery() #ifdef ZsensorADC Log.trace(F("ADCDiscovery" CR)); - char *ADCsensor[8] = {"sensor", "adc", "", "", "{{ value_json.adc }}", "", "", ""}; + char *ADCsensor[8] = {"sensor", "adc", "", "", jsonAdc, "", "", ""}; //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement Log.trace(F("CreateDiscoverySensor" CR)); @@ -241,9 +233,9 @@ void pubMqttDiscovery() #define BH1750parametersCount 3 Log.trace(F("BH1750Discovery" CR)); char *BH1750sensor[BH1750parametersCount][8] = { - {"sensor", "lux", "BH1750", "illuminance", "{{ value_json.lux }}", "", "", "lu"}, - {"sensor", "ftCd", "BH1750", "", "{{ value_json.ftCd }}", "", "", ""}, - {"sensor", "wattsm2", "BH1750", "", "{{ value_json.wattsm2 }}", "", "", "wm²"} + {"sensor", "lux", "BH1750", "illuminance", jsonLux, "", "", "lu"}, + {"sensor", "ftCd", "BH1750", "", jsonFtcd, "", "", ""}, + {"sensor", "wattsm2", "BH1750", "", jsonWm2, "", "", "wm²"} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -263,9 +255,9 @@ void pubMqttDiscovery() #define TSL2561parametersCount 3 Log.trace(F("TSL2561Discovery" CR)); char *TSL2561sensor[TSL2561parametersCount][8] = { - {"sensor", "lux", "TSL2561", "illuminance", "{{ value_json.lux }}", "", "", "lu"}, - {"sensor", "ftcd", "TSL2561", "", "{{ value_json.ftcd }}", "", "", ""}, - {"sensor", "wattsm2", "TSL2561", "", "{{ value_json.wattsm2 }}", "", "", "wm²"} + {"sensor", "lux", "TSL2561", "illuminance", jsonLux, "", "", "lu"}, + {"sensor", "ftcd", "TSL2561", "", jsonFtcd, "", "", ""}, + {"sensor", "wattsm2", "TSL2561", "", jsonWm2, "", "", "wm²"} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -283,7 +275,7 @@ void pubMqttDiscovery() #ifdef ZsensorHCSR501 Log.trace(F("HCSR501Discovery" CR)); - char *HCSR501sensor[8] = {"binary_sensor", "hcsr501", "", "", "{{value_json.hcsr501}}", "true", "false", ""}; + char *HCSR501sensor[8] = {"binary_sensor", "hcsr501", "", "", jsonPresence, "true", "false", ""}; //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement Log.trace(F("CreateDiscoverySensor" CR)); @@ -297,7 +289,7 @@ void pubMqttDiscovery() #ifdef ZsensorGPIOInput Log.trace(F("GPIOInputDiscovery" CR)); - char *GPIOInputsensor[8] = {"binary_sensor", "GPIOInput", "", "", "{{value_json.gpio}}", "HIGH", "LOW", ""}; + char *GPIOInputsensor[8] = {"binary_sensor", "GPIOInput", "", "", jsonGpio, "HIGH", "LOW", ""}; //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement Log.trace(F("CreateDiscoverySensor" CR)); @@ -313,9 +305,9 @@ void pubMqttDiscovery() #define INA226parametersCount 3 Log.trace(F("INA226Discovery" CR)); char *INA226sensor[INA226parametersCount][8] = { - {"sensor", "volt", "INA226", "", "{{ value_json.volt }}", "", "", "V"}, - {"sensor", "current", "INA226", "", "{{ value_json.current }}", "", "", "A"}, - {"sensor", "power", "INA226", "", "{{ value_json.power }}", "", "", "W"} + {"sensor", "volt", "INA226", "", jsonVolt, "", "", "V"}, + {"sensor", "current", "INA226", "", jsonCurrent, "", "", "A"}, + {"sensor", "power", "INA226", "", jsonPower, "", "", "W"} //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement }; @@ -348,7 +340,7 @@ void pubMqttDiscovery() #ifdef ZgatewayRF // Sensor to display RF received value Log.trace(F("gatewayRFDiscovery" CR)); - char *gatewayRF[8] = {"sensor", "gatewayRF", "", "", "{{ value_json.value }}", "", "", ""}; + char *gatewayRF[8] = {"sensor", "gatewayRF", "", "", jsonVal, "", "", ""}; //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement Log.trace(F("CreateDiscoverySensor" CR)); @@ -363,7 +355,7 @@ void pubMqttDiscovery() #ifdef ZgatewayRF2 // Sensor to display RF received value Log.trace(F("gatewayRF2Discovery" CR)); - char *gatewayRF2[8] = {"sensor", "gatewayRF2", "", "", "{{ value_json.value }}", "", "", ""}; + char *gatewayRF2[8] = {"sensor", "gatewayRF2", "", "", jsonVal, "", "", ""}; //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement Log.trace(F("CreateDiscoverySensor" CR)); @@ -378,7 +370,7 @@ void pubMqttDiscovery() #ifdef ZgatewayRFM69 // Sensor to display RF received value Log.trace(F("gatewayRFM69Discovery" CR)); - char *gatewayRFM69[8] = {"sensor", "gatewayRFM69", "", "", "{{ value_json.value }}", "", "", ""}; + char *gatewayRFM69[8] = {"sensor", "gatewayRFM69", "", "", jsonVal, "", "", ""}; //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement Log.trace(F("CreateDiscoverySensor" CR)); @@ -393,7 +385,7 @@ void pubMqttDiscovery() #ifdef ZgatewayLORA // Sensor to display RF received value Log.trace(F("gatewayLORADiscovery" CR)); - char *gatewayLORA[8] = {"sensor", "gatewayLORA", "", "", "{{ value_json.message }}", "", "", ""}; + char *gatewayLORA[8] = {"sensor", "gatewayLORA", "", "", jsonMsg, "", "", ""}; //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement Log.trace(F("CreateDiscoverySensor" CR)); @@ -408,7 +400,7 @@ void pubMqttDiscovery() #ifdef ZgatewaySRFB // Sensor to display RF received value Log.trace(F("gatewaySRFBDiscovery" CR)); - char *gatewaySRFB[8] = {"sensor", "gatewaySRFB", "", "", "{{ value_json.value }}", "", "", ""}; + char *gatewaySRFB[8] = {"sensor", "gatewaySRFB", "", "", jsonVal, "", "", ""}; //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement Log.trace(F("CreateDiscoverySensor" CR)); @@ -423,7 +415,7 @@ void pubMqttDiscovery() #ifdef ZgatewayPilight // Sensor to display RF received value Log.trace(F("gatewayPilightDiscovery" CR)); - char *gatewayPilight[8] = {"sensor", "gatewayPilight", "", "", "{{ value_json.message }}", "", "", ""}; + char *gatewayPilight[8] = {"sensor", "gatewayPilight", "", "", jsonMsg, "", "", ""}; //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement Log.trace(F("CreateDiscoverySensor" CR)); @@ -438,7 +430,7 @@ void pubMqttDiscovery() #ifdef ZgatewayIR // Sensor to display IR received value Log.trace(F("gatewayIRDiscovery" CR)); - char *gatewayIR[8] = {"sensor", "gatewayIR", "", "", "{{ value_json.value }}", "", "", ""}; + char *gatewayIR[8] = {"sensor", "gatewayIR", "", "", jsonVal, "", "", ""}; //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement Log.trace(F("CreateDiscoverySensor" CR)); @@ -453,7 +445,7 @@ void pubMqttDiscovery() #ifdef Zgateway2G // Sensor to display 2G received value Log.trace(F("gateway2GDiscovery" CR)); - char *gateway2G[8] = {"sensor", "gateway2G", "", "", "{{ value_json.message }}", "", "", ""}; + char *gateway2G[8] = {"sensor", "gateway2G", "", "", jsonMsg, "", "", ""}; //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement Log.trace(F("CreateDiscoverySensor" CR)); @@ -468,7 +460,7 @@ void pubMqttDiscovery() #ifdef ZgatewayBT // Sensor to display BT received value Log.trace(F("gatewayBTDiscovery" CR)); - char *gatewayBT[8] = {"sensor", "gatewayBT", "", "", "{{ value_json.id }}", "", "", ""}; + char *gatewayBT[8] = {"sensor", "gatewayBT", "", "", jsonId, "", "", ""}; //component type,name,availability topic,device class,value template,payload on, payload off, unit of measurement Log.trace(F("CreateDiscoverySensor" CR)); diff --git a/main/config_mqttDiscovery.h b/main/config_mqttDiscovery.h index cfb2072..d740618 100644 --- a/main/config_mqttDiscovery.h +++ b/main/config_mqttDiscovery.h @@ -41,4 +41,60 @@ extern void createDiscovery(char * sensor_type, #define DEVICEMANUFACTURER "OMG_community" +/*-------------- Auto discovery macros-----------------*/ +// Set the line below to true so as to have autodiscovery working with OpenHAB +#define OpenHABDiscovery false + +#if OpenHABDiscovery // OpenHAB autodiscovery value key definition (is defined command is not supported by OpenHAB) +#define jsonBatt "{{ value_json.batt }}" +#define jsonLux "{{ value_json.lux }}" +#define jsonPres "{{ value_json.pres }}" +#define jsonFer "{{ value_json.fer }}" +#define jsonMoi "{{ value_json.moi }}" +#define jsonHum "{{ value_json.hum }}" +#define jsonTemp "{{ value_json.tem }}" +#define jsonStep "{{ value_json.steps }}" +#define jsonWeight "{{ value_json.weight }}" +#define jsonPresence "{{ value_json.presence }}" +#define jsonAltim "{{ value_json.altim }}" +#define jsonAltif "{{ value_json.altift }}" +#define jsonTempf "{{ value_json.tempf }}" +#define jsonMsg "{{ value_json.message }}" +#define jsonVal "{{ value_json.value }}" +#define jsonVolt "{{ value_json.volt }}" +#define jsonCurrent "{{ value_json.current }}" +#define jsonPower "{{ value_json.power }}" +#define jsonGpio "{{ value_json.gpio }}" +#define jsonFtcd "{{ value_json.ftcd }}" +#define jsonWm2 "{{ value_json.wattsm2 }}" +#define jsonAdc "{{ value_json.adc }}" +#define jsonPa "{{ float(value_json.pa) * 0.01 }}" +#define jsonId "{{ value_json.id }}" +#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 jsonMoi "{{ value_json.moi | is_defined }}" +#define jsonHum "{{ value_json.hum | is_defined }}" +#define jsonTemp "{{ value_json.tem | 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 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 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 }}" +#endif + #endif \ No newline at end of file