Today I got my first zigbee devices and setup everything. OpenHab with recent MQTT 2 is easier to use.
Here is my sample. Hope it will be helpful for someone else.
zigbee2mqtt is configured with default settings.
My zigbee.things with the mqtt specific setup.
Bridge mqtt:broker:myMQTTBroker [ host="mqtt", secure=false, username="$user", password="$pass" , clientID="$client" ]
{
Thing topic zigbeeMQTT "Zigbee2mqtt" {
Channels:
Type switch : permitJoin [ commandTopic="zigbee2mqtt/bridge/config/permit_join", on="true", off="false" ]
Type string : state [ stateTopic="zigbee2mqtt/bridge/state" ]
Type string : logType [ stateTopic="zigbee2mqtt/bridge/log", transformationPattern="JSONPATH:$.type" ]
Type string : logMessage [ stateTopic="zigbee2mqtt/bridge/log", transformationPattern="JSONPATH:$.message" ]
}
Thing topic zigbeeButtonOne "Zigbee button one" {
Channels:
Type string : click [ stateTopic="zigbee2mqtt/0x00158d000276e6ed", transformationPattern="JSONPATH:$.click" ]
Type number : voltage [ stateTopic="zigbee2mqtt/0x00158d000276e6ed", transformationPattern="JSONPATH:$.voltage" ]
Type number : battery [ stateTopic="zigbee2mqtt/0x00158d000276e6ed", transformationPattern="JSONPATH:$.battery" ]
Type number : linkquality [ stateTopic="zigbee2mqtt/0x00158d000276e6ed", transformationPattern="JSONPATH:$.linkquality" ]
}
Thing topic zigbeeSensorOne "Zigbee sensor one" {
Channels:
Type number : temperature [ stateTopic="zigbee2mqtt/0x00158d0002c8cca6", transformationPattern="JSONPATH:$.temperature" ]
Type number : humidity [ stateTopic="zigbee2mqtt/0x00158d0002c8cca6", transformationPattern="JSONPATH:$.humidity" ]
Type number : pressure [ stateTopic="zigbee2mqtt/0x00158d0002c8cca6", transformationPattern="JSONPATH:$.pressure" ]
Type number : voltage [ stateTopic="zigbee2mqtt/0x00158d0002c8cca6", transformationPattern="JSONPATH:$.voltage" ]
Type number : battery [ stateTopic="zigbee2mqtt/0x00158d0002c8cca6", transformationPattern="JSONPATH:$.battery" ]
Type number : linkquality [ stateTopic="zigbee2mqtt/0x00158d0002c8cca6", transformationPattern="JSONPATH:$.linkquality" ]
}
}
zigbee.items
// Control zigbee2mqtt
Group gZigbeeMQTT "Zigbee2mqtt"
String ZigbeeState "Zigbee2mqtt state" <switch> (gZigbeeMQTT) { channel="mqtt:topic:myMQTTBroker:zigbeeMQTT:state" }
Switch ZigbeePermitJoin "Permit join new devices" <switch> (gZigbeeMQTT) { channel="mqtt:topic:myMQTTBroker:zigbeeMQTT:permitJoin" }
String ZigbeeLogType "Zigbee2mqtt log type" (gZigbeeMQTT) { channel="mqtt:topic:myMQTTBroker:zigbeeMQTT:logType" }
String ZigbeeLogMessage "Zigbee2mqtt log message" (gZigbeeMQTT) { channel="mqtt:topic:myMQTTBroker:zigbeeMQTT:logMessage" }
// Xiaomi Aqara wireless buttons WXKG01LM
Group gZigbeeButton "Zigbee Buttons"
String ZigbeeButtonOneClick "Button One Click [%s]" <button> (gZigbeeButton) { channel="mqtt:topic:myMQTTBroker:zigbeeButtonOne:click" }
Number ZigbeeButtonOneLinkQuality "Button One Link Quality [%d]" <network> (gZigbeeButton) { channel="mqtt:topic:myMQTTBroker:zigbeeButtonOne:linkquality" }
Number ZigbeeButtonOneVoltage "Button One Voltage [%d mV]" <energy> (gZigbeeButton) { channel="mqtt:topic:myMQTTBroker:zigbeeButtonOne:voltage" }
Number ZigbeeButtonOneBattery "Button One Battery [%.1f %%]" <battery> (gZigbeeButton) { channel="mqtt:topic:myMQTTBroker:zigbeeButtonOne:battery" }
// Xiaomi Aqara temperature, humidity and pressure sensor WSDCGQ11LM
Group gZigbeeSensor "Zigbee Sensors"
Number ZigbeeSensorOneTemperature "Sensor One Temperature [%.2f °C]" <temperature> (gZigbeeSensor) { channel="mqtt:topic:myMQTTBroker:zigbeeSensorOne:temperature" }
Number ZigbeeSensorOneHumidity "Sensor One Humidity [%.2f %%]" <humidity> (gZigbeeSensor) { channel="mqtt:topic:myMQTTBroker:zigbeeSensorOne:humidity" }
Number ZigbeeSensorOnePressure "Sensor One Pressure [%d hPa]" <pressure> (gZigbeeSensor) { channel="mqtt:topic:myMQTTBroker:zigbeeSensorOne:pressure" }
Number ZigbeeSensorOneLinkQuality "Sensor One Link Quality [%d]" <network> (gZigbeeSensor) { channel="mqtt:topic:myMQTTBroker:zigbeeSensorOne:linkquality" }
Number ZigbeeSensorOneVoltage "Sensor One Voltage [%d mV]" <energy> (gZigbeeSensor) { channel="mqtt:topic:myMQTTBroker:zigbeeSensorOne:voltage" }
Number ZigbeeSensorOneBattery "Sensor One Battery [%.1f %%]" <battery> (gZigbeeSensor) { channel="mqtt:topic:myMQTTBroker:zigbeeSensorOne:battery" }
zigbee.rules with additional rule to automatically disable “permit join” with 2 minutes delay
rule "Auto switch off permit join"
when
Item ZigbeePermitJoin changed to ON
then
createTimer(now.plusMinutes(2)) [|
sendCommand(ZigbeePermitJoin, OFF)
]
end
rule "Button WXKG01LM One"
when
Item ZigbeeButtonOneClick received update
then
if (ZigbeeButtonOneClick.state.toString == "single") {
if(KidsWardrobeLamp.state == ON) {
sendCommand(KidsWardrobeLamp, OFF)
} else {
sendCommand(KidsWardrobeLamp, ON)
}
} else if (ZigbeeButtonOneClick.state.toString == 'double') {
if(MirrorLamp.state == ON) {
sendCommand(MirrorLamp, OFF)
} else {
sendCommand(MirrorLamp, ON)
}
} else if (ZigbeeButtonOneClick.state.toString == 'long') {
if(KidsWardrobeLamp.state == ON || BedroomWardrobeLamp.state == ON) {
sendCommand(KidsWardrobeLamp, OFF)
sendCommand(BedroomWardrobeLamp, OFF)
} else {
sendCommand(KidsWardrobeLamp, ON)
sendCommand(BedroomWardrobeLamp, ON)
}
}
end
finally sitemap
Frame label="Zigbee devices" {
Group item=gZigbeeMQTT
Group item=gZigbeeButton
Group item=gZigbeeSensor
}