...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
Value("ZW.MULTISENSOR luminance")
das ist "seltsam" und sollte Fehlermeldungen im Log auslösen.
Nimm mal ReadingsVal (siehe http://fhem.de/commandref#perl)
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
Das ist Perl-Ebene. Darum in Kommandozeile mit {...} eingeben.
Ansonsten mal in Deine notify einbauen.
...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
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
...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
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.