FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Reeny am 04 Februar 2016, 07:07:53

Titel: Jeden Tag neu "Save Config" durch Setzen eines Timers in fhem.cfg
Beitrag von: Reeny am 04 Februar 2016, 07:07:53
Hallo.

Ich habe ein etwas nerviges Problem. Ich habe einen Timer in der fhem.cfg definiert, der jeden Morgen (außer am WE) zu einer bestimmten Zeit (4:23 Uhr) gewisse Aktionen vornehmen soll - z.B. die Kaffeemaschine anschalten.
Als besonderes Feature wollte ich aber ermöglichen, manuell für den nächsten Tag diese Zeit anzupassen. Falls ich mal ausschlafen will :-)

Nachdem ich den folgenden Code fertig hatte (der auch funktioniert), habe ich nun jeden Morgen dieses Fragezeichen neben "save config" im FHEM. Die Frage ist nur, warum? Muss ich nach einem "modify" Befehl noch irgendwie ein "save" Befehl hinterher klatschen?
Oder liegt das am "define GoodMorningOff"?



# den Event-Trigger definieren, der die morgentlichen Aktionen ausführt
define GoodMorningEvents dummy
attr GoodMorningEvents webCmd on:off

define n_GoodMorningEvents_on notify GoodMorningEvents:on set Kaffeemaschine on
# evtl. mehr Aktionen durchführen



# den eigentlichen Timer definieren, der den Trigger aktiviert, und 10 Minuten später wieder deaktiviert
define GoodMorning at *04:23 { \
if($wday == 1  || $wday == 2  || $wday == 3  || $wday == 4  || $wday == 5 ) { \
   # und nun aufwachen! \
   fhem "set GoodMorningEvents on";; \
\
   # Die GoodMorningEvents wieder deaktivieren.  \
   # ggf. voher ein bereits bestehendes GoodMorningOff Event löschen \
   if(Value("GoodMorningOff")) { \
     fhem "delete GoodMorningOff";; \
   } \
\
   fhem "define GoodMorningOff at +00:10:00 set GoodMorningEvents off";; \
\
   # Zeit zurueck stellen \
   if($hms gt "04:23"){ \
     fhem "modify GoodMorning *04:23";; \
   }\
}\
\
}


# den Timer definieren, mit dem man von "außen" die Zeit für die Guten-Morgen-Events anpassen kann
define GoodMorningEventsTimer dummy
attr GoodMorningEventsTimer setList state:time
attr GoodMorningEventsTimer webCmd state

# wenn der Timer von außen geändert wird, den Standard-Timer (normalerweise 4:23 Uhr) entsprechend anpassen
define n_GoodMorning notify GoodMorningEventsTimer {fhem("modify GoodMorning *$EVENT");;}




Könnt ihr mir sagen, was ich noch machen muss, um dieses tägliche "save config" zu vermeiden?

Vielen Dank!

Reeny
Titel: Antw:Jeden Tag neu "Save Config" durch Setzen eines Timers in fhem.cfg
Beitrag von: Ellert am 04 Februar 2016, 08:56:33
Du kannst nach jedem Befehl, der die fhem.cfg verändert ein save anhängen.

Oder Du löst es mit DOIF, etwa so

([[GoodMorningEventsTimer]}|12345]) (set GoodMorningEvents on)
DOELSEIF ([([GoodMorningEventsTimer] + 600)|12345]) (set GoodMorningEvents off)


Unverhältnissmässig wenig Kode, um nicht über ein DOIF nachzudenken ;)
Titel: Antw:Jeden Tag neu "Save Config" durch Setzen eines Timers in fhem.cfg
Beitrag von: betateilchen am 04 Februar 2016, 09:02:54
Zitat von: Reeny am 04 Februar 2016, 07:07:53
Muss ich nach einem "modify" Befehl noch irgendwie ein "save" Befehl hinterher klatschen?
Oder liegt das am "define GoodMorningOff"?

Es liegt an beidem. Sobald Du ein device neu anlegst (mit define) oder ein bestehendes in seiner Definition veränderst (mit modify) weist Dich fhem darauf hin, dass es ungespeicherte Änderungen an der Konfiguration gibt.
Titel: Antw:Jeden Tag neu "Save Config" durch Setzen eines Timers in fhem.cfg
Beitrag von: Benni am 04 Februar 2016, 12:16:19
Zitat von: betateilchen am 04 Februar 2016, 09:02:54
Sobald Du ein device neu anlegst (mit define)

...es sei denn, es handelt sich um ein "flüchtiges" device, wie bspw. ein einmaliges at (das ohne Stern ;) ), denn das wird nicht in der config sondern im statefile abgelegt.
Titel: Antw:Jeden Tag neu "Save Config" durch Setzen eines Timers in fhem.cfg
Beitrag von: betateilchen am 04 Februar 2016, 12:32:52
Benni das ist aber auch nur die halbe Wahrheit. Wenn man will, kann man auch solche at in die config speichern lassen ;)

Aber ich würde ja die eingangs gestellte Aufgabenstellung ohnehin völlig anders lösen und nicht mit einem wiederholenden at, bei dem ich jede Nacht die Definition verändere. Aber danach war ja auch nicht gefragt  8)
Titel: Antw:Jeden Tag neu "Save Config" durch Setzen eines Timers in fhem.cfg
Beitrag von: Reeny am 05 Februar 2016, 05:39:43
Danke für eure hilfreichen Antworten bisher.

Betateilchen, du hast recht: es war vielleicht nicht die Frage, wie ihr die Anforderung lösen würdet. Aber vielleicht könntest du mich doch an deinen Ideen teilhaben lassen ;-)

Bin immerhin noch Anfänger und löse alles mit den wenigen Wissen, das ich bisher besitze. Allein für dieses Codefragment habe ich bestimmt 2-3 Stunden gebraucht  :o Ich bin bereit, von Profis zu lernen * schleim *
Titel: Antw:Jeden Tag neu "Save Config" durch Setzen eines Timers in fhem.cfg
Beitrag von: Cluni am 20 April 2017, 19:41:52
Ist zwar schon was her, aber vielleicht brauchst du ja noch eine Möglichkeit...

Könntest du nicht ein UserReading anlegen, welches du mit einem setreading auf den gewünschten Wert setzt? Dieses kannst du dann mit readingsval lesen und darauf reagieren.

Gruß Bernd
Titel: Antw:Jeden Tag neu "Save Config" durch Setzen eines Timers in fhem.cfg
Beitrag von: budy am 21 April 2017, 19:45:16
...und wenn es ein at sein soll, dann mache daraus ein temporäres, dann triggert das nicht das Ändern der Konfig...

Gruß,
Stephan
Titel: Antw:Jeden Tag neu "Save Config" durch Setzen eines Timers in fhem.cfg
Beitrag von: Benni am 21 April 2017, 22:03:36
Und dann gibt es da auch noch das (benannte) sleep:

https://fhem.de/commandref.html#sleep
https://fhem.de/commandref.html#cancel

Titel: Aw: Jeden Tag neu "Save Config" durch Setzen eines Timers in fhem.cfg
Beitrag von: gianca85 am 21 Dezember 2023, 21:17:55
Hallo zusammen,
ich würde dieses Thema gerne nochmal aufwärmen.

Aktuell habe ich in meiner Config folgenden Eintrag, welcher bei Ausführung jedes mal zu einer Änderung an der Konfiguration (rotes Fragezeichen) führt:
define FunksteckdosenAn_Morgen at *06:00:00 define FanM at +*{3}00:00:02 set TE.Funksteckdose1 on
Der Code soll zu einer definierten Tageszeit (hier täglich um 6 Uhr), 3 mal eine Intertechno Funksteckdose (mit je 2 Sek. Abstand) anschalten.
Hintergrund: der Befehl kommt leider nicht immer zuverlässig an, sodass ich ihn sicherheitshalber mit etwas zeitl. Abstand mehrfach senden möchte.

Welche Alternative gibt es, um das selbe Ergebnis zu erhalten, ohne diese ständigen Änderungen der Config?
Habe verstanden dass "sleep" eine Möglichkeit wäre, aber die genaue Definition erschließt sich mir noch nicht.

Danke und Gruß
Titel: Aw: Jeden Tag neu "Save Config" durch Setzen eines Timers in fhem.cfg
Beitrag von: TomLee am 21 Dezember 2023, 21:59:44
Hallo,

so einfach mal ins Blaue: mit dem Attribut ITrepetition in TE.Funksteckdose1 mal etwas spielen oder mit dem setter blink einschalten  :o  ;D
Das würde das define des at (was die Ursache für das rote Fragezeichen ist) in FunksteckdosenAn_Morgen überflüssig machen und du gibst einfach nur den set-Befehl an.
Titel: Aw: Jeden Tag neu "Save Config" durch Setzen eines Timers in fhem.cfg
Beitrag von: juemuc am 22 Dezember 2023, 14:21:09
Ich würde einmal Weekdaytimer (https://fhem.de/commandref_DE.html#WeekdayTimer) ansehen.

Viele Grüße
Jürgen