At: Unterschied zwischen den Versionen
K (Links auf Anwendungsbeispiele eingefügt) |
F Klee (Diskussion | Beiträge) (Links hinzu gefügt) |
||
(25 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{SEITENTITEL:at}} | |||
{{Infobox Modul | {{Infobox Modul | ||
|ModPurpose=Setzt einen Fhem-Befehl zu einem späteren Zeitpunkt ab. | |ModPurpose=Setzt einen Fhem-Befehl zu einem späteren Zeitpunkt ab. | ||
Zeile 5: | Zeile 6: | ||
|ModCmdRef=at | |ModCmdRef=at | ||
|ModTechName=90_at.pm | |ModTechName=90_at.pm | ||
|ModOwner= | |ModOwner={{Link2FU|8|rudolfkoenig}} | ||
}} | }} | ||
[[at]] ist ein Erweiterungsmodul, mit dessen Hilfe | [[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 == | == Voraussetzungen == | ||
<!-- AUSKOMMENTIERT wegen derzeitiger Funktionsproblemen iZm codemirror {{Randnotiz|RNTyp=[g|Info|RNText=FHEM enthält für at eine eingebaute Perl-Syntax-Prüfung. Diese ist nach [http://fhem.de/commandref.html#perlSyntaxCheck Aktivierung] aber nur aktiv, wenn die [[Konfiguration]] -wie empfohlen- nicht direkt bearbeitet wird. ({{Link2Forum|Topic=51744}}) }} --> | |||
Keine. | Keine. | ||
== Anwendung == | == Anwendung == | ||
=== Define === | === Define === | ||
<code>define <name> at <timespec> <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 === | |||
*<code>define MeineAktion at 02:02:00 set lamp on</code> → das nächste Mal um zwei Minuten nach 2 Uhr "lamp" einschalten | |||
*<code>define MeineAktion at *02:02:00 set lamp on</code> → jeden Tag um zwei Minuten nach 2 Uhr "lamp" einschalten | |||
*<code>define MeineAktion at {ReadingsVal("Dummy","Zeit","")} set lamp on</code> → das nächste Mal um (Perlfunktion liest Zeit aus dem Dummy) "lamp" einschalten | |||
*<code>define MeineAktion at 2016-01-25T02:02:00 set lamp on</code> → das nächste Mal am 25.01.2016 um zwei Minuten nach 2 Uhr "lamp" einschalten (ISO 8601) | |||
*<code>define MeineAktion at 1453683720 set lamp on</code> → das nächste Mal am 25.01.2016 um zwei Minuten nach 2 Uhr "lamp" einschalten (number of sec since 1970) | |||
*<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 | |||
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 === | |||
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>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 BEIDE Lampen immer um 7 an. Beide Befehle landen in der config (im at), nur der define Befehl wird ausgeführt | |||
*<code>define morgens at *7:00:00 set lampe1,lampe2 on</code> → 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: | |||
:<code>define at_ultimo at *{at_ultimo()} set Lampe1 off</code> | |||
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: | |||
:<code>define at_ultimo at *{at_ultimo(12,23,45)} set Lampe1 off</code> | |||
Dadurch wird ein at-device erstellt, das am letzten Tag des Monats um 12:23:45 Uhr ausgeführt wird. | |||
=== Attribute === | === Attribute === | ||
... | ... | ||
=== Testen === | |||
{{Randnotiz|RNText='''Versionsspezifisch:''' Der Befehl ''execNow'' ist in FHEM 5.7/90_at.pm ab 30.4.2016 verfügbar.}} | |||
Mit dem Befehl | |||
:<code>set <devspec> execNow</code> | |||
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 <code>modifyTimeSpec</code> (Befehls-Syntax via Web-Interface ermitteln) geändert werden können. | |||
Details dazu in den Forenbeiträgen | |||
* {{Link2Forum|Topic=76227|LinkText=modifyTimeSpec fehlerhaft!?}} | |||
* {{Link2Forum|Topic=36326|LinkText=defmod}} | |||
== Anwendungsbeispiele == | == Anwendungsbeispiele == | ||
* [[AT an einem bestimmten Wochentag ausführen]] | * [[AT an einem bestimmten Wochentag ausführen|at an einem bestimmten Wochentag ausführen]] | ||
* [[AT um eine Temperaturabhängige Nachtabsenkung zu realisieren]] | * [[AT kleine Helferlein#AT am x-ten Wochentag im Monat ausführen|at am x-ten Wochentag im Monat ausführen]] | ||
* [[AT zu einem absoluten Datum ausführen]] | * [[AT kleine Helferlein#AT alle x Tage ausführen|at alle x Tage ausführen]] | ||
* [[AT um eine Temperaturabhängige Nachtabsenkung zu realisieren|at um eine Temperaturabhängige Nachtabsenkung zu realisieren]] | |||
* [[AT zu einem absoluten Datum ausführen|at zu einem absoluten Datum ausführen]] | |||
* [[SUNRISE_EL|at in Verbindung mit SUNRISE_EL]] | |||
== Links == | == Links == | ||
* | * Abfrage, ob at definiert ist: {{Link2Forum|Topic=23584|Message=841269}} |
Aktuelle Version vom 25. Juli 2024, 20:03 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 |
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