Nutzen Sie XiaoMi Home Hardware ohne die Cloud
- ZigBee-Kommunikation ohne proprietären Hub
- Verwenden von Zigbee-Geräten zur Steuerung von INSTAR IP-Kameras in Node-RED
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.
- 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.
- Installieren Sie den SmartRF Flash Programmer (Nicht V2!). Diese Software ist kostenlos, erfordert jedoch ein Texas Instruments-Konto, um heruntergeladen zu werden.
- 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.
- Verbinden Sie
CC debugger
-->Downloader cable CC2531
-->CC2531 USB sniffer
.
- Stecken Sie Beide - den
CC2531 USB Sniffer
und denCC Debugger
- an einen USB Steckplatz an Ihrem PC ein. - 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.
- Downloaden Sie danach die Firmware CC2531ZNP-Prod.hex
- Starten Sie den SmartRF Flash Programmer, richten Sie ihn wie unten gezeigt ein und drücken Sie
Perform actions
.
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
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
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
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
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
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
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 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
Speichern Sie die Datei und überprüfen Sie, ob die Konfiguration funktioniert:
sudo systemctl daemon-reload
sudo systemctl start zigbee2mqtt
systemctl status zigbee2mqtt.service
Nachdem nun alles funktioniert, möchten wir, dass systemctl
beim Booten automatisch zigbee2mqtt
startet.
sudo systemctl enable zigbee2mqtt.service
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:
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:
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:
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):
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:
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"}
:
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:
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.