FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Goofy180173 am 29 Juli 2018, 11:27:46

Titel: [gelöst] Reading setzen in Notify liefert im Log einen Fehler
Beitrag von: Goofy180173 am 29 Juli 2018, 11:27:46
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.
Titel: Antw:Reading setzen in Notify liefert im Log einen Fehler
Beitrag von: betateilchen am 29 Juli 2018, 11:36:43
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!
Titel: Antw:Reading setzen in Notify liefert im Log einen Fehler
Beitrag von: Goofy180173 am 29 Juli 2018, 12:23:13
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)
Titel: Antw:Reading setzen in Notify liefert im Log einen Fehler
Beitrag von: Otto123 am 29 Juli 2018, 12:38:10
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
Titel: Antw:Reading setzen in Notify liefert im Log einen Fehler
Beitrag von: Goofy180173 am 29 Juli 2018, 12:55:40
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
Titel: Antw:Reading setzen in Notify liefert im Log einen Fehler
Beitrag von: Otto123 am 29 Juli 2018, 13:14:53
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
Titel: Antw:[gelöst] Reading setzen in Notify liefert im Log einen Fehler
Beitrag von: Goofy180173 am 30 Juli 2018, 09:04:24
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()}