KNX mit Zigbee erweitern (zigbee2mqtt)
KNX ist ein starkes System - immerhin gibt es hunderte Hersteller, welche tausende Komponenten entwickeln und anbieten. Aber natürlich ist das System auch so offen und flexibel, dass man es beliebig kombinieren kann. In diesem Beispiel möchte ich Dir einfach mal zeigen, wie man Zigbee und KNX miteinander verknüpfen kann. Dazu ist natürlich eine “Vermittlungsschicht” notwendig, welche KNX und Zigbee miteinander verheiratet. Das kann Node-RED, ioBroker, Home Assistant oder ein anderes System sein. Am Ende gibt es zig verschiedene Wege zum gleichen Ziel. Um Dich nicht unnötig zu verwirren, schauen wir uns in diesem Beitrag zigbee2mqtt als Softwarelösung an.
Was Du benötigst:
- Eine zigbee2mqtt Installation (z.B. auf einem Raspberry Pi)
- Einen MQTT-Broker (z.B. Mosquitto)
- Einen Zigbee-Coordinator (z.B. einen Ethernet-Coordinator)
- Ein paar Zigbee-Komponenten, welche in der Liste der unterstützten Geräte stehen. Aktuell werden 3616 von 432 Herstellern unterstützt!
Video
Der Aufbau
»Zigbee zu KNX über Coordinator, zigbee2mqtt und Node-RED«
Node-RED
Wie genau man mit Node-RED arbeitet und wie man das System installiert/konfiguriert, habe ich im Node-RED-Master-Kurs ausführlich erklärt. Hier die Installation im Schnelldurchlauf:
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
sudo systemctl enable nodered.service
sudo systemctl start nodered
sudo service nodered status
MQTT-Benutzer anlegen
Den zusätzlichen Node-RED Nutzer für Mosquitto (den MQTT-Broker) habe ich wie folgt angelegt (weiteres dazu im MQTT-Grundlagen-Kurs):
sudo mosquitto_passwd -b /etc/mosquitto/mosquitto_passwords nodered mwYXTYJnhicKaIyP
sudo service mosquitto restart
Alternativen
Wie gesagt, gibt es zig Wege zum gleichen Ziel. So eine “Vermittlungschicht” lässt sich mit fast jedem System realisieren. Egal ob Node-RED, ioBroker, Home Assistant oder etwas anderes (wie IP-Symcon oder der Timberwolf Server).
Links
Node-RED Flows
[
{
"id": "b6314568075a361d",
"type": "tab",
"label": "Flow 1",
"disabled": false,
"info": "",
"env": []
},
{
"id": "cc4f440645a21a14",
"type": "mqtt in",
"z": "b6314568075a361d",
"name": "Aqara Button 1",
"topic": "zigbee2mqtt/0x00158d00044db0c6",
"qos": "2",
"datatype": "auto-detect",
"broker": "e7e4b091dba485df",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 180,
"y": 100,
"wires": [
[
"b48e70d57f7b443f"
]
]
},
{
"id": "dcd42670c731e4ed",
"type": "knxUltimate",
"z": "b6314568075a361d",
"server": "bcb68fe308c6d736",
"topic": "1/0/0",
"outputtopic": "",
"dpt": "1.001",
"initialread": 0,
"notifyreadrequest": false,
"notifyresponse": false,
"notifywrite": true,
"notifyreadrequestalsorespondtobus": false,
"notifyreadrequestalsorespondtobusdefaultvalueifnotinitialized": "0",
"listenallga": false,
"name": "Steckdose Verteilung",
"outputtype": "write",
"outputRBE": "true",
"inputRBE": "false",
"formatmultiplyvalue": 1,
"formatnegativevalue": "leave",
"formatdecimalsvalue": 999,
"passthrough": "no",
"x": 790,
"y": 100,
"wires": [
[]
]
},
{
"id": "9d893d8d76aa6406",
"type": "inject",
"z": "b6314568075a361d",
"name": "ein",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "true",
"payloadType": "bool",
"x": 510,
"y": 40,
"wires": [
[
"dcd42670c731e4ed"
]
]
},
{
"id": "2752528ff740f097",
"type": "inject",
"z": "b6314568075a361d",
"name": "aus",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "false",
"payloadType": "bool",
"x": 510,
"y": 160,
"wires": [
[
"dcd42670c731e4ed"
]
]
},
{
"id": "b48e70d57f7b443f",
"type": "switch",
"z": "b6314568075a361d",
"name": "Action",
"property": "payload.action",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "single",
"vt": "str"
},
{
"t": "eq",
"v": "double",
"vt": "str"
}
],
"checkall": "false",
"repair": false,
"outputs": 2,
"x": 370,
"y": 100,
"wires": [
[
"f0770a49a81536b7"
],
[
"d7ab7f0d0166863f"
]
]
},
{
"id": "f0770a49a81536b7",
"type": "change",
"z": "b6314568075a361d",
"name": "ein",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "true",
"tot": "bool"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 510,
"y": 80,
"wires": [
[
"dcd42670c731e4ed"
]
]
},
{
"id": "d7ab7f0d0166863f",
"type": "change",
"z": "b6314568075a361d",
"name": "aus",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "false",
"tot": "bool"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 510,
"y": 120,
"wires": [
[
"dcd42670c731e4ed"
]
]
},
{
"id": "e7e4b091dba485df",
"type": "mqtt-broker",
"name": "Mosquitto-Broker Raspberry Pi 5",
"broker": "localhost",
"port": "1883",
"clientid": "",
"autoConnect": true,
"usetls": false,
"protocolVersion": "4",
"keepalive": "60",
"cleansession": true,
"autoUnsubscribe": true,
"birthTopic": "",
"birthQos": "0",
"birthRetain": "false",
"birthPayload": "",
"birthMsg": {},
"closeTopic": "",
"closeQos": "0",
"closeRetain": "false",
"closePayload": "",
"closeMsg": {},
"willTopic": "",
"willQos": "0",
"willRetain": "false",
"willPayload": "",
"willMsg": {},
"userProps": "",
"sessionExpiry": ""
},
{
"id": "bcb68fe308c6d736",
"type": "knxUltimate-config",
"host": "10.10.9.254",
"port": "3671",
"physAddr": "1.1.2",
"hostProtocol": "TunnelUDP",
"suppressACKRequest": false,
"csv": "",
"KNXEthInterface": "Auto",
"KNXEthInterfaceManuallyInput": "",
"stopETSImportIfNoDatapoint": "stop",
"loglevel": "error",
"name": "KNX Gateway",
"localEchoInTunneling": true,
"delaybetweentelegrams": "50",
"delaybetweentelegramsfurtherdelayREAD": "1",
"ignoreTelegramsWithRepeatedFlag": false,
"autoReconnect": "yes"
}
]
Transparenz-Hinweis (Level 3)
Für diesen Beitrag wurden mir Produkte kostenfrei zur Verfügung gestellt! Es wurden keinerlei Bedingungen, Richtlinien oder Vorgaben bezüglich der Inhalte, welche ich in meiner Bewertung äußern darf, auferlegt.
Die Inhalte werden durch ein unabhängiges Placement im Video finanziert.