FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: stobor am 17 November 2022, 12:11:55

Titel: Verändern des Zeitpunktes bei wiederkehrenden zeitgesteuerten Ereignissen mit AT
Beitrag von: stobor am 17 November 2022, 12:11:55
Hallo,

ich würde gern den Ausführungszeitpunkt eines wiederkehrenden zeitgesteuerten Ereignisses verschieben.
Konkret wollte ich das Ausschalten einer Lampe immer wieder um 30min nach hinten verschieben, sofern sich noch etwas im Raum bewegt. Wird die Lampe dann aber ausgeschaltet, soll am nächsten Tag wieder zur ursprünglichen Zeit versucht werden, die Lampe auszuschalten:
define DimmerAus at *22:45:00 {\
if ((Value("LichtZeitSteuerung") eq "on") && (Value("BabySitter") ne "on") && (ReadingsVal("HM_5FEA90","state","-") eq "noMotion")) {\
fhem"set Dimmer off";;\
fhem "set DimmerAus modifyTimeSpec *22:45:00";;\
}\
elsif (ReadingsVal("HM_5FEA90","state","-") eq "motion") {\
fhem "set DimmerAus modifyTimeSpec +00:30:00";;\
}\
}


Der Doku habe ich schon entnommen, dass man anscheinend bei wiederkehrenden Ereignisssen (*22:45:00) anscheinend modifyTimeSpec nicht verwenden kann. Wie kann ich das möglichst effizient erreichen?
Titel: Antw:Verändern des Zeitpunktes bei wiederkehrenden zeitgesteuerten Ereignissen mit AT
Beitrag von: Felix_86 am 17 November 2022, 14:43:02
Hallo,

ZitatDer Doku habe ich schon entnommen, dass man anscheinend bei wiederkehrenden Ereignisssen (*22:45:00) anscheinend modifyTimeSpec nicht verwenden kann.

ach nein?
oh, funktioniert bei mir ganz wunderbar und findet in einigen wiederkehrenden Ereignissen (at) Anwendung

Hier ein Beispiel, dass allabendlich prüft, ob wir "abwesend" also im Bett sind und wenn ja einige Geräte ausschaltet. Sollten wir zum Prüfungszeitpunkt noch nicht im Bett sein, findet eine erneute Prüfung nach 30 Minuten statt.



define at_Betriebsende_Wohnzimmer at *23:59 {

# Ist jemand da, nur Info
if ((Value("Presence_ich") eq "present") or (Value("Presence_Freundin") eq "present") ) {
{fhem("set Audio_Wiedergabe_per_Text Text_fuer_Audio_Wiedergabe Es ist nun Zeit fürs Bett");}

# Re-check alle 30 Minuten ausführen
my $RECHECKZEIT = strftime "%H:%M:%S",localtime((time()+1800));
fhem("set at_Betriebsende_Wohnzimmer modifyTimeSpec $RECHECKZEIT");

# Geräte die sofort ausgeschaltet werden sollen
fhem("set SSD_Telefon off");
fhem("set SSD_Ventilator off");

}

# Ist niemand da, Betriebsende einleiten
if ((Value("Presence_ich") eq "absent") and (Value("Presence_Freundin") eq "absent") ) {

if (Value("System_Info_per_Telegram") eq "ja"){
fhem("set Telegram message \@41234444222 Betriebsende erreicht.");
}

# Definiertes Betriebsende setzen, wird aus einem Dummy gelesen
my $BETRIEBSENDE = Value("Wecker_Betriebsende");;
fhem("set at_Betriebsende_Wohnzimmer modifyTimeSpec $BETRIEBSENDE; save");

fhem("set Alle_Zimmer off");
fhem("set SSD_Wohnzimmer off");

}

}
Titel: Antw:Verändern des Zeitpunktes bei wiederkehrenden zeitgesteuerten Ereignissen mit AT
Beitrag von: stobor am 18 November 2022, 12:58:26
Hallo Felix,

danke für den Input. Das werde ich ausprobieren.

Über ein Verhalten bin ich gerade gestolpert. Dies scheint zu erklären, warum die Wiederholungen funktionieren.
Hat ein Timer bereits die Definition, das er wiederkehrend ist, bleibt dieses Flag gesetzt ("Periodic"). Aktualisiert man die Ausführungszeit mit modifyTimeSpec, wird auch diese neue Zeit immer wieder gezogen. Ich kann allerdings das wiederholende Ausführen über modifyTimeSpec nicht setzen (der * funktioniert nicht: set DimmerAus modifyTimeSpec *22:45:00). Da meine Funktion aber schon als wiederkehrend definiert ist, kann ich auch die Zeit mit set DimmerAus modifyTimeSpec ... verändern (z.B.: set DimmerAus modifyTimeSpec 23:00:00), und auch diese neue Zeit greift dann automatisch täglich.