I have my Zigbee devices coming over zigbee2mqtt. Most of the values are coming without unit. A payload might look something like that.
{
"battery" : 90,
"humidity" : 53.86,
"last_seen" : "2025-01-15T17:39:31+00:00",
"linkquality" : 48,
"power_outage_count" : 7,
"pressure" : 1000.7,
"temperature" : 19.58,
"voltage" : 2985
}
For that reason I set the unit in the Thing definition. It looks something like that:
Thing topic zigbee2mqtt_kinderzimmer_1_feuchtigkeitssensor "Kinderzimmer 1, Feuchtigkeitssensor" @ "Kinderzimmer 1" [
availabilityTopic="zigbee2mqtt/kinderzimmer 1/feuchtigkeitssensor/availability",
payloadAvailable="online",
payloadNotAvailable="offline",
transformationPattern="JSONPATH($.state)"
] {
Channels:
Type number : batteryCharge "Verbleibende Batterieladung" [
stateTopic="zigbee2mqtt/kinderzimmer 1/feuchtigkeitssensor",
transformationPattern="JSONPATH:$.battery∩JS:|input + ' %'"
]
Type number : batteryVoltage "Batteriespannung" [
stateTopic="zigbee2mqtt/kinderzimmer 1/feuchtigkeitssensor",
transformationPattern="JSONPATH:$.voltage",
unit="mV"
]
Type number : humidity "Relative Luftfeuchtigkeit" [
stateTopic="zigbee2mqtt/kinderzimmer 1/feuchtigkeitssensor",
transformationPattern="JSONPATH:$.humidity∩JS:|input + ' %'"
]
Type number : barometricPressure "Luftdruck auf Meereshöhe" [
stateTopic="zigbee2mqtt/kinderzimmer 1/feuchtigkeitssensor",
transformationPattern="JSONPATH:$.pressure",
unit="hPa"
]
Type number : temperature "Temperatur" [
stateTopic="zigbee2mqtt/kinderzimmer 1/feuchtigkeitssensor",
transformationPattern="JSONPATH:$.temperature",
unit="°C"
]
}
Whereas this works for pyhsical units pretty well, the dimensionless do not. For that reason I apply a transformation pattern, that adds a percent sign to the value using this syntax JSONPATH:$.battery∩JS:|input + ' %'
. This will concat the two transformations to a single result.
The definition of items is then pretty forward with the exception of the percentage value:
// Equipment Feuchtigkeitssensor
Group gHallway2_eqHumiditySensor "Feuchtigkeitssensor" <if:meteocons:humidity> (gHallway2) [ HVAC, Heating ]
// Batteriestatus
Number:Dimensionless gHallway2_eqHumiditySensor_itBatteryCharge "Batterieladung [%.0f %unit%]" <oh:battery> (gHallway2_eqHumiditySensor) [ Measurement, Status ] {
channel="mqtt:topic:smarthome:zigbee2mqtt_diele_2_feuchtigkeitssensor:batteryCharge",
unit="%"
}
Number:ElectricPotential gHallway2_eqHumiditySensor_itBatteryPotential "Batteriespannung [%.1f %unit%]" <oh:battery> (gHallway2_eqHumiditySensor) [ Measurement, Status ] {
channel="mqtt:topic:smarthome:zigbee2mqtt_diele_2_feuchtigkeitssensor:batteryVoltage"
}
// Luftdruck
Number:Pressure gHallway2_eqHumiditySensor_itPressure "Luftdruck [%.0f %unit%]" <if:mdi:barometer> (gHallway2_eqHumiditySensor) [ Measurement, Pressure ] {
channel="mqtt:topic:smarthome:zigbee2mqtt_diele_2_feuchtigkeitssensor:barometricPressure"
}
// Luftfeuchtigkeit
Number:Dimensionless gHallway2_eqHumiditySensor_itHumidity "Luftfeuchtigkeit [%.0f %unit%]" <if:meteocons:humidity> (gHallway2_eqHumiditySensor) [ Measurement, Humidity ] {
channel="mqtt:topic:smarthome:zigbee2mqtt_diele_2_feuchtigkeitssensor:humidity",
unit="%"
}
// Temperatur
Number:Temperature gHallway2_eqHumiditySensor_itTemperature "Temperatur [%.1f %unit%]" <oh:temperature> (gHallway2_eqHumiditySensor) [ Measurement, Temperature ] {
channel="mqtt:topic:smarthome:zigbee2mqtt_diele_2_feuchtigkeitssensor:temperature"
}