Uhrzeit im Log <> localtime(time): 1 Sekunde Abweichung

Begonnen von kmatthias, 05 Dezember 2014, 13:55:49

Vorheriges Thema - Nächstes Thema

kmatthias

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 ....
}


Wuppi68

es ist halt keine "Echtzeitanwendung"

mach deine AT doch einfach ein paar Sekunden später
FHEM unter Proxmox als VM

kmatthias

#2
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?

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

kmatthias