INSTAR Deutschland GmbHINSTAR Deutschland GmbH

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ü:

Homekit in Node-RED

Suchen Sie nach homekit-bridged und klicken Sie auf installieren:

Homekit in Node-RED

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:

Homekit in Node-RED

Ich muss jetzt meine Bridge-PIN von der Homebridge-Benutzeroberfläche kopieren:

Homekit in Node-RED

Fügen Sie nun dem Homekit-Knoten eine neue Bridge hinzu:

Homekit in Node-RED

Und kopieren Sie Ihre persönliche PIN in das Feld Pin Code:

Homekit in Node-RED

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:

Homekit in Node-RED

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:

Homekit in Node-RED

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:

Homekit in Node-RED

Der vollständige Flow sieht so aus und kann aus dem untenstehenden JSON-Code importiert werden:

Homekit in Node-RED

[{"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.

Homekit in Node-RED