Wie man mit Alarmserver-Abfragen arbeitet
INSTAR IP-Kameras bieten eine Alarmserver-Funktion - 1080p-Modelle, 720p-Modelle - mit der Sie eine Anfrage an ein Heimautomationssystem in Ihrem Netzwerk senden können. So wird Ihr Smarthome benachrichtigt und es kann eine Reaktion ausgelöst werden.
In einem aktuellen Update haben wir Parameter (URL Queries) eingeführt, die an diesen HTTP-GET-Request angehängt werden können. Es stehen drei benutzerdefinierte Parameter zur Verfügung, sowie ein spezifizierter Parameter, der uns sagen kann, was den Alarm ausgelöst hat. Letzterer - genannt aktive
- kann die folgenden 10 Werte haben:
Es gibt eine neue Alarmserver API für WQHD 2K+ Kameras. Die einzelnen Schritte unten sind weiterhin gültig. Nur der URL Query nennt sich jetzt &trigger
anstelle von &active
, die Zahlenwerte haben sich geändert und ermöglichen jetzt das auswerten mehrerer, zeitgleicher Alarmauslöser! Sie finden eine Beispiel-Implementierung der MQTT- and HTTP-Alarmserver v2 API mit Node-RED hier.
- v1 API (alle Full HD Modelle und WQHD Modelle bis Firmware Version 3.4.0[883])
- Alarmbereich 1 ausgelöst:
&active=1
- Alarmbereich 2 ausgelöst:
&active=2
- Alarmbereich 3 ausgelöst:
&active=3
- Alarmbereich 4 ausgelöst:
&active=4
- Alarm-In / PIR ausgelöst:
&active=5
- Audio Alarm ausgelöst:
&active=6
- Bewegungserkennung & ausgelöst (Bereich 1):
&active=7
- Bewegungserkennung & ausgelöst (Bereich 2):
&active=8
- Bewegungserkennung & ausgelöst (Bereich 3):
&active=9
- Bewegungserkennung & ausgelöst (Bereich 4):
&active=10
- Manual trigger (cmd=pushhostalarm):
&active=99
->{"val":"99"}
- Alarmbereich 1 ausgelöst:
Wir wollen nun einen Webhook in Node-RED - als Platzhalter für eine der vielen verfügbaren Smarthome-Lösungen - bauen und diesen Webhook je nach URL Query unterschiedliche Aktionen auslösen lassen.
Setup
- Erste Kamera: IP=192.168.2.116, port=80, name=frontdoor, login=admin/instar
- Zweite Kamera: IP=192.168.2.117, port=80, name=garden, login=admin/instar
- Node-RED Server: IP=192.168.2.48, port=1880
Was wir erreichen wollen
Wenn unsere erste Kamera ausgelöst wird, möchten wir, dass sie den Node-RED Webhook kontaktiert, sich als frontdoor identifiziert und wenn der Alarm durch eine Audioerkennung (&active=6
) ausgelöst wurde, wollen wir, dass die Kamera zu der gespeicherten Position 3 fährt - von der wir schätzen, dass das Geräusch gekommen sein wird. Wenn der Alarm durch die interne Bewegungserkennung ausgelöst wurde (also die Abfrage nicht den Parameter &active=6
übergeben hat), wollen wir unsere zweite Kamera garden kontaktieren und sie herumschwenken lassen auf Position 2, um den Bereich zu überprüfen, in dem die Bewegung erkannt wurde.
Und umgekehrt - wenn unsere zweite Kamera einen Alarm auslöst, soll sie den Node-RED Webhook kontaktieren, sich als garden identifizieren und im Falle eines Audioalarms in die Position 3 gehen. Wenn der Alarmauslöser nicht die Audioerkennung war, sollte stattdessen die frontdoor Kamera kontaktiert werden und in die Position 2 gehen.
Um unser Setup nach einem Alarmauslöser zurückzusetzen, können wir die Position 1 auf unsere Kameras als Park Position einstellen. Oder wir senden aktiv einen Befehl an unsere Kamera, um in die Ruheposition zurückzukehren - mit einer Verzögerung unserer Wahl. Das läßt sich dann auch mit einer manuellen Aufnahme kombinieren.
Siehe Node-RED Smarthome Übersicht für einen Anwendungsfall.
Node-RED Flow
In diesem Ablauf richten wir einen Webhook unter der URL /as-webhook/
ein - damit wir ihn unter der IP/Port unseres Node-RED-Servers + URL erreichen können. In diesem Fall ist dies: http://192.168.2.48:1880/as-webhook/
:
Wenn wir eine GET-Anfrage über diese URL erhalten, müssen wir nun die damit gesendeten URL-Parameter raussuchen. Zuerst suchen wir nach einem Query namens Kamera
und sehen, ob dieser den Wert frontdoor
oder garden
hat, um die Kamera zu identifizieren, die uns kontaktiert hat.
Dann müssen wir nach dem Parameter active
suchen, um zu schauen ob der Alarm durch den Audioalarm - &active=6
- ausgelöst wurde oder nicht. Wenn ja, müssen wir den CGI-Befehl zurückgeben, um eine Videoaufzeichnung zu starten und die Kamera zur Position 3 zu bewegen. Andernfalls senden wir den CGI-Befehl, um sich auf Position 2 zu bewegen und die Aufnahme zu starten zur anderen Kamera.
Und nach einer bestimmten Zeit - ich werde 15s wählen - müssen wir den Befehl senden, die Aufnahme zu stoppen und zur Position 1 zurückzukehren.
Für unsere erste Kamera lauten diese Befehle wie folgt:
ALARM AKTION
http://192.168.2.116/param.cgi?cmd=manualrec&-act=on&-time=60&cmd=preset&-act=goto&-number=2&-usr=admin&-pwd=instar
// if&active=6
http://192.168.2.117/param.cgi?cmd=manualrec&-act=on&-time=60&cmd=preset&-act=goto&-number=1&-usr=admin&-pwd=instar
// if not&active=6
RESET
http://192.168.2.116/param.cgi?cmd=manualrec&-act=off&cmd=preset&-act=goto&-number=0&-usr=admin&-pwd=instar
// if&active=6
http://192.168.2.117/param.cgi?cmd=manualrec&-act=off&cmd=preset&-act=goto&-number=0&-usr=admin&-pwd=instar
// if not&active=6
Alarmserver Konfiguration
Der Alarmserver in unserer Kamera muss wie folgt konfiguriert werden:
Für die andere Kamera müssen wir nur den Kameranamen auf camera = frontdoor
setzen.
Jedes Mal, wenn der Alarm auf unserer Kamera ausgelöst wird, kontaktiert sie jetzt unseren Node-RED Webhook und sendet sowohl ihren Namen als auch den Alarmauslöser.
Prüfung
Mit dem Inject Node können Sie testen, ob Node-RED korrekt eingerichtet ist. Durch Anklicken des Knotens senden Sie eine GET-Anfrage an Ihren Webhook senden und übertragen dabei die folgenden Query Parameter:
Importieren des Flows in Node-RED
Den kompletten Flow können Sie über den untenstehenden Link herunterladen:
Laden Sie diese JSON-Daten in einen Texteditor herunter und bearbeiten Sie die Pparameter - IP-Adressen, Logins, usw. - damit diese Ihren persönlichen Setup entsprechen. Sie können dafür einfach die Suchen & Ersetzen Funktion Ihres Text Editors nutzen.
Um die Daten in Ihre Node-RED-Installation zu importieren, öffnen Sie das Hamburger-Menü oben rechts, wählen Sie Import und Clipboard:
Kopieren und fügen Sie die Daten in das Textfeld ein und klicken Sie auf Import:
Und fertig!