(gelöst) IP Kamera Motionerkennung über HTTPMOD, Reading löst Aktion nicht aus

Begonnen von Olaf_Fhem, 12 Oktober 2014, 20:07:15

Vorheriges Thema - Nächstes Thema

Olaf_Fhem

Hallo,

Als FHEM Neuling versuche ich mich nach umfangreicher Forumstudie an einem ersten kleinem Projekt.
Mein Ziel ist es eine Bewegungs-Alarmmeldung meiner Kamera auszuwerten um damit zum Beispiel eine Lampe einzuschalten.
Es soll also ein Bewegungsmelder ohne extra Hardware werden.

Die Kamera lässt sich über CGI abfragen, eine typische Browser CGI-Antwort sieht so wie folgt aus:
<CGI_Result>
    <result>0</result>
    <IOAlarm>0</IOAlarm>
    <motionDetectAlarm>1</motionDetectAlarm>
    <soundAlarm>0</soundAlarm>
    <record>0</record>
    <sdState>0</sdState>
    <sdFreeSpace>0k</sdFreeSpace>
  ....
</CGI_Result>

In FHEM Abfrage wie folgt:
define Kamerarueckmeldung HTTPMOD http://192.168.178.35:88//cgi-bin/CGIProxy.fcgi?cmd=getDevState&usr=USER&pwd=PASSWORT 5
Aus der Antwort interessiert der Wert bei motionDetect Alarm. Die möglichen Werte bedeuten folgendes:
0 -> disabled, 1 -> No alarm, 2 -> detect alarm

Über ein reading wird dieser Wert vereinzelt:
attr Kamerarueckmeldung readingsName1 Motion_Status
attr Kamerarueckmeldung readingsRegex1 <motionDetectAlarm>?([\d])


Der Event monitor gibt auch folgendes aus:
Events:
2014-10-12 19:09:38 HTTPMOD Kamerarueckmeldung Motion_Status: 1
2014-10-12 19:09:43 HTTPMOD Kamerarueckmeldung Motion_Status: 1
2014-10-12 19:09:50 HTTPMOD Kamerarueckmeldung Motion_Status: 2
2014-10-12 19:09:53 HTTPMOD Kamerarueckmeldung Motion_Status: 1

Dieser Wert soll nun eine Aktion auslösen (z.B. Licht einschalten)
und genau hier komme ich nicht weiter, ich erhalte keinerlei Änderungen des Kamerastatus.
define Kamerastatus dummy
define check DOIF ([Motion_Status] eq "2") (set Kamerastatus on) DOELSE (set Kamerastatus off)
attr check do always


Der Vollständigkeit halber ordne ich die Werte noch einem room zu:
attr Kamerarueckmeldung room Kameraauswertung
attr Kamerastatus room Kameraauswertung
attr check room Kameraauswertung


Ist mein reading korrekt?
Ist DOIF hier das Mittel der Wahl?
Andere Vorschläge / Anregungen?

Danke für Eure Mühen

fiedel

Mal abgesehen davon, dass ich dafür notify nehmen würde, setzte doch mal einen punkt (.) vor die 2 in der DOIF- Zeile. Da ist doch im Eventmon. noch ein Leerzeichen davor und das musst du im regex mit angeben.

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Olaf_Fhem

Danke für die Antwort. Der 'Punkt' hat mir zwar nicht weitergeholfen, aber ich habe mich aufgrund des Vorschlages intensiver mit 'notify' beschäftigt.
Dabei habe ich mir meine Bedingungsabfrage genauer angesehen, diese war anscheinend nicht vollständig.
Wenn ich mich so auf die 'State' Rückmeldung beziehe funktioniert es:

attr Kamerarueckmeldung stateFormat {sprintf("%s", ReadingsVal($name,"Motion_Status",0))}

Mein kompletter Code sieht jetzt so aus:

define Kamerarueckmeldung HTTPMOD http://192.168.178.35:88//cgi-bin/CGIProxy.fcgi?cmd=getDevState&usr=User&pwd=Passwort 5
attr Kamerarueckmeldung readingsName_MS Motion_Status
attr Kamerarueckmeldung readingsRegex_MS <motionDetectAlarm>?([\d])
attr Kamerarueckmeldung stateFormat {sprintf("%s", ReadingsVal($name,"Motion_Status",0))} 

define Kamerastatus dummy
set Kamerastatus off

define Alarm_ein notify Kamerarueckmeldung { if ( Value("Kamerarueckmeldung") eq "2") {fhem("set Kamerastatus on")} }
define Alarm_aus notify Kamerarueckmeldung { if ( Value("Kamerarueckmeldung") eq "1") {fhem("set Kamerastatus off")} }

attr Kamerarueckmeldung room Kameraauswertung
attr Kamerastatus room Kameraauswertung
attr Alarm_ein room Kameraauswertung
attr Alarm_aus room Kameraauswertung


Vielleicht hilft ja jemandem diese Lösung bei eigenen Projekten.

Liebe Grüße

Olaf