Hallo,
ich bin mir gerade unsicher ob man in der fhem.cfg wirklich ganze Perl Blöcke hinter ein notify hängen kann!? Folgende notify Zeile funktioniert bei mir:
define Rollo_1 notify Rollo1 {if (Value("@") eq OldValue("@")){fhem ("setstate Rollo1 stop")}}
...die Erweiterung dessen, scheitert mit einer Menge Fehlermeldungen:
define Rollo_1 notify Rollo1 {
my ($aktor)='';
if (Value("@") eq OldValue("@")){
{fhem ("setstate Rollo1 stop");
$aktor = 0x00; }
}
elseif (Value("@") eq "auf"){
$aktor = 0x01;}
elseif (Value("@") eq "zu"){
$aktor = 0x02;}
"i2cset -y 3 0x10 0x00" .$aktor.;
}
Mir ist schon bewusst, dass empfohlen wird notifys in eine 99_myUtils.pm auszulagen. Das möchte ich aber erst tun, wenn der Rest soweit funktioniert.
...gut, dass gerade jemand den Lüfter-Thread hervorgeholt hat :-)
Das Ende einer Zeile muss wohl mit "\" gekennzeichnet werden. Eine Anweisung muss mit "}" oder ;; abgeschlossen werden. Ausserdem heißt es "elsif" und nicht "elseif" :-) Achja, und an $aktor muss ein String und kein nummerischer Wert übergeben werden.
Richtig lautet das notify dann so:
define Rollo_1 notify Rollo1 {\
my $aktor = '';;\
if (Value("@") eq OldValue("@")){\
fhem ("setstate Rollo1 stop");;\
$aktor = "0x00"}\
elsif (Value("@") eq "auf"){\
$aktor = "0x01"}\
elsif (Value("@") eq "ab"){\
$aktor = "0x02"}\
fhem ("setstate test " .$aktor);;\
"i2cset -y 3 0x10 0x00 " .$aktor}
die ganzen regeln für die maskieren von zeilenende und ; und flüchtigkeitsfehler dabei spart man sich wenn man das notify im web frontend editiert.
am besten das notify hinten nur mit {} anlegen und dann im web frontend auf das DEF klicken. dort kann man dann editieren.
wenn alles geht save nicht vergessen.
gruss
andre
...tatsächlich :-)
Wenn ich das notify im DEF ansehe sind die doppelten ";;" und die "\" am Zeilenende ausgeblendet.
Wann man mit einer Klammer abschließt und wann mit ";" ist mir immer noch nicht geheuer..aber das wird schon
Danke für den Tip