At: Unterschied zwischen den Versionen

Aus FHEMWiki
(Ein paar Beispiele für datespec und workaround für Perlfunktion und datespec ergänzt)
K ("define"-Beispiele eingerückt)
 
(7 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 6: Zeile 6:
|ModCmdRef=at
|ModCmdRef=at
|ModTechName=90_at.pm
|ModTechName=90_at.pm
|ModOwner=rudolfkoenig / [http://forum.fhem.de/index.php?action=profile;u=8 rudolfkoenig]
|ModOwner={{Link2FU|8|rudolfkoenig}}
}}
}}


[[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.
[[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 ==
Zeile 17: Zeile 17:
== Anwendung ==
== Anwendung ==
=== 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 32:
*<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.   
*<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 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
*<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 ===
...
...
=== Besonderheit ===
*timespec kann eine Perlfunktion sein.
*datespec darf keine Perlfunktion sein.
Siehe {{Link2Forum|Topic=91625|Message=168475}}
Workaround: Perlebene, Perlfunktion und Übergabe in Variable. 2 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")}</syntaxhighlight>
<syntaxhighlight lang="perl">{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>


=== Testen ===
=== Testen ===
Zeile 54: Zeile 68:
:<code>set <devspec> execNow</code>
:<code>set <devspec> execNow</code>
lässt sich eine ''at''-Definition (einmalig, beispielsweise zu Testzwecken) unabhängig vom Erreichen der angegebenen Zeitspezifikation ausführen.
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 ==

Aktuelle Version vom 17. März 2024, 11: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
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" einschalten
  • define MeineAktion at *02:02:00 set lamp on → jeden Tag um zwei Minuten nach 2 Uhr "lamp" einschalten
  • define MeineAktion at {ReadingsVal("Dummy","Zeit","")} set lamp on → das nächste Mal um (Perlfunktion liest Zeit aus dem Dummy) "lamp" einschalten
  • define 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" einschalten
  • define 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ührt
  • define 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

Info green.pngVersionsspezifisch: Der Befehl execNow ist in FHEM 5.7/90_at.pm ab 30.4.2016 verfügbar.

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

Links

  • Abfrage, ob at definiert ist: Beitrag