FHT: Datum und Zeit von FHEM setzen lassen: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
Läuft Fhem auf einem Rechner mit aktuellem Datum, bietet es sich an, Datum und Uhrzeit regelmäßig an alle FHTs zu senden:
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==
  <nowiki>define fht_setdate notify fht_setdate { \
  <nowiki>define fht_setdate notify fht_setdate { \
  if ( $year gt 2010 ) {\
  if ( $year gt 2010 ) {\
Zeile 18: Zeile 20:




==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ächsten''Stunde 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:
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ächsten''Stunde 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:


Zeile 31: Zeile 34:
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.
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!
 
==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
 
 
 
[[Kategorie:Code Snippets]]
[[Kategorie:Code Snippets]]

Version vom 31. Mai 2013, 23:38 Uhr

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