Ich habe ein Notify auf ein bzw ausfahren der Markise.
Ich möchte ein Reading Zeitsperre setzen, damit die Markise nicht ständig aus und einfährt wenn sich die Sonneneinstrahlung um den Grenzwert bewegt.
Wenn ich in fhem folgendes eingebe
setreading beschattungaktivieren zeitsperre ja
wird das Reading korrekt gesetzt
folgendes Notify liefert allerdings im Log einen Fehler
defmod beschattung.notify notify (Beschattung_ausfahren.on||Beschattung_einfahren.on) {BeschattungStatusAktualisieren($NAME)};;setreading beschattungaktivieren zeitsperre ja;;sleep 600;;setreading beschattungaktivieren zeitsperre nein;;{BeschattungSteuern()}
Im Log steht dann folgendes:
2018.07.29 10:21:06 1: ERROR evaluating my $SELF='beschattung.notify';my $TYPE='ZWave';my $EVTPART0='on';my $NAME='Beschattung_einfahren';my $EVENT='on';{BeschattungStatusAktualisieren($NAME)};setreading beschattungaktivieren zeitsperre ja;sleep 600;setreading beschattungaktivieren zeitsperre nein;{BeschattungSteuern()}: Can't locate object method "zeitsperre" via package "ja" (perhaps you forgot to load "ja"?) at (eval 4732) line 1.
2018.07.29 10:21:06 3: beschattung.notify return value: Can't locate object method "zeitsperre" via package "ja" (perhaps you forgot to load "ja"?) at (eval 4732) line 1.
setze die setreading Befehle in fhem() denn Du befindest Dich an der Stelle bereits in perl und da kannst Du die FHEM eigenen Befehle nicht mehr einfach so angeben.
Achtung: Dein "sleep 600" an dieser Stelle führt dazu, dass Dein FHEM für 10 Minuten komplett blockiert!
Das verstehe ich jetzt nicht :(
hinter der Bedingung im Notify kommt doch der Ausführungsteil und das sollten doch FHEM Befehle sein und kein Perl.
Zumindest wird es im Quick Start so erklärt oder verstehe ich hier was falsch
https://wiki.fhem.de/wiki/Quick-Start#Reaktion_auf_Ereignisse (https://wiki.fhem.de/wiki/Quick-Start#Reaktion_auf_Ereignisse)
Hi,
Du kannst nur einen Befehlstyp (https://commandref.fhem.de/commandref_DE.html#command)nehmen und die anderen Befehle nur so kombinieren, das es im gesamten Ausführungsteil ein Befehlstyp ist.
Du verwendest Perl- und FHEM Befehle, also musst Du einen Perl Abschnitt {} bauen in dem deine FHEM Befehle eingebettet sind.
Zitat von: Goofy180173 am 29 Juli 2018, 12:23:13
...das sollten doch FHEM Befehle sein und kein Perl.
...
Das hier ist Perl {BeschattungStatusAktualisieren($NAME)}
Gruß Otto
wäre das dann so korrekt?
BeschattungStatusAktualisieren($NAME);fhem("setreading beschattungaktivieren zeitsperre ja");fhem("sleep 600");fhem("setreading beschattungaktivieren zeitsperre nein");BeschattungSteuern()}
oder so
BeschattungStatusAktualisieren($NAME)};;{fhem("setreading beschattungaktivieren zeitsperre ja")};;{fhem("sleep 600")};;{fhem("setreading beschattungaktivieren zeitsperre nein")};;{BeschattungSteuern()}
Dann wäre das ein Perl Befehl und das Sleep wäre dann auch ein fhem Sleep das nicht blockiert
Vorne fehlte die {
Und den fhem Abschnitt kann man in eine "Klammer" setzen.
{BeschattungStatusAktualisieren($NAME);fhem("setreading beschattungaktivieren zeitsperre ja;sleep 600;setreading beschattungaktivieren zeitsperre nein");BeschattungSteuern()}
Ob das jetzt aber die gewünschte Abfolge wird, da bin ich unsicher. Ich befürchte der letzte Perlaufruf wird sofort ausgeführt und das sleep wirkt nur auf das setreading.
Du solltest wahrscheinlich besser mit dem Teil setreading beschattungaktivieren zeitsperre nein");BeschattungSteuern()} ein at starten.
Oder ein DOIF mit wait machen (jetzt bekomm ich Haue von betateilchen :D)
Gruß Otto
Vielen Dank für eure Hilfe :)
So funktionierts Alle Befehle im fhem werden der Reihe nach abgearbeitet und das sleep macht was es soll und blockiert nicht, da es ja an dieser Stelle kein Perl-sleep ist.
defmod beschattung.notify notify (Beschattung_ausfahren.on||Beschattung_einfahren.on) {BeschattungStatusAktualisieren($NAME)};;{fhem("setreading beschattungaktivieren zeitsperre ja;;sleep 600;;setreading beschattungaktivieren zeitsperre nein")};;{BeschattungSteuern()}