Ungenaue FHEM-Systemzeit berichtigen und Uhrzeit angelernter Geräte updaten

IM EINSATZ?

Dann schau dir UNSEREN LOXKURS an und profitiere von unserem Wissen!

Wer seinen FHEM-Server bereits über einen längeren Zeitraum einsetzt, wird unter Umständen schon einmal bemerkt haben, dass eine ungenaue FHEM-Systemzeit angezeigt wird und zeitbezogene Schaltvorgänge per at-Befehl nicht zum gewünschten Zeitpunkt ausgelöst wurden. In diesem Fall erhalten auch Logfiles bei kleineren Abweichungen von wenigen Sekunden inkorrekte Zeitstempel, wodurch exakte Auswertungen nicht mehr zuverlässig sind. Gerade bei größeren zeitlichen Abweichungen von mehreren Minuten oder Stunden wirkt sich eine falsche FHEM-Systemzeit dann auch besonders störend auf angelernte Geräte mit eingebautem Display aus, welche die aktuelle Uhrzeit gewöhnlich in regelmäßigen Abständen von FHEM zugespielt bekommen. Als Resultat zeigen dann bspw. HomeMatic Wandthermostate oder Stellantriebe keine korrekte Uhrzeit mehr im Display an.

Wie jeder FHEM-Anwender dieses Problem beheben und vor allem auch präventive Schutzmaßnahmen vor dauerhaft falschen Systemzeiten einrichten kann, wird im nachfolgenden Blogpost in wenigen Schritten erklärt.

Systemzeit auslesen und berichtigen

Als erstes wird eine Terminalverbindung mit dem FHEM-Server aufgebaut. Beim Einsatz eines Raspberry Pi 2 (Affiliate-Link) (hier beschrieben) lauten die Logindaten bei Verwendung des wheezy-Image (RASPBIAN) standardmäßig “pi” (Benutzername) und “raspberry” (Passwort). Wer einen Intel NUC (Affiliate-Link) mit Ubuntu als FHEM-Server einsetzt (hier beschrieben), hat die Benutzerdaten jeweils bei der Erstinstallation selbst festgelegt.

Im Falle des RPI erfolgt der Login also über den Terminalbefehl

ssh pi@IP-DES-RPI

und dem Passwort “raspberrypi”, sofern nicht in der Zwischenzeit manuell geändert.

Mit dem Befehl

date

kann die aktuelle Systemzeit, in diesem Beispiel “Wed Jun 24 16:54:47 CEST 2015” ermittelt werden.

Weiterhin wird die Systemzeit mit dem Befehl

sudo ntpd -q -g -x -n

per ntpd (Network Time Protocol daemon) aktualisiert. Dabei wird die aktuelle Uhrzeit von einem externen Onlinedienst abgefragt und als lokale Systemzeit übernommen.

Wer dann mit dem Befehl “date” immer noch keine korrekte Zeit angezeigt bekommt, hat evtl. eine falsche Zeitzone hinterlegt. Diese lässt sich, wie auch bereits im Artikel FHEM-Server auf dem Raspberry Pi in einer Stunde einrichten beschrieben, über den Befehl

sudo dpkg-reconfigure tzdata

prüfen und sofern es nötig ist,  entsprechend berichtigen.

Alternativ lässt sich auch noch mit einer veralteten Methode mit dem Befehl “sudo ntpdate -b ntps1-0.cs.tu-berlin.de” ein Update der Uhrzeit einspielen, was im Grunde genauso gut funktioniert und gerade auch beim Einsatz von Ubuntu ohne zusätzliche Software eingesetzt werden kann.

Damit der FHEM-Server das Update in regelmäßigen Abständen durchführt und die interne Uhr auf den neuesten Stand bringt, wird der Crontab mit dem nano-Editor angepasst.

Mit dem Befehl

sudo nano /etc/crontab

wird der vorhandene Inhalt des Crontab geöffnet, so dass am Ende der bestehenden Einträge in eine neu erstellte Zeile der Eintrag

0 5     * * *   root    ntpd -q -g -x -n

per Copy&Paste eingefügt werden kann. Zum Speichern der Datei wird die Tastenkombination STRG + o und zum Schließen des nano-Editors die Tastenkombination STRG + x verwendet.

Abschließend wird über den Terminalbefehl

sudo service cron restart

der Crontab neu initialisiert, so dass der FHEM-Server ab sofort täglich um 5 Uhr morgens die interne Systemzeit mithilfe des externen Onlinediensts aktualisiert bzw. berichtigt. Die Terminalverbindung kann jetzt geschlossen werden.

Interne Uhr von FHEM-Devices aktualisieren

Wie die neue Systemzeit auf die per FHEM angebundenen Geräte gepusht werden kann, wird am Beispiel des HomeMatic Funk Wandthermostat (Affiliate-Link) erläutert.

In der fhem.cfg wird dazu der Befehl

define TimeUpdate at *05:05 set BZ.Klima sysTime

genutzt, welcher ab sofort täglich um 5:05 Uhr die per HMLan-Adapter (Affiliate-Link) von FHEM ausgesendete Systemzeit auf das angebundene HomeMatic Raumthermostat mit dem Namen “BZ.Klima” überträgt.

HomeMatic Funk Raumthermostat

Wer auf einen Schlag mehrere Raumthermostate und/oder andere Devices selbst aktualisieren und nicht darauf warten möchte, bis sich FHEM nach einer Weile selbstständig darum kümmert, kann den Befehl auch entsprechend um weitere Geräte erweitern:

define TimeUpdate at *05:05 set BZ.Klima sysTime;; set WZ.Klima sysTime;; set SZ WZ.Klima sysTime

Natürlich braucht die Uhrzeit nicht an alle HomeMatic-Geräte übertragen zu werden, sondern nur an die mit eingebautem Display. Neben dem HomeMatic Funk Wandthermostat (Affiliate-Link) macht es also auch Sinn den HomeMatic Funk Stellantrieb bei einem Update zu berücksichtigen, sofern entsprechende Komponenten zur Heizungssteuerung eingesetzt werden.

HomeMatic Funk Stellantrieb

Aus meinem täglichen Leben

Aufmerksam geworden bin ich auf das Uhrzeit-Problem zum ersten Mal morgens im Badezimmer, nachdem ich aufgrund der vom Thermostat falsch angezeigten Zeit beinahe zu spät zu einem Termin aufbrach. Nach einer kurzen Fehlersuche war dann der Übeltäter ausfindig gemacht. Die virtuelle Maschine mit Ubuntu, welche FHEM seit einiger Zeit beherbergte, hatte eine falsche Systemzeit übernommen, welche ihr anscheinend vom Host-System, einem QNAP TS-670 Ultra mit der VM-Plattform “Virtualization Station” zugespielt worden war.

Seit der Einrichtung des beschriebenen automatischen Systemzeitupdates hatte ich bisher keinerlei Probleme mehr mit falschen Uhrzeiten auf den Displays, weshalb ich das HowTo allen FHEM-Anwendern wärmstens ans Herz legen möchte. Denn auch wer bisher noch keine Probleme mit falschen Systemzeiten hatte, kann die Einrichtung als präventive Vorsichtsmaßnahme verwenden. Eine Internetverbindung zur Onlineabfrage der korrekten Uhrzeit vorausgesetzt, hat man nach einmaliger Konfiguration ab sofort eine potenzielle Störquelle weniger, die einem irgendwann doch Kopfzerbrechen bereiten könnte.

Affiliate-Links

[easyazon_image align=”none” height=”110″ identifier=”B00H7UIMGA” locale=”DE” src=”http://ecx.images-amazon.com/images/I/71HTr6eAziL._SL1500_.jpg” tag=”meintechblog-150624-21″ width=”99″][easyazon_image align=”none” height=”110″ identifier=”B00CFF3410″ locale=”DE” src=”http://ecx.images-amazon.com/images/I/81u7bYahM1L._SL1500_.jpg” tag=”meintechblog-150624-21″ width=”95″][easyazon_image align=”none” height=”110″ identifier=”B00EOCCANU” locale=”DE” src=”http://ecx.images-amazon.com/images/I/41vE9Jj-fSL.jpg” tag=”meintechblog-150624-21″ width=”110″]

13 Kommentare
  1. Hallo Jörg,
    Interessante Darstellung. Danke!
    Was ist eine “virtuelle Ubuntu-Maschine”
    Meinst Du Virtuell Box?
    Gruß Michael

    1. Hi Michael,
      war von mir wohl etwas missverständlich ausgedrückt. Es handelt sich um eine virtuelle Maschine mit einer Ubuntu-Installation. Habe es im Blogpost soeben angepasst. Die Virtualisierungsplattform von QNAP heisst dabei “Virtualization Station” und basiert anscheinend auf VMWare, ganz sicher bin ich mir aber nicht.

      Grüße
      Jörg

  2. Hallo Jörg,

    eine kleine Anmerkung:

    “service cron restart” sollte um ein “sudo” ergänzt werden sonst kommt eine Fehlermeldung.

    Danke

    Gruß

    GrayDeath

  3. Hallo Jörg,

    danke für den Hinweis oder die Anleitung.
    Leider habe ich noch eine Verständnisfrage.

    Auf welchen Kanal vom HM-CC-RT-DN muss dieser Befehlt gesetzt werden?
    Das Gerät, den Climate ?

    Wie kann ich bestimmen, von welchen Server der Z.B. Raspi die Zeit holt?

    Danke

    Alex

    1. Hi Alex,
      du musst den Befehl

      set BZ.Klima sysTime

      direkt an das Hauptdevice senden, welches unter “thermostat” aufgeführt wird.

      Der Zeitserver kann bei

      sudo ntpd -q -g -x -n

      meines Wissens nach nicht explizit bestimmt werden.

      Im Falle des Befehls

      sudo ntpdate -b ntps1-0.cs.tu-berlin.de

      kann jedoch ein anderer ntp-Zeitserver (z.B. diese hier) angegeben werden.

      Grüße
      Jörg

  4. Tolle Anleitung.
    Hatte auch schon paar Zeitaussetzer, wodurch die Heizkörper zu spät angefangen haben zu heizen, und es morgens im Bad doch recht frisch wurde.
    Werde die Anleitung mal demnächst umsetzen, und Danke dafür.

  5. Danke für die super Anleitung!
    Bei mir war die UTC Universal Time anstelle der Local Time CEST eingestellt. Hätte ich nie gefunden… Danke.

  6. Nur eine Kritik:
    Das feste setzen der Zeit per Cron-Job kann auch negative Auswirkungen haben. Unix (Linux) mag eigentlich keine Zeitsprünge. Deshalb gibt es auch den ntp-Deamon. Dieser macht es etwas anders: Er setzt nicht die Zeit hart, sondern lässt die Systemuhr schneller/langsamer laufen. Da er die Externen Server “im Blick” behält, hält er damit die Uhrzeit aktuell.

    Optimal daher:
    – Beim booten Systemzeit wie beschrieben hart setzen
    – ntpd-Server konfigurieren/starten

  7. Eigentlich ist die Standartkonfig des ntpd schon mal sehr gut, d.h. man muß den Daemon “nur” starten lassen.

    Ob er am Anfang die Uhrzeit “hart” setzt, kommt auf die Distri an …. kann Dir schlecht dafür eine Anleitung geben …

    Beim Pi sollte aber eigentlich die Standartinstallation es schon “erledigen”.

  8. Vielen Dank für die klasse Anleitung.

    Ich habe seit gestern Abend einen merkwürdigen Fehler, die Zeitzone ist zwar richtig eingestellt, dennoch wird die Systemzeit exakt um eine Stunde falsch angegeben. Ich habe jetzt die Zeitzone mittels der Anleitung auf Finland geändert, damit ich wieder im richtigen Rhythmus bin und werde das beobachten.

    Kann man irgendwo überprüfen, ob der Updateserver korrekt funktioniert?
    Oder kann es noch eine andere falsche Einstellung geben?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte dir auch gefallen