FHT: Datum und Zeit von FHEM setzen lassen

Aus FHEMWiki

Läuft Fhem auf einem Rechner mit aktuellem Datum, bietet es sich an, Datum und Uhrzeit regelmäßig an alle FHTs zu senden.


Variante A

define fht_setdate notify fht_setdate { \
 if ( $year gt 2010 ) {\
  my @@fhts=devspec2array("TYPE=FHT");; \
  foreach(@@fhts) { \
   my $cmd="set ".$_." date time";;\
   fhem $cmd;;\
   Log 4, "sent cmd ".$cmd;;\
  } \
 } else {\
   Log 1, "error setting date for fhts: year <= 2010 - date invalid?!"\
 }\
}
define t_fht_setdate at *02:00:00 trigger fht_setdate

Die Abfrage $year gt 2010 ist ein sanity-check, um grob zu überprüfen, ob das Datum des Fhem Hostrechners noch stimmt oder z.B. bei einer Fritzbox nach einem Reboot das Datum falsch ist.


Variante B

Da die Funkbefehle mit einem gewissen Zeitversatz verschickt werden, kann es unter ungünstigen Umständen passieren, dass der "time"-Befehl erst in der nächstenStunde ausgeführt wird. Nur die Minuten werden von Fhem automatisch nachgezogen. Sofern man die Uhr jeweils zur vollen Stunde stellt wie im vorgenannten Beispiel, sollte es nie Probleme geben. Andernfalls kann man mit folgendem Code die korrekte Stunde sicherstellen:

define n_Uhrvergleich notify .*:hour.* { \
 my $zeit="%EVTPART1";; \
 if($zeit==$hour) { \
  Log(4,"Uhrzeit für @ erfolgreich nachgestellt.") \
 } else { \
  Log(2,"Uhr stellen bei @ fehlgeschlagen!");; \
  fhem("set @ time") \
 } \
}

Dieser notify überwacht die "hour"-Meldungen aller Geräte und vergleicht diese mit der Systemzeit. Sofern diese ungleich ist, wird der "time"-Befehl an den falsch gestellten FHT erneut abgesetzt.


Variante C

Eine recht unaufwändige Variante ist möglich, wenn alle FHTs so benannt sind, das der Name gleich anfängt, z.B. mit "hzg" (Heizung)

Dann kann das Datum aller FHTs zugleich gesetzt werden mit:

set hzg.* date

und die Zeit mit

set hzg.* time


Mögliche Probleme

Vorsicht ist geboten, wenn die gesamte FHT-Installation schon mit Funkproblemen behaftet ist (siehe dazu auch Kommunikationsprobleme mit FHT). Dann kann dieses Makro eine zusätzliche Belastung darstellen, die die Kommunikation vollends zusammenbrechen lässt.

Es ist daher sinnvoll, die Datums- und Uhrzeitupdates in Zeiten zu legen, die Funklastarm sind. Eine zusätzliche Entlastung kann man erreichen, indem Datum und Uhrzeit jeweils nur 1x pro Woche und an unterschiedlichen Tagen erledigt werde.


define fht dateupdate at *04:00:01 {if ($wday == 4)  { fhem("set hzg.* date") } }
define fht timeupdate at *04:00:01 {if ($wday == 5)  { fhem("set hzg.* date") } }


Eine solche Entzerrung ist insbesondere dann sinnvoll, wenn man eher viele FHT80 betreibt (mehr als ca. 6). Um das unter Variante B genannte Problem der Uhrzeit (time Befehl erst in der nächsten Stunde) zu entschärfen, ist es sinnvoll als Ausführungsuhrzeit immer die erste Sekunde einer Stunde zu wählen, also z.b.: xy:00:01