Hallo zusammen,
ich möchte immer um 2:00 Uhr ein Reading setzen welches berechnet werden soll. Zum Beispiel
define at_licht_morgens_an at *02:00:00 {fhem("setreading A_sunrise_sunset_licht licht_an {sunset(-45000)}")
}
Der dort errechnete Wert soll in das reading geschrieben werden Bei mir wird aber nur der Text geschrieben.
Ich möchte dieses reading später nutzen um zu eben der errechneten Zeit etwas zu schalten.
Danke im Voraus
VG
Andreas
Warum der Umweg über das at ? Du kannst doch auch direkt schalten . Geht in jedem Fall mit mswitch , mit doif etc.
Gruss Byte09
Gesendet von meinem SM-G900F mit Tapatalk
Hallo ag21368,
Du musst Perlausdrücke im Ausführungsteil (set magic genannt) noch mal mit () klammern
{sunset(-45000)} -> {(sunset(-45000))}
Steht so (etwas implizit) in der Doku (https://commandref.fhem.de/commandref_DE.html#set). :D
Zitat
set <devspec> <type-specific>
...
{(perlExpression)} mit dem Ergebnis der perlExpression. $DEV wird dabei mit dem Namen des vom set betroffenen Gerätes ersetzt.
Diese Ersetzungen sind unter dem Namen "set magic" bekannt.
Gruß Otto
Wie oben schon beschrieben, kannst Du auch eine Berechnung zu sunset für Schaltvorgänge nutzen (siehe auch DOIF-Beispiele)
Wenn Du Dein at so erhalten willst, dann ist es nötig die Berechnung auf der perl-Ebene auch ausführen zu lassen, momentan steht sie im String:
define at_licht_morgens_an at *02:00:00 {fhem("setreading A_sunrise_sunset_licht licht_an "+sunset(-45000)) }
Ohne das jetzt im System auf Syntaxfehler überprüft zu haben.
Und eigentlich brauchst Du gar nicht für den setreading-Befehl auf die perl-Ausführungsebene.
Habe es hinbekommen. Danke