Homebridge in Node-Red für Apple Homekit
Q: Es wurde gezeigt, wie man Knöpfe und Schalter zu Homebridge hinzufügt, so dass ich nun in der Lage bin, meine Kamera über Homebridge in meiner Homekit App auf meinem iPhone zu steuern. Ist es möglich, dies mit Node-RED zu kombinieren, um kleine Skripte und Automatisierung schreiben ?
A: Ja! Beginnen Sie mit der Installation von node-red-contrib-homekit-bridged aus Ihrem Node-Red Palette Menü:
Suchen Sie nach homekit-bridged
und klicken Sie auf installieren:
Beachten Sie , dass Sie alternativ auch einen vorkonfigurierten Docker-Container aus dem Docker-HUB verwenden können.
Homebridge
Starten Sie nun das Homebridge-Gerät, das wir gemäß diesem Homebridge-Tutorial erstellt hatten:
docker run \
--net=host \
--name=homebridge \
--privileged \
--restart=always \
-e PUID=0 -e PGID=0 \
-e TZ=Europe/Berlin \
-e HOMEBRIDGE_CONFIG_UI=1 \
-e HOMEBRIDGE_CONFIG_UI_PORT=8080 \
-e HOMEBRIDGE_INSECURE=1 \
-v /opt/homebridge:/homebridge \
oznu/homebridge
Und melden Sie sich bei der Homebridge-Benutzeroberfläche auf Port 8080
mit dem Standard-Login admin/admin
an.
Erstellen eines Geräts in Node-Red
Ich beginne nun mit dem Import eines Beispielschalters nach Node-RED:
Ich muss jetzt meine Bridge-PIN von der Homebridge-Benutzeroberfläche kopieren:
Fügen Sie nun dem Homekit-Knoten eine neue Bridge hinzu:
Und kopieren Sie Ihre persönliche PIN in das Feld Pin Code:
Stellen Sie Ihre Änderungen an Node-RED bereit und probieren Sie die Inject-Knoten aus - sie injizieren entweder ein falsch
oder wahr
in Ihr Homebridge-Gerät:
Sie können die jetzt Registerkarte Accessories in Homebridge überprüfen. Es sollte eine Schaltfläche hinzugekommen sein, die den Zustand widerspiegelt, den Sie in Node-RED injizieren:
Praktisches Beispiel
Wir sind jetzt in der Lage, ein Paar MQTT-Ein-/Ausgangsknoten mit einem Homekit-Knoten zu verbinden und unsere Kamera über die MQTT-API zu steuern, wie in unserem früheren Tutorium. Verwenden wir nun Node-RED, um ein etwas komplexeres Skript zur Interaktion mit unserer Kamera und Homebridge zu schreiben.
Beginnen Sie mit dem Hinzufügen eines neuen Homekit-Knotens, aber wählen Sie diesmal MotionSensor als Service-Vorlage:
Der vollständige Flow sieht so aus und kann aus dem untenstehenden JSON-Code importiert werden:
[{"id":"783862e2.45477c","type":"homekit-service","z":"9a6bd5e7.967408","isParent":true,"bridge":"4132a771.850788","parentService":"","name":"MQTT Alarmserver","serviceName":"MotionSensor","topic":"","filter":false,"manufacturer":"INSTAR","model":"IN-8015 FHD","serialNo":"000001","cameraConfigVideoProcessor":"","cameraConfigSource":"","cameraConfigStillImageSource":"","cameraConfigMaxStreams":"","cameraConfigMaxWidth":"","cameraConfigMaxHeight":"","cameraConfigMaxFPS":"","cameraConfigMaxBitrate":"","cameraConfigVideoCodec":"","cameraConfigAudioCodec":"","cameraConfigAudio":false,"cameraConfigPacketSize":"","cameraConfigVerticalFlip":false,"cameraConfigHorizontalFlip":false,"cameraConfigMapVideo":"","cameraConfigMapAudio":"","cameraConfigVideoFilter":"","cameraConfigAdditionalCommandLine":"","cameraConfigDebug":false,"cameraConfigInterfaceName":"","characteristicProperties":"{}","x":559,"y":51,"wires":[["4d9c9a3c.69a0d4"],[]]},{"id":"8f35f643.8ca9e8","type":"mqtt in","z":"9a6bd5e7.967408","name":"Alarm Server","topic":"instar/10D1DC218F96/status/alarm/triggered","qos":"1","datatype":"auto","broker":"fbc900bc.b83bb","x":90,"y":51,"wires":[["7dc6d773.751818"]]},{"id":"7dc6d773.751818","type":"change","z":"9a6bd5e7.967408","name":"{\"MotionDetected\":true}","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"MotionDetected\":true}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":286,"y":51,"wires":[["783862e2.45477c","d7eb0fd1.103b5"]]},{"id":"d7eb0fd1.103b5","type":"delay","z":"9a6bd5e7.967408","name":"15s Delay","pauseType":"delay","timeout":"15","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":229,"y":97,"wires":[["d2b769a7.b94af8"]]},{"id":"d2b769a7.b94af8","type":"change","z":"9a6bd5e7.967408","name":"{\"MotionDetected\":false}","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"MotionDetected\":false}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":418,"y":97,"wires":[["783862e2.45477c"]]},{"id":"eeaf38d9.a69958","type":"switch","z":"9a6bd5e7.967408","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"{\"MotionDetected\":true}","vt":"str"},{"t":"eq","v":"{\"MotionDetected\":false}","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":864,"y":44,"wires":[["1b0e0bfe.ad8c94"],["a61efdfd.82e8f"]]},{"id":"b3e74d68.7f11c","type":"mqtt out","z":"9a6bd5e7.967408","name":"Preset Position","topic":"instar/10D1DC218F96/features/ptz/preset","qos":"1","retain":"false","broker":"fbc900bc.b83bb","x":1135,"y":40,"wires":[]},{"id":"4d9c9a3c.69a0d4","type":"json","z":"9a6bd5e7.967408","name":"","property":"payload","action":"","pretty":false,"x":740,"y":44,"wires":[["eeaf38d9.a69958"]]},{"id":"a61efdfd.82e8f","type":"change","z":"9a6bd5e7.967408","name":"Idle","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"0\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":985,"y":61,"wires":[["b3e74d68.7f11c"]]},{"id":"1b0e0bfe.ad8c94","type":"change","z":"9a6bd5e7.967408","name":"Alarm","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"val\":\"1\"}","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":984,"y":24,"wires":[["b3e74d68.7f11c"]]},{"id":"4132a771.850788","type":"homekit-bridge","z":"","bridgeName":"Homebridge","pinCode":"031-45-155","port":"","allowInsecureRequest":true,"manufacturer":"Default Manufacturer","model":"Default Model","serialNo":"Default Serial Number","customMdnsConfig":false,"mdnsMulticast":true,"mdnsInterface":"","mdnsPort":"","mdnsIp":"","mdnsTtl":"","mdnsLoopback":true,"mdnsReuseAddr":true,"allowMessagePassthrough":true},{"id":"fbc900bc.b83bb","type":"mqtt-broker","z":"","name":"192.168.2.117","broker":"192.168.2.117","port":"8883","tls":"70b691b5.003e5","clientid":"nodered","usetls":true,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"70b691b5.003e5","type":"tls-config","z":"","name":"8015Black","cert":"","key":"","ca":"","certname":"pcert.pem","keyname":"","caname":"","servername":"","verifyservercert":true}]
Links und rechts haben wir einen MQTT-In- und Out-Knoten mit den MQTT-Topics:
instar/10D1DC218F96/status/alarm/triggered
instar/10D1DC218F96/features/ptz/preset
Vergessen Sie nicht, die MQTT-ID - 10D1DC218F96
- durch die ID Ihrer persönlichen Kamera zu ersetzen!
Wenn ein Alarm ausgelöst wird, wird das MQTT-Alarmserver-Topic status/alarm/triggered von unserer Kamera aktualisiert. In diesem Fall senden wir eine {"MotionDetected":true}
Nachricht an den Homekit-Knoten, die nach 15s auf {"MotionDetected":false}
zurückfällt. Wenn die Bewegungserkennung auf wahr
eingestellt ist, bewegt sich unsere Kamera auf die voreingestellte Position 2 und wieder zurück auf 1, sobald die Erkennung wieder falsch
ist.