Nutzen Sie XiaoMi Home Hardware ohne die Cloud

ZigBee-Kommunikation ohne proprietären Hub

ZigBee ist eine Spezifikation für eine Reihe von Kommunikationsprotokollen, die zum Erstellen von privaten Netzwerken mit kleinen digitalen Funkgeräten mit geringem Stromverbrauch verwendet wird. Zigbee ist ein idealer drahtloses Ad-hoc-Netzwerk Standard für Smarthome Sensoren.

Die Zigbee2MQTT Brücke erlaubt es Ihnen unterstützte ZigBee Geräte ohne die normalerweise erzwungene Hub oder Vendor Cloud Bindung zu vernetzen. Zu den Geräten, die Sie steuern können, gehören Smart (ZigBee) Lampen von Belkin, IKEA, OSRAM und Philips sowie Smart Sensoren von SmartThings und Xiaomi.

In diesem Tutorial werden wir die ZigBee2MQTT-Brücke zusammen mit Smart Home Xiaomi-Sensoren - auf der Hardwareseite - und Node-RED und Home Assistant - auf der Software Seite - installieren und darüber unsere INSTAR IP Kamera kontrollieren.

Die ZigBee-Brücke besteht aus einem ZigBee-Sniffer-Modul und einer in Node.js geschriebenen Steuerungssoftware. Sie ermöglicht es die ZigBee Meldungen der Sensoren über das MQTT Protokoll in unser lokales Netzwerk einzuspeisen. Auf diese Weise können Sie Ihre Zigbee-Geräte in die von Ihnen verwendete Smart Home-Infrastruktur integrieren.

Benötigte Hardware:

  • CC Debugger
  • CC2531 USB Sniffer
  • Downloader Kabel CC2531
  • Linux PC oder Raspberry Pi

Der Debugger, der Sniffer und das Verbindungskabel können direkt über Online-Shops wie Aliexpress bestellt werden.

Der Debugger und das Kabel werden nur einmal zum Flashen der Firmware auf den Stick verwendet. Es gibt aber auch einen alternativen Weg stattdessen ein Arduino-Board zu verwenden.

Die Brücke einrichten

Die folgende Beschreibung zeigt Ihnen, wie Sie die Firmware unter Windows 10 auf Ihren CC2531-Stick flashen - für Linux oder macOS folgen Sie bitee diesem Link.

  1. Installieren Sie den SmartRF Flash Programmer (Nicht V2!). Diese Software ist kostenlos, erfordert jedoch ein Texas Instruments-Konto, um heruntergeladen zu werden.

Zigbee2MQTT

  1. Installieren Sie danach den CC Debugger Treiber auf Ihrem PC. Stellen Sie vor dem Fortfahren sicher, dass der CC Debugger-Treiber ordnungsgemäß installiert wurde. Falls der CC-Debugger nicht richtig erkannt wird, können Sie versuchen den Treiber manuell installieren.

Zigbee2MQTT

  1. Verbinden Sie CC debugger --> Downloader cable CC2531 --> CC2531 USB sniffer.

Zigbee2MQTT

  1. Stecken Sie Beide - den CC2531 USB Sniffer und den CC Debugger - an einen USB Steckplatz an Ihrem PC ein.
  2. Wenn die LED am CC-Debugger ROT ist, drücken Sie die Reset-Taste am CC-Debugger. Das Licht auf dem CC-Debugger sollte jetzt GRÜN leuchten. Falls nicht, verwenden Sie das CC Debugger Benutzerhandbuch um eine Lösung für das Problem zu finden.
  3. Downloaden Sie danach die Firmware CC2531ZNP-Prod.hex
  4. Starten Sie den SmartRF Flash Programmer, richten Sie ihn wie unten gezeigt ein und drücken Sie Perform actions.

Zigbee2MQTT

Zigbee2MQTT

Starten der Brücke

Nachdem Sie Ihren CC2531 USB-Sniffer mit der Firmware CC2531ZNP-Prod.hex geflasht haben, können Sie den CC Debugger und das Verbindungskabel entfernen und den Sniffer an unseren Linux-Computer anschließen. In dem folgenden Beispiel haben wir den Core i3 Mini PC mit Debian Stretch verwendet, den wir bereits für die MotionEye Installation genutzt haben.

Für alternative Installationswege folgen Sie bitte diesem Link.

Beachten Sie bitte: Das Betreiben der Brücke unter Raspbian Jessie scheint nicht zu funktionieren.

Ermitteln Sie die Position des CC2531 USB-Sniffer und überprüfen Sie die Benutzerberechtigungen

Zuerst müssen wir den Pfad des CC2531 USB-Sniffer ermitteln. Verbinden Sie den CC2531 USB mit Ihrem Raspberry Pi. Meistens ist der Pfad zum CC2531 /dev/ttyACM0. Dies kann überprüft werden durch:

ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 May 16 19:15 /dev/ttyACM0  # <-- CC2531 on /dev/ttyACM0

Zigbee2MQTT

Alternativ kann das Gerät auch durch eine ID abgebildet werden. Dies kann praktisch sein, wenn mehrere serielle Geräte an Ihr Pi angeschlossen sind. Im folgenden Beispiel lautet der Pfad des Geräts: /dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0018E32D5B-if00

ls -l /dev/serial/by-id
total 0
lrwxrwxrwx 1 root root 13 Nov 24 18:59 usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0018E32D5B-if00 -> ../../ttyACM0

Zigbee2MQTT

Installation

Um die ZigBee2MQTT Brücke auszuführen müssen wir zuerst Node.js und Git installieren:

sudo apt update
sudo apt install git

Sie können bestätigen, dass Sie Git und Node korrekt installiert haben, indem Sie die folgenden Befehle ausführen:

git --version
node -v

Zigbee2MQTT

Klonen Sie dann ZigBee2MQTT von Github und ändern Sie den Besitzer des Verzeichnisses /opt/zigbee2mqtt in Ihren Linux-Standardbenutzer - in Fall unten ist dies nodeadmin:

sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
sudo chown -R nodeadmin:nodeadmin /opt/zigbee2mqtt

Wechseln Sie dann in das Verzeichnis und installieren Sie alle Abhängigkeiten mit npm:

cd /opt/zigbee2mqtt
npm install

Zigbee2MQTT

Konfiguration

Bevor wir zigbee2mqtt starten können, müssen wir die Datei configuration.yaml bearbeiten. Diese Datei enthält die Konfiguration, die von zigbee2mqtt verwendet wird. Öffnen Sie die Konfigurationsdatei:

nano /opt/zigbee2mqtt/data/configuration.yaml

Zigbee2MQTT

Wir nutzen einen lokalen Mosquitto MQTT Server den wir bereits mit einem Client-Login konfiguriert haben, das hier hinzugefügt werden muss. Außerdem nutzen wir eine lokale Installation von Home Assistant dass wir direkt mit der ZigBee2MQTT-Brücke kommunizieren können:

# Home Assistant integration (MQTT discovery)
homeassistant: true

# allow new devices to join
permit_join: true

# MQTT settings
mqtt:
  # MQTT base topic for zigbee2mqtt MQTT messages
  base_topic: zigbee2mqtt
  # MQTT server URL - change this to an local IP if your are running you server on a different device
  server: 'mqtt://localhost'
  # MQTT server authentication, uncomment if required:
  user: debian
  password: my_password

# Serial settings
serial:
  # Location of CC2531 USB sniffer
  port: /dev/ttyACM0

Stellen Sie sicher, dass allow_join auf true gesetzt ist, damit neue Geräte hinzugefügt werden können. Es kann auf false gesetzt werden, sobald alle Ihre Zigbee-Geräte integriert sind.

Für die serielle Schnittstelle können Sie den Pfad des CC2531 USB Sniffer verwenden, den wir als /dev/ttyACM0 oder /dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0018E32D5B-if00 bestimmt haben - beide können austauschbar verwendet werden (die Position kann in Ihrem Fall abweichen!).

ZigBee2MQTT Ausführe

Nachdem wir nun alles korrekt eingerichtet haben, können Sie zigbee2mqtt direkt von unserer Konsole aus starten, um zu sehen, ob Fehlermeldungen angezeigt werden:

cd /opt/zigbee2mqtt
sudo npm start

Zigbee2MQTT

Sie können sehen, dass der Dienst ausgeführt wird, mit dem lokalen MQTT-Server verbunden ist und eine Nachricht an zigbee2mqtt/bridge/state mit der Payload online veröffentlicht hat. Wir können das Programm MQTT.fx verwenden, um zu überprüfen, ob die Nachricht von unserem Mosquitto-Server empfangen wurde:

Zigbee2MQTT

ZigBee2MQTT als Dienst Ausführen

Um zigbee2mqtt als Dienst auszuführen und automatisch beim Booten zu starten, führen wir zigbee2mqtt mit systemctl aus:

sudo nano /etc/systemd/system/zigbee2mqtt.service

Fügen Sie dieser Datei Folgendes hinzu, um die index.js-Datei von der zigbee2mqtt-Bridge innerhalb der Node-Laufzeitumgebung automatisch auszuführen:

[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
ExecStart=/usr/bin/node /opt/zigbee2mqtt/index.js
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=zigbee2mqtt
Restart=always
 # Restart service after 10 seconds if node service crashes
 RestartSec=10

[Install]
WantedBy=multi-user.target

Zigbee2MQTT

Speichern Sie die Datei und überprüfen Sie, ob die Konfiguration funktioniert:

sudo systemctl daemon-reload
sudo systemctl start zigbee2mqtt
systemctl status zigbee2mqtt.service

Zigbee2MQTT

Nachdem nun alles funktioniert, möchten wir, dass systemctl beim Booten automatisch zigbee2mqtt startet.

sudo systemctl enable zigbee2mqtt.service

Zigbee2MQTT

Einige Tipps, die später hilfreich sein können:

# Stoppen von zigbee2mqtt
sudo systemctl stop zigbee2mqtt

# Starten von zigbee2mqtt
sudo systemctl start zigbee2mqtt

# Das zigbee2mqtt Log ansehen
sudo journalctl -u zigbee2mqtt.service -f

Aktualisieren Sie zigbee2mqtt auf die neueste Version

# Stoppen Sie zigbee2mqtt und gehen Sie in das Verzeichnis
sudo systemctl stop zigbee2mqtt
cd /opt/zigbee2mqtt

# Backup der Konfiguration
cp -R data data-backup

# Update
git checkout HEAD -- npm-shrinkwrap.json
git pull
rm -rf node_modules
npm install

# Konfiguration wieder herstellen
cp -R data-backup/* data
rm -rf data-backup

# Starten von zigbee2mqtt
sudo systemctl start zigbee2mqtt

Zigbee Geräte verbinden

Die Auswahl der Geräte, die Sie mit der Zigbee2mqtt-Bridge verwenden können wächst stetig (hier gibt es alternative Anweisungen)). In diesem Tutorial werden wir 3 XiaoMi Mi Home Sensoren hinzufügen - einen Temperatur & Luftfeuchtigkeit Sensor, einen Smart-Schalter und einen Bewegungsmelder.

IMPORTANT: Bevor Sie beginnen, stellen Sie sicher, dass allow_join: true in Ihrer configuration.yaml festgelegt ist. Andernfalls können keine neuen Geräte mit dem Netzwerk verbunden werden! Stellen Sie außerdem sicher, dass die ZigBee2MQTT-Bridge ausgeführt wird.

Wir beginnen zuerst mit dem Temperatur- und Luftfeuchtigkeitssensor, an dessen Seite sich ein Pairing-Button befindet. Drücken Sie die Taste etwa 5 Sekunden lang - die blue-LED beginnt zu blinken: In meinem Fall blinkt sie langsam in 3-maliger Folge. Nach einigen Sekunden wurde das Blinken schneller und stoppte danach. Das Gerät war danach mit der ZigBee Bridge gekoppelt.

Die Kopplung ist in der Protokolldatei /opt/zigbee2mqtt/data/log/ ersichtlich:

info: Connecting with device...
info: MQTT publish, topic: 'zigbee2mqtt/bridge/log', payload: '{"type":"pairing","message":"connecting with device"}'
info: Device incoming...
info: MQTT publish, topic: 'zigbee2mqtt/bridge/log', payload: '{"type":"pairing","message":"device incoming"}'
info: New device with address 0x00158d00023a21c8 connected!
info: MQTT publish, topic: 'zigbee2mqtt/bridge/log', payload: '{"type":"device_connected","message":"0x00158d00023a21c8"}'
info: MQTT publish, topic: 'homeassistant/sensor/0x00158d00023a21c8/temperature/config', payload: '{"unit_of_measurement":"°C","device_class":"temperature","value_template":"{{ value_json.temperature }}","json_attributes":["linkquality","battery","voltage"],"state_topic":"zigbee2mqtt/0x00158d00023a21c8","availability_topic":"zigbee2mqtt/bridge/state","name":"0x00158d00023a21c8_temperature","unique_id":"0x00158d00023a21c8_temperature_zigbee2mqtt"}'
info: MQTT publish, topic: 'homeassistant/sensor/0x00158d00023a21c8/humidity/config', payload: '{"unit_of_measurement":"%","device_class":"humidity","value_template":"{{ value_json.humidity }}","json_attributes":["linkquality","battery","voltage"],"state_topic":"zigbee2mqtt/0x00158d00023a21c8","availability_topic":"zigbee2mqtt/bridge/state","name":"0x00158d00023a21c8_humidity","unique_id":"0x00158d00023a21c8_humidity_zigbee2mqtt"}'

Kurz darauf kamen die Sensordaten:

info: MQTT publish, topic: 'zigbee2mqtt/0x00158d00023a21c8', payload: '{"temperature":26.74,"linkquality":55,"humidity":54.1,"battery":100,"voltage":3035}'

So weit, ist es gut. Die device ID war etwas schwer zu lesen und zu merken: 0x00158d00023a21c8 Zum Glück kann dies in eingestellt werden /opt/zigbee2mqtt/data/configuration.yaml:

devices:
  '0x00158d00023a21c8':
    friendly_name: 'temp_hum_sensor'
    retain: false

Alle gekoppelten Geräte werden am Ende der Konfigurationsdatei aufgeführt. Ändern Sie einfach den friendly_name in etwas, das für Menschen lesbar ist. Denken Sie daran, dass dies auch das MQTT-Topic ändert, das die Zigbee-Brücke zum Veröffentlichen der Sensordaten verwendet:

info: MQTT publish, topic: 'zigbee2mqtt/temp_hum_sensor', payload: '{"temperature":26.33,"linkquality":78,"humidity":54.32,"battery":99,"voltage":3005}'

Das topic hat sich jetzt von zigbee2mqtt/0x00158d00023a21c8 auf zigbee2mqtt/temp_hum_sensor geändert!

Die Kopplung des Smart Buttons und des Bewegungsmelders erwies sich jedoch als schwieriger. Wenn Sie die Pairing-Taste gedrückt halten, die hier nur mit einem Metallstift zu erreichen ist, ergab sich dasselbe Muster. Die blue LED begann zu blinken - erst langsam, dann schnell. Ich erhielt jedoch immer Zeitüberschreitungen für beide Geräte - das eine identifizierte sich als 0x00158d00023d229c und das andere als 0x00158d00020b3dff - für den Pairing-Vorgang in /opt/zigbee2mqtt/data/log/:

error: Cannot get the Node Descriptor of the Device: 0x00158d00023d229c (Error: Timed out after 10000 ms)
error: Cannot get the Node Descriptor of the Device: 0x00158d00020b3dff (Error: Timed out after 10000 ms)

Man kann hier eine Anleitung finden die besagt, dass Sie die Pairing-Taste 5 Sekunden lang gedrückt halten müssen (bis die blaue LED zu blinken beginnt), dann loslassen und die Taste wiederholt (1s-Intervall) drücken müssen. Fühlt sich merkwürdig an, hat aber tatsächlich funktioniert. Das Überprüfen der Protokolldatei zeigt, dass ein Occupancy Sensor (Bewegungsmelder) mit der ID 0x00158d00020b3dff hinzugekommen ist:

info: New device with address 0x00158d00020b3dff connected!
info: MQTT publish, topic: 'zigbee2mqtt/bridge/log', payload: '{"type":"device_connected","message":"0x00158d00020b3dff"}'
info: MQTT publish, topic: 'homeassistant/binary_sensor/0x00158d00020b3dff/occupancy/config', payload: '{"payload_on":true,"payload_off":false,"value_template":"{{ value_json.occupancy }}","device_class":"motion","json_attributes":["linkquality","battery","voltage"],"state_topic":"zigbee2mqtt/0x00158d00020b3dff","availability_topic":"zigbee2mqtt/bridge/state","name":"0x00158d00020b3dff","unique_id":"0x00158d00020b3dff_occupancy_zigbee2mqtt"}'
info: MQTT publish, topic: 'zigbee2mqtt/0x00158d00020b3dff', payload: '{"occupancy":true,"linkquality":131}'
info: Device incoming...
info: MQTT publish, topic: 'zigbee2mqtt/bridge/log', payload: '{"type":"pairing","message":"device incoming"}'
info: MQTT publish, topic: 'zigbee2mqtt/0x00158d00020b3dff', payload: '{"occupancy":true,"linkquality":128}'

Dasselbe für den Smart Button und ein neues Gerät mit der ID 0x00158d00023d229c wurde hinzugefügt - ausgezeichnet!

info: New device with address 0x00158d00023d229c connected!
info: MQTT publish, topic: 'zigbee2mqtt/bridge/log', payload: '{"type":"device_connected","message":"0x00158d00023d229c"}'
info: MQTT publish, topic: 'homeassistant/sensor/0x00158d00023d229c/click/config', payload: '{"icon":"mdi:toggle-switch","value_template":"{{ value_json.click }}","json_attributes":["linkquality","battery","voltage","action","duration"],"force_update":true,"state_topic":"zigbee2mqtt/0x00158d00023d229c","availability_topic":"zigbee2mqtt/bridge/state","name":"0x00158d00023d229c","unique_id":"0x00158d00023d229c_click_zigbee2mqtt"}'
info: Device incoming...
info: MQTT publish, topic: 'zigbee2mqtt/bridge/log', payload: '{"type":"pairing","message":"device incoming"}'
info: MQTT publish, topic: 'zigbee2mqtt/0x00158d00020b3dff', payload: '{"occupancy":false,"linkquality":128}'
info: MQTT publish, topic: 'zigbee2mqtt/0x00158d00023d229c', payload: '{"click":"single","linkquality":94}'
info: MQTT publish, topic: 'zigbee2mqtt/0x00158d00023d229c', payload: '{"click":"double","linkquality":120}'
info: MQTT publish, topic: 'zigbee2mqtt/0x00158d00023d229c', payload: '{"click":"triple","linkquality":120}'
info: MQTT publish, topic: 'zigbee2mqtt/0x00158d00023d229c', payload: '{"click":"quadruple","linkquality":115}'
info: MQTT publish, topic: 'zigbee2mqtt/0x00158d00023d229c', payload: '{"click":"long","linkquality":118}'
info: MQTT publish, topic: 'zigbee2mqtt/0x00158d00023d229c', payload: '{"click":"long_release","duration":1236,"linkquality":118}'

Wieder können wir einstellen, dass in /opt/zigbee2mqtt/data/configuration.yaml ein von Menschen lesbarer Name anstelle der ID in angezeigt wird:

devices:
  '0x00158d00023a21c8':
    friendly_name: 'temp_hum_sensor'
    retain: false
  '0x00158d00020b3dff':
    friendly_name: 'motion_pir_sensor'
    retain: false
  '0x00158d00023d229c':
    friendly_name: 'smart_button'
    retain: false

Die neuen Namen werden nun für die entsprechenden MQTT-Themen verwendet:

info: MQTT publish, topic: 'zigbee2mqtt/motion_pir_sensor', payload: '{"occupancy":true,"linkquality":94,"battery":99,"voltage":3025}'
info: MQTT publish, topic: 'zigbee2mqtt/temp_hum_sensor', payload: '{"temperature":27.79,"linkquality":110,"humidity":55.92,"battery":99,"voltage":3005}'
info: MQTT publish, topic: 'zigbee2mqtt/smart_button', payload: '{"battery":100,"voltage":3042,"linkquality":68,"click":"single"}'
info: MQTT publish, topic: 'zigbee2mqtt/smart_button', payload: '{"battery":100,"voltage":3042,"linkquality":60,"click":"double"}'
info: MQTT publish, topic: 'zigbee2mqtt/smart_button', payload: '{"battery":100,"voltage":3042,"linkquality":63,"click":"triple"}'
info: MQTT publish, topic: 'zigbee2mqtt/smart_button', payload: '{"battery":100,"voltage":3042,"linkquality":57,"click":"quadruple"}'
info: MQTT publish, topic: 'zigbee2mqtt/smart_button', payload: '{"battery":100,"voltage":3042,"linkquality":57,"click":"long"}'
info: MQTT publish, topic: 'zigbee2mqtt/smart_button', payload: '{"battery":100,"voltage":3042,"linkquality":65,"click":"long_release","duration":1015}'

Beachten Sie, dass der Bewegungsmelder eine Payload von true oder false sendet, je nachdem, ob eine Bewegung erkannt wurde oder nicht. Der Temperatur- und Feuchtigkeitssensor sendet nur Zahlenwerte für Temperatur und Luftfeuchtigkeit. Der Smart Button sendet Click-Events und kann zwischen Single-, Double-, Triple-, Quadruple- und Long / Long_Release-Klicks unterscheiden.

Verwenden von Zigbee-Geräten zur Steuerung von INSTAR IP-Kameras in Node-RED

Wir haben jetzt die Zigbee Bridge eingerichtet, Zigbee-Sensoren angeschlossen und sichergestellt, dass die Nachrichten an unseren Mosquitto MQTT-Server gesendet werden. Wir haben auch herausgefunden, welche Topics unsere Bridge für die einzelnen Sensoren verwendet, um ihre Meldungen zu veröffentlichen - zigbee2mqtt/motion_pir_sensor, zigbee2mqtt/temp_hum_sensor und zigbee2mqtt/smart_button - und welche Payload wir zu erwarten haben.

Wir können jetzt das Programm MQTT.fx verwenden, um zu überprüfen, ob die Nachricht von unserem Mosquitto-Server empfangen wurde:

Zigbee2MQTT

Bei jeder Zustandsänderung sendet der Sensor eine Zigbee-Nachricht an unsere Bridge, die die Payload dann an unseren Mosquitto-Server weiterleitet - perfekt!

Wir können jetzt Node-RED starten - das entweder unter Windows 10, auf einem Raspberry Pi oder einem Debian Linux Server läuft - und MQTT Nodes mit Abonnements für alle MQTT topics hinzufügen:

Zigbee2MQTT

Verbinden Sie alle 3 mit einem Debug-Knoten und klicken Sie auf Deploy. Klicken Sie auf die Smartbutton, wärmen Sie den Temp-Sensor auf und lösen Sie die Bewegungserkennung aus. Die MQTT-Meldungen werden im Debug-Fenster in Node-RED angezeigt:

Zigbee2MQTT

Fügen Sie den MQTT-Eingang zu einem vorhandenen Flow hinzu

In der folgenden Sequenz verwenden wir die Eingabe des Smart Buttons, um die Alarmbereiche unserer Kameras zu schalten - wir haben bereits dieselbe Sequenz für die Amazon Alexa Integration verwendet (Der vollständige Flow können Sie in unserem Home Assistant Tutorial finden):

Zigbee2MQTT

Sie können den folgenden JSON-Code kopieren und in Node-RED importieren (Wie importiere ich Flows in Node-RED?):

[{"id":"ebde9a4c.90efe8","type":"link out","z":"17b43655.05bd3a","name":"","links":["57b22bf7.0e2874","5eb0d369.b3b15c","b5ce97db.b3f4f8","f335d7f4.4bbe18"],"x":1308,"y":100,"wires":[]},{"id":"accb31dd.a130c","type":"mqtt in","z":"17b43655.05bd3a","name":"Wireless Button","topic":"zigbee2mqtt/smart_button","qos":"1","broker":"40415d07.67dd94","x":780,"y":100,"wires":[["2537690e.6230d6"]]},{"id":"2537690e.6230d6","type":"json","z":"17b43655.05bd3a","name":"","property":"payload","action":"","pretty":false,"x":929,"y":100,"wires":[["17df313d.2e7aff"]]},{"id":"17df313d.2e7aff","type":"change","z":"17b43655.05bd3a","name":"single / double","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.click","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1076,"y":100,"wires":[["1f97ee5b.dfc642"]]},{"id":"1f97ee5b.dfc642","type":"string","z":"17b43655.05bd3a","name":"","methods":[{"name":"replaceAll","params":[{"type":"str","value":"single"},{"type":"str","value":"{\"val\" : \"on\"}"}]},{"name":"replaceAll","params":[{"type":"str","value":"double"},{"type":"str","value":"{\"val\" : \"off\"}"}]}],"prop":"payload","propout":"payload","object":"msg","objectout":"msg","x":1226,"y":100,"wires":[["ebde9a4c.90efe8"]]},{"id":"40415d07.67dd94","type":"mqtt-broker","z":"","name":"Debian Mosquitto","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

Der MQTT-Knoten gibt die Nachricht von unserem Button als String aus. Wir müssen es zuerst mit einem JSON-Knoten in ein Javascript-Objekt umwandeln.

Als nächstes folgt ein Change Node, der die Message Payload in den Wert von Click ändert. Wie wir oben erfahren haben, kann dieser Wert entweder single, double, triple, quadruple, long oder release sein:

Zigbee2MQTT

Danach folgt ein String-Knoten (dieser Knotentyp muss manuell installiert werden) - suchen Sie nach node-red-contrib-string). Dieser sucht nach der Payload single oder double und ersetzt sie durch etwas, das wir benötigen, um den unten folgenden Flow unten auszulösen. In diesem Fall benötigen wir einen JSON-Ausdruck, der entweder einen Wert auf on oder off setzt - {"val" : "on"} / {"val" : "off"}:

Zigbee2MQTT

Und nicht zuletzt fügen wir einen Link Node hinzu, um ihn an alle 4 Sequenzen für die für die 4 Alarmbereiche anzuschließen. Bei jedem Klick auf die Wireless-Schaltfläche werden nun alle Bereiche aktiviert. Ein Doppelklick deaktiviert sie:

Zigbee2MQTT

Wir haben einen Debug Node an den MQTT-Eingang angehängt, um die durch den Wireless-Button gegebene Eingabe zu visualisieren - Note -, dass nur der single - und double - Klick die Alarmbereichssequenzen auslösen - die übrigen Eingangsoptionen können für andere Funktionen verwendet werden.