FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: topfi am 15 September 2020, 09:32:01

Titel: Variablenwert innerhalb eines Timers erst zum Ablauf des Timers erhalten
Beitrag von: topfi am 15 September 2020, 09:32:01
Ich habe ein vermutlich simples Problem. Ich möchte, dass nach 4 Minuten die Variable Ambiente_Flur auf ihren aktuellen Wert gesetzt wird, um ein Event auszulösen. Das Konstrukt:


{fhem("defmod Minutenlicht_aus at +00:04:00 set Ambiente_Flur ".Value("Ambiente_Flur"))}


ermittelt aber den Wert der Variable Ambiente_Flur sofort, d.h. vor Ablauf des Timers. Selbst die Definition eines weiteren "at" dort drin führt dazu, dass zuerst alle Variablenwerte ermittelt und dann erst die Timer gestartet werden.

Wie bekomme ich es hin, dass der Value(Ambiente_Flur) erst NACH Ablauf der 4 Minuten ermittelt wird?

Hintergrund:
An diese Variable ist ein HUE-Licht gekoppelt, das bei "on" ein Nachtlicht einschaltet und bei "off" wieder aus. Mit einem Homematic-Bewegungsmelder (Latenz 4 Minuten) wird bei Bewegung helleres Licht eingeschaltet und nach 4 Minuten wieder auf den Zustand vorher. Hat man aber inzwischen das Nachtlicht manuell oder mit einem anderen Timer abgeschaltet, schaltet diese Minutenlichtroutine das Nachtlicht wieder an.
Titel: Antw:Variablenwert innerhalb eines Timers erst zum Ablauf des Timers erhalten
Beitrag von: topfi am 15 September 2020, 11:31:12
Ich habe das jetzt mit einer Hilfsvariablen gelöst, auf die ich nach Ablauf des Timers setze und dann mit einem notify abfrage:


{fhem("defmod Minutenlicht_aus at +00:04:00 set hilf on")}
define n_hilf notify hilf {my $AmbientF1= Value("Ambiente_Flur") ;; fhem("trigger Ambiente_Flur $AmbientF1")}


Es interessiert mich aber trotzdem noch, ob es eine Möglichkeit gibt, eine Variable NACH Ablauf eines Timers direkt abzufragen.
Titel: Antw:Variablenwert innerhalb eines Timers erst zum Ablauf des Timers erhalten
Beitrag von: Otto123 am 15 September 2020, 11:33:50
Hi,

ich denke einfach so
defmod Minutenlicht_aus at +00:04:00 set Ambiente_Flur [Ambiente_Flur]

Solltest Du das innerhalb Perl machen müssen musst Du es einfach auch so in den Perl Aufruf schreiben. Du kannst auch Deinen Perlaufruf nehmen :)
{fhem("defmod Minutenlicht_aus at +00:04:00 set Ambiente_Flur {(Value('Ambiente_Flur'))}")}

Erklärung dazu findest Du in der Doku beim set Befehl: set magic

Gruß Otto
Titel: Antw:Variablenwert innerhalb eines Timers erst zum Ablauf des Timers erhalten
Beitrag von: topfi am 15 September 2020, 12:20:08
Das gibt es doch gar nicht, Dankeschön.

Kaum macht man es richtig, schon geht es.  :) 

Beides funktioniert. set magic kannte ich noch nicht. Und die zweite Variante habe ich mehrfach und immer mit den falschen Anführungszeichen probiert und immer Fehler erhalten.

Dann kann ich ja nun wieder ein notify einsparen. Danke nochmal.
Titel: Antw:Variablenwert innerhalb eines Timers erst zum Ablauf des Timers erhalten
Beitrag von: Otto123 am 15 September 2020, 12:37:02
Dazu nur kurz:
Es gibt wenige Fälle wo man sowas machen kann: "Bla " bla" blabla" -> https://commandref.fhem.de/#command (warum das funktioniert erschließt sich mir nicht :) )
Sonst immer  'Bla " bla" blabla' oder  "Bla ' bla' blabla" - wobei innerhalb der " " und ' ' auch noch unterschiedliche Dinge mit Variablen stattfinden!!!
Titel: Antw:Variablenwert innerhalb eines Timers erst zum Ablauf des Timers erhalten
Beitrag von: topfi am 15 September 2020, 20:54:08
Argh, wenn man die Grundlagen nicht kennt.  :o :) Jetzt habe ich ein wenig im Perl-Kurs über einfache und doppelte quotes gelesen und wieder was gelernt.

Danke dir.