ich habe bei meiner Kamera einen Audio Alarm mit der Sensivität 6 eigestellt, sobald mein Sohn schlafen geht.
Wenn nun ein Audio Alarm erkannt wird, wird dieser immer wieder ausgelöst.
Ich habe somit nachher 25 Benachrichtigungen über OPENHAB auf meine Handy, da der Alarm immer wieder auslöst und nicht für eine Zeit einfach auf An bleibt.
Bei einigen anderen Kameras, gibt es die Funktion „Anti Dither“. Hiermit wird die Alarmdauer festgelegt, bis der Alarm Schalter wieder auf Aus schaltet und in dieser Zeit kein neuer Alarm auftreten kann.
die Kamera hat bei der Push Benachrichtigung und beim Emailversand ein Rhuheintervall von 60s. D.h. nach einem Alarm bekommt man erstmal keine Benachrichtigungen für die nächsten Minute.
Mit Skripten in Openhab kenne ich mich nicht so gut aus. Aber in Node-RED kann man beispielsweise den MQTT Alarmserver der Kamera einbinden. Dieser alarmiert einmal pro Sekunde solange Bewegung erkannt wird. Man kann dann dieses Signal nutzen um das Ruheintervall immer wieder zurückzusetzen.
Zum Beispiel:
ein Alarm kommt rein
Node-RED sendet eine Benachrichtigung
Die Benachrichtigung wird für eine Minute deaktiviert
Jeder weitere Alarm setzt dieses Intervall wieder auf 1 Minute zurück
Sowas in der Art sollte auch in OpenHAB möglich sein.
ich nutze nicht die interne Benachrichtigungsfunktion sondern werte den Kanal der Kamera aus, der auf An schaltet wenn ein Audio Alarm erkannt wird. Dieser schaltet halt ohne Unterbrechung immer wieder auf An. Ist das richtig?
Diese Kanal kann man in den Settings also nicht auf eine Verzögerung stellen, sodass dieser bei Auslösung erstmal 1 Minute lang auf An bleibt und dann erst wieder auf Aus switcht?
Alles klar, wunderbar, das bedeutet, wenn ich den oben genannten Befehl setze, dann ist die Cooldown Zeit bei Motion und Audio Alarm auf 1 Minute gesetzt?
Scheinbar scheint es doch nicht zu funktionieren. Ich nutze das New Ip Camera Binding in Openhab und bekomme dann bei einem Audio Alarm im Log von Openhab immer folgende Meldungen:
2020-08-12 08:50:16.809 [DEBUG] [ing.ipcamera.handler.IpCameraHandler] - Alarm has been triggered:/instar?&active=6
Dies erfolgt aber auch nach setzen der oben genannten Einstellung nicht nach 60 Sekunden erneut, sondern jede Sekunde.
Ok das ist was anderes - das Kamera Binding nutzt nicht den MQTT Dienst, sondern den HTTP Alarmserver. Dieser ist über den folgenden Befehl auslesbar:
/param.cgi?cmd=getmdalarm&-aname=server2
Da sollte dann per default 60s drinnen stehen:
var md_server2_switch="on"; var md_server2_interval="60";
Das Camera Binding setzt diesen Wert aber ebenfalls auf 1s runter.
Diese Einstellung wird beim Hinzufügen der Kamera eingetragen. Ich bin mir aber nicht sicher ob das Binding auch regelmäßig überprüft ob die Einstellung noch vorhanden ist - eventuell passiert dies wenn man OpenHab neustartet.
Man kann mal probieren den Wert auf 60s zu ändern und schauen ob das Binding das dann wieder überschreibt:
Hmm ok, das wäre die Configuration die man für einen Button verwendet. Dann würde man am Eingang das STATUS Topic anschließen und am Ausgang das Befehlstopic - das würde zum Beispiel hiermit funktionieren:
Damit hätte man einen Button mit dem man den Audioalarm der Kamera aktivieren/deaktivieren kann.
Beim Alarmserver kommt jedoch nur eine Info rein - nämlich das Alarmereignis + Alarmauslöser.
Wenn zum Beispiel der Bereich 1 ausgelöst hat, erhält man auf dem status/alarm/triggered topic eine {"val":"1"}, bei Bereich 2 wird die 1 in der Botschaft zu einer 2 ({"val":"6"}) und ein Audioalarm sendet eine 6 ({"val":"6"}).
Und da muß man dann in OpenHab anfangen ein wenig zu scripten - und damit habe ich leider weniger Erfahrung.
Zuerst kann man den Wert extrahieren:
transformationPattern="JSONPATH:$.val"
Das holt sich dann aus {"val":"1"} den Wert 1 heraus. Und zu dem Rest wird der User Dragonfly im OpenHAB mehr sagen können. Das Script das er in dem oben verlinkten Thread geschrieben hat ist:
Schreibe den Zahlenwert der eingehenden Meldung in eine Variable 'alarmTriggered’
Type number : alarmTriggered "Alarm triggered" [ stateTopic="instar/10D1DC21AABB/status/alarm/triggered", transformationPattern="JSONPATH:$.val", qos=1 ]
Gib diese Zahl in der UI aus, z.B. "Alarm ausgelöst 1"
Number Kamera_EG_alarmTriggered "Alarm ausgelöst [%s]" (gCamera_Eingang) {channel="mqtt:topic:localhost:10D1DC21AABB:alarmTriggered"}
Und wenn diese Zahl ungleich 0 ist - dann war es ein Alarm und man möchte ein weiteres Script auslösen - "sendCommand"
rule "Kamera - Eingang/Alarm ausgelöst"
when
Item Kamera_EG_alarmTriggered changed
then
if (Kamera_EG_alarmTriggered.state != 0){Kamera_EG_alarmTriggered.sendCommand(0)}
end
Bzw. hier hat er noch einen Schritt eingebaut, um den Wert wieder auf Null zurückfallen zu lassen - das wird aber mit dem nächsten größeren MQTT Update nicht mehr notwendig sein (die Kamera macht das dann alleine):
rule "Kamera - Eingang/Alarm ausgelöst"
when
Item Kamera_EG_alarmTriggered changed
then
if (Kamera_EG_alarmTriggered.state != 0) {Kamera_EG_alarmTriggered.sendCommand(0)}
if (previousState != 0) {return;}
end
Ich denke mir fehlt da der JAVA Hintergrund um mich damit anzufreunden Mir liegt es da doch mehr einfach ein paar Knoten in einem Flussdiagramm zu verbinden (s.u.). Node-RED hat was von LEGO Technik für mich - ist sehr entspannend. Aber jedem das seine