at
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 |
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
at_ultimo
Die integrierte Funktion at_ultimo() dient dazu, an jedem letzten Tag des Monats einen FHEM-Befehl auszuführen. Sie kann als Perlfunc für timespec verwendet werden:
define at_ultimo at *{at_ultimo()} set Lampe1 off
Dadurch wird ein at-device erstellt, das am letzten Tag des Monats um 23:59:00 Uhr ausgeführt wird.
at_ultimo() kann zusätzliche Parameter annehmen, um eine andere Zeit an diesem Tag anzugeben:
define at_ultimo at *{at_ultimo(12,23,45)} set Lampe1 off
Dadurch wird ein at-device erstellt, das am letzten Tag des Monats um 12:23:45 Uhr ausgeführt wird.
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.
Ändern / Modifizieren
Das Zeit-Attribut eines existierenden Timers sollte via modifyTimeSpec
(Befehls-Syntax via Web-Interface ermitteln) geändert werden können.
Details dazu in den Forenbeiträgen
Anwendungsbeispiele
- at an einem bestimmten Wochentag ausführen
- at am x-ten Wochentag im Monat ausführen
- at alle x Tage 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