At: Unterschied zwischen den Versionen
(Ein paar Beispiele für datespec und workaround für Perlfunktion und datespec ergänzt) |
(Beispiele neu strukturiert) |
||
Zeile 18: | Zeile 18: | ||
=== Define === | === Define === | ||
<code>define <name> at <timespec|datespec> <command></code> | <code>define <name> at <timespec|datespec> <command></code> | ||
=== Besonderheit === | |||
*timespec - '''nur Zeit''' im Format HH:MM:SS '''kann eine''' Perlfunktion sein. | |||
*datespec - '''Datum und Zeit''' ISO 8601 oder "number of sec since 1970" '''darf keine''' Perlfunktion sein. | |||
Siehe {{Link2Forum|Topic=91625|Message=168475}} | |||
=== Beispiele === | === Beispiele === | ||
Zeile 27: | Zeile 31: | ||
*<code>define MeineAktion at +02:02:00 set lamp on</code> → in zwei Stunden und 2 Minuten "lamp" einschalten | *<code>define MeineAktion at +02:02:00 set lamp on</code> → in zwei Stunden und 2 Minuten "lamp" einschalten | ||
*<code>define MeineAktion at +*02:02:00 set lamp on</code> → alle zwei Stunden und 2 Minuten "lamp" einschalten | *<code>define MeineAktion at +*02:02:00 set lamp on</code> → alle zwei Stunden und 2 Minuten "lamp" einschalten | ||
Um datespec auch variabel mit setzen zu können gibt es einen Workaround: Perlebene, Perlfunktion und Übergabe in Variable. | |||
Beispiele für "number of seconds since 1970" | |||
<syntaxhighlight lang="perl"> | |||
{my $time=time_str2num("2019-09-14 23:00:00");;fhem("define MeineAktion at $time set lamp on")} | |||
{my $time=1568494800;;fhem("define MeineAktion at $time set lamp on")} | |||
</syntaxhighlight> | |||
Beispiel im ISO 8601 Format | |||
<syntaxhighlight lang="perl">{my $time="2019-09-14T23:00:00";;fhem("define MeineAktion at $time set lamp on")}</syntaxhighlight> | |||
=== Mehrere Aktionen ausführen === | === Mehrere Aktionen ausführen === | ||
Die Verwendung der Semikolon erfordert immer besondere Aufmerksamkeit! | |||
*<code>set lampe1 on ; set lampe2 on </code> → Schaltet sofort beide Lampen ein ( ein bisschen OT, weil kein at) | *<code>set lampe1 on ; set lampe2 on </code> → Schaltet sofort beide Lampen ein ( ein bisschen OT, weil kein at) | ||
*<code>define morgens at *7:00:00 set lampe1 on ; set lampe2 on</code> → schaltet lampe 1 immer um 7 an, aber lampe2 sofort. Der erste Befehl landet in der config (im at) der zweite Befehl wird genau wie der define Befehl einfach sofort ausgeführt. | *<code>define morgens at *7:00:00 set lampe1 on ; set lampe2 on</code> → schaltet lampe 1 immer um 7 an, aber lampe2 sofort. Der erste Befehl landet in der config (im at) der zweite Befehl wird genau wie der define Befehl einfach sofort ausgeführt. | ||
Zeile 37: | Zeile 50: | ||
=== Attribute === | === Attribute === | ||
... | ... | ||
=== Testen === | === Testen === |
Version vom 11. September 2019, 21:39 Uhr
at | |
---|---|
Zweck / Funktion | |
Setzt einen Fhem-Befehl zu einem späteren Zeitpunkt ab. | |
Allgemein | |
Typ | Hilfsmodul |
Details | |
Dokumentation | EN / DE |
Modulname | 90_at.pm |
Ersteller | rudolfkoenig / rudolfkoenig |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
at ist ein Erweiterungsmodul, mit dessen Hilfe Fhem-Befehle/-Aktionen zu einem späteren Zeitpunkt ausgeführt werden können. Es läßt sich sowohl einmalige Ausführung, als auch regelmäßige Wiederholung erzielen, Zeitangaben können relativ oder absolut erfolgen.
Voraussetzungen
Keine.
Anwendung
Define
define <name> at <timespec|datespec> <command>
Besonderheit
- timespec - nur Zeit im Format HH:MM:SS kann eine Perlfunktion sein.
- datespec - Datum und Zeit ISO 8601 oder "number of sec since 1970" darf keine Perlfunktion sein.
Siehe Beitrag
Beispiele
define MeineAktion at 02:02:00 set lamp on
→ das nächste Mal um zwei Minuten nach 2 Uhr "lamp" einschaltendefine MeineAktion at *02:02:00 set lamp on
→ jeden Tag um zwei Minuten nach 2 Uhr "lamp" einschaltendefine MeineAktion at {ReadingsVal("Dummy","Zeit","")} set lamp on
→ das nächste Mal um (Perlfunktion liest Zeit aus dem Dummy) "lamp" einschaltendefine MeineAktion at 2016-01-25T02:02:00 set lamp on
→ das nächste Mal am 25.01.2016 um zwei Minuten nach 2 Uhr "lamp" einschalten (ISO 8601)define MeineAktion at 1453683720 set lamp on
→ das nächste Mal am 25.01.2016 um zwei Minuten nach 2 Uhr "lamp" einschalten (number of sec since 1970)define MeineAktion at +02:02:00 set lamp on
→ in zwei Stunden und 2 Minuten "lamp" einschaltendefine MeineAktion at +*02:02:00 set lamp on
→ alle zwei Stunden und 2 Minuten "lamp" einschalten
Um datespec auch variabel mit setzen zu können gibt es einen Workaround: Perlebene, Perlfunktion und Übergabe in Variable.
Beispiele für "number of seconds since 1970"
{my $time=time_str2num("2019-09-14 23:00:00");;fhem("define MeineAktion at $time set lamp on")}
{my $time=1568494800;;fhem("define MeineAktion at $time set lamp on")}
Beispiel im ISO 8601 Format
{my $time="2019-09-14T23:00:00";;fhem("define MeineAktion at $time set lamp on")}
Mehrere Aktionen ausführen
Die Verwendung der Semikolon erfordert immer besondere Aufmerksamkeit!
set lampe1 on ; set lampe2 on
→ Schaltet sofort beide Lampen ein ( ein bisschen OT, weil kein at)define morgens at *7:00:00 set lampe1 on ; set lampe2 on
→ schaltet lampe 1 immer um 7 an, aber lampe2 sofort. Der erste Befehl landet in der config (im at) der zweite Befehl wird genau wie der define Befehl einfach sofort ausgeführt.define morgens at *7:00:00 set lampe1 on ;; set lampe2 on
→ schaltet BEIDE Lampen immer um 7 an. Beide Befehle landen in der config (im at), nur der define Befehl wird ausgeführtdefine morgens at *7:00:00 set lampe1,lampe2 on
→ schaltet BEIDE Lampen immer um 7 an. Geht nur wenn der gleiche Befehl an 2 oder mehr Geräte gesendet werden soll
Attribute
...
Testen
Mit dem Befehl
set <devspec> execNow
lässt sich eine at-Definition (einmalig, beispielsweise zu Testzwecken) unabhängig vom Erreichen der angegebenen Zeitspezifikation ausführen.
Anwendungsbeispiele
- at an einem bestimmten Wochentag ausführen
- at um eine Temperaturabhängige Nachtabsenkung zu realisieren
- at zu einem absoluten Datum ausführen
- at in Verbindung mit SUNRISE_EL
Links
- Abfrage, ob at definiert ist: Beitrag