Node-RED: Helligkeitswert für Aktion auslesen

Hallo, ich möchte eine Lösung teilen, die ich für meine IN-8015 Full HD Kameras gefunden habe, um bei bestimmten Helligkeitswerten etwas zu machen.

Aufgabe: Die Kameras haben einen Helligkeitssensor für die Umschaltung Tag/Nacht und einen Bewegungsmelder. Wenn es nun dunkel ist und eine Bewegung erkannt wird, sollte eine Aktion ausgeführt werden (Licht an).

Problem: Mit dem Firmwarestand 4.1.2.48 wird der Helligkeitswert nur beim Start als MQTT auslesbarer Wert bereit gestellt. Danach ändert er sich leider nicht mehr.

Lösung: Der Tipp kam vom Support, dass man per HTTP API den Wert aktiv abfragen kann.

  • Als erste habe ich einen „Alarmserver“ in Node-RED mit einem „http in“-Knoten angelegt und in der Kamera konfiguriert. In den INSTAR Wikis gibt es schöne Beispiele, wie man bei mehreren Kameras den Payload z.B. noch um den Kameranamen erweitert. Den habe habe ich dann in einem „switch“-Knoten gefiltert und an einen „http request“-Knoten weitergeleitet. Dieser fragt dann die Adresse „http://kamera-ip/param.cgi?cmd=getsaradcstate“ ab. Das Ergebnis der Abfrage ist eine Zeichenkette der Art

    var saradc_state="71“;

  • Zweiter Schritt ist nun die Zahl aus dieser Zeichenkette zu extrahieren. Dazu habe ich einen „function“-Knoten genommen und mit folgenden Code gefüllt:

    let zerlegt = msg.payload.split('"');
    msg.payload = Number(zerlegt[1]);
    return msg;

  • Das Ergebnis ist eine Zahl, die nun noch zum Schluss in einen „switch“-Knoten geht, mit dem man dann den gewünschten Schwellwert für die Aktion abfragt.

Zusammengefasst wird immer nur bei einer Bewegung der Helligkeitswert aktiv von der Kamera abgefragt und dann entschieden, ob etwas gemacht werden muss oder nicht.

2 „Gefällt mir“