FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: kmatthias am 05 Dezember 2014, 13:55:49

Titel: Uhrzeit im Log <> localtime(time): 1 Sekunde Abweichung
Beitrag von: kmatthias am 05 Dezember 2014, 13:55:49
Bei der Steuerung der Lüftungsanlage ist mir aufgefallen, dass alle Befehle etwa 15 Minuten zu spät erzeugt werden. Soll die Anlage zum Beispiel um 8:00 Uhr auf Stufe 2 laufen, so passiert das erst um 8:15 Uhr. Die Steuerung erfolgt in der 99_MyUtils.pm in einer eigenen Methode. Dort habe ich mir jetzt die Localtime ins Log schreiben lassen. Wird mein "at" um 8 Uhr ausgeführt, so ist die Uhrzeit in der Perlmethode erst 7:59:59. Daher wird die Lüftung nicht auf Stufe 2 gesetzt, weil es noch nicht 8:00 Uhr ist.

Warum weichen die Uhrzeiten voneinander ab? Und wie bekomme ich es hin, dass ich auch die vermeintlich korrekte Uhrzeit nutzen kann? Ich habe hier diverse Beispiele mit "localtime()" gesehen. Bei mir funktioniert das aber nicht.

Folgende Definition des "at" läuft bei mir:

Internals:
   COMMAND    {control_air();}
   DEF        +*00:15 {control_air();}
   NAME       control_air
   NR         120
   NTM        14:00:00
   PERIODIC   yes
   RELATIVE   yes
   REP        -1
   STATE      Next: 14:00:00
   TIMESPEC   00:15
   TRIGGERTIME 1417784400
   TRIGGERTIME_FMT 2014-12-05 14:00:00
   TYPE       at
Attributes:
   alignTime  00:15
   room       Timer
   verbose    5


Im fhem-2014-12.log steht dann

2014.12.04 14:00:00 5: exec at command control_air
2014.12.04 14:00:00 3: Current Time: 13:59:59
2014.12.04 14:00:00 5: redefine at command control_air as +*00:15 {control_air();}


control_air() sieht so aus:

sub control_air() {
  #wird alle 15 Minuten aufgerufen
  my ($second, $minute, $hour, $Tag, $Monat,
      $Jahr, $wday, $Jahrestag, $Sommerzeit) = localtime();
 
  Log 3, "Current Time: $hour:$minute:$second";

  #noch mehr Coding ....
}

Titel: Antw:Uhrzeit im Log <> localtime(time): 1 Sekunde Abweichung
Beitrag von: Wuppi68 am 05 Dezember 2014, 14:07:05
es ist halt keine "Echtzeitanwendung"

mach deine AT doch einfach ein paar Sekunden später
Titel: Antw:Uhrzeit im Log <> localtime(time): 1 Sekunde Abweichung
Beitrag von: kmatthias am 05 Dezember 2014, 14:20:36
Ja, das wäre ein Workaround. Aber wie sage ich das dem "at"? Der ist ja auf 00:15 aligned. Muss ich mal die Commandref befragen.

EDIT: Verstehe ich aber trotzdem noch nicht so ganz. 14 Uhr ist 14 Uhr und nicht 13:59 Uhr. Woher weiß FHEM denn, wie spät es ist?
Titel: Antw:Uhrzeit im Log <> localtime(time): 1 Sekunde Abweichung
Beitrag von: betateilchen am 05 Dezember 2014, 14:34:16
Diese Sekundenabweichung ist kein Fehler, sondern technisch bedingt fest im Modul verankert. Das hat was mit Fällen zu tun, wo ein Tageswechsel Probleme machen könnte.

Wenn Du das attribut aligned auf 00:00:02 setzt sollte alles funktionieren wie Du möchtest.
Titel: Antw:Uhrzeit im Log <> localtime(time): 1 Sekunde Abweichung
Beitrag von: kmatthias am 05 Dezember 2014, 14:59:11
Danke betateilchen. Funktioniert!