Z-Wave Multisensor - Sensordaten auswerten

Begonnen von LAN-Opfer, 25 April 2015, 22:33:04

Vorheriges Thema - Nächstes Thema

LAN-Opfer

...ich bräuchte etwas Unterstützung: mein Aeotec Multisensor soll bei Dunkelheit und Bewegung mein Außenlicht einschalten. Leider bekomme ich die Verriegelung mit der Helligkeit nicht hin :-(


define MOTION notify ZW.MULTISENSOR.*basicReport.* { if (Value("ZW.AS_LICHT") eq "off" && Value("ZW.MULTISENSOR luminance") <= 1){ fhem ("set ZW.AS_LICHT on-for-timer 5") } }



Bei Bewegung geht das Licht für 5 Sekunden an - leider auch dann, wenn es hell ist.

Was muss ich an obigem Code korrigieren?

Uwe
FHEM5.7 auf Raspberry 2 mit V 1.53 CUL868, HMLAN, Z-Wave 3.99

krikan

Value("ZW.MULTISENSOR luminance") das ist "seltsam" und sollte Fehlermeldungen im Log auslösen.
Nimm mal ReadingsVal (siehe http://fhem.de/commandref#perl)

LAN-Opfer

#2
stimmt - es gibt eine Fehlermeldung  :-[

2015.04.25 22:25:00 1: PERL WARNING: Argument "" isn't numeric in numeric le (<=) at (eval 5768) line 1.
2015.04.25 22:25:00 3: eval: { if (Value("ZW.AS_LICHT") eq "off" && Value("ZW.MULTISENSOR luminance") <= 1){ fhem ("set ZW.AS_LICHT on-for-timer 5") } }
2015.04.25 22:25:00 2: ZWave set ZW.AS_LICHT on
2015.04.25 22:25:05 2: ZWave set ZW.AS_LICHT off
2015.04.25 22:29:58 1: PERL WARNING: Argument "" isn't numeric in numeric le (<=) at (eval 6081) line 1.
2015.04.25 22:29:58 3: eval: { if (Value("ZW.AS_LICHT") eq "off" && Value("ZW.MULTISENSOR luminance") <= 1){ fhem ("set ZW.AS_LICHT on-for-timer 5") } }
2015.04.25 22:29:58 2: ZWave set ZW.AS_LICHT on
2015.04.25 22:30:03 2: ZWave set ZW.AS_LICHT off
2015.04.25 22:30:14 1: PERL WARNING: Argument "" isn't numeric in numeric le (<=) at (eval 6110) line 1.
2015.04.25 22:30:14 3: eval: { if (Value("ZW.AS_LICHT") eq "off" && Value("ZW.MULTISENSOR luminance") <= 1){ fhem ("set ZW.AS_LICHT on-for-timer 5") } }
2015.04.25 22:30:14 2: ZWave set ZW.AS_LICHT on
2015.04.25 22:30:19 2: ZWave set ZW.AS_LICHT off


ReadingsVal("ZW.MULTISENSOR","luminance",0) in die Kommandozeile eingetragen liefert
"Unknown command ReadingsVal("ZW.MULTISENSOR","luminance",0), try help."

Uwe
FHEM5.7 auf Raspberry 2 mit V 1.53 CUL868, HMLAN, Z-Wave 3.99

krikan

Das ist Perl-Ebene. Darum in Kommandozeile mit {...} eingeben.
Ansonsten mal in Deine notify einbauen.

LAN-Opfer

...ok - geschweifte Klammern gehen und ich bekomme "59 Lux" zurück - ohne Anführungszeichen

define MOTION notify ZW.MULTISENSOR.*basicReport.* { if (Value("ZW.AS_LICHT") eq "off" && ReadingsVal("ZW.MULTISENSOR","luminance",0) <= 5){ fhem ("set ZW.AS_LICHT on-for-timer 5") } }


funktioniert  :)
Vielen Dank!!

Uwe
FHEM5.7 auf Raspberry 2 mit V 1.53 CUL868, HMLAN, Z-Wave 3.99

krikan

Hallo Uwe.
Prima :); denke nur bei diesem Rückgabewert mal darüber nach statt "ReadingsVal", was ich zunächst vorgeschlagen hatte, lieber "ReadingsNum" zu nutzen.
Gruß, Christian

LAN-Opfer

...funktioniert seltsamer weise sowohl mit  "ReadingsVal", als auch mit "ReadingsNum". "ReadingsNum" scheint mir der bessere Weg zu sein, da die Einheit, die "ReadingsVal" mitliefert doch mal stören könnte.
Welche Bedeutung hat der 3. Parameter "defaultvalue"? Ich habe da jetzt einfach eine 0 übergeben. In der FHEM-Referenz und bei google konnte ich nichts darüber finden.

Uwe
FHEM5.7 auf Raspberry 2 mit V 1.53 CUL868, HMLAN, Z-Wave 3.99

krikan

ReadingsVal funktioniert dank der automatischen Konvertierung (String/Zahl) durch Perl (siehe bspw. http://www.perlboard.de/perlguide/Kap02.html). Sollte aber eine Warnung in Deinem Log auslösen; kurz: nimm ReadingsNum.
Der "defaultvalue" in ReadingsVal wird genommen, wenn Auslesen des Readings fehlschlägt; sieht man am einfachsten in fhem.pl selbst.