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:

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.


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.

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!