IPS_GetEvent UNIX Timestamp problem

Hallo Leute,

so langsamm bin ich am verzweifeln… Ich habe ein Ereignis, was meine Teichpumpe jeden morgen um 09.00 Uhr einschaltet.

Die Uhrzeit schreibe ich mittels einer eigenen PHP seite mit IPS_SetEventCyclicTimeBounds.

Das klappt zeit jahren super!!!

Jetzt ,möchte ich jedoch die Sartzeit mit dem Befehl IPS_GetEvent auslesen:

$EreignisID = 10590;
$EreignisInfo = IPS_GetEvent($EreignisID);
$von_time = $EreignisInfo["CyclicTimeFrom"];

echo $von_time;

Dieser Unix Timestamp (133447320) ist 09.00 Uhr.

Gebe ich den mittels

echo date("H",$von_time);
echo date("i",$von_time);

aus, kommt aber 08 59 heruas ???

Gegen Test von mir war:

$richtig = mktime("09", "00", 0);
echo $richtig;
echo date("H",$richtig);
echo date("i",$richtig);

Der Timestamp (133447320) ist gleich, die Huhrzeit aber 09 00 ?!?!?

Was mamch ich falsch? Ich verstehe es einfach nicht.

Danke euch schon mal!

Grüße

Andy


echo date("H", 1334473200).':'.date("i", 1334473200);

Ist 09:00, wie es sein soll. Bei Deinem Timestamp fehlt übrigens die 0 am Ende.

Hallo Thomas,

danke für deine Hilfe. Ich hab den TimeStamp falsch ins Forum kopiert…die 0 ist hinten dran.

Der Code:

$EreignisID = 10590;
$EreignisInfo = IPS_GetEvent($EreignisID);
$von_time = $EreignisInfo["CyclicTimeFrom"];

echo "TimeStamp:".$von_time;
echo " Stunde: ".date("H",$von_time);
echo " Minute: ".date("i",$von_time);

Erzeugt die Ausgabe: TimeStamp:1334473200 Stunde: 08 Minute: 59

Folgender Code:

$von_time = mktime("09", "00", 0);
echo "TimeStamp:".$von_time;
echo " Stunde: ".date("H",$von_time);
echo " Minute: ".date("i",$von_time);

Erzeugt die Ausgabe: TimeStamp:1334473200 Stunde: 09 Minute: 00

Das ist mein Problem!

Grüße

Andy


$von_time = 1334473200;

echo "TimeStamp:".$von_time;
echo " Stunde: ".date("H",$von_time);
echo " Minute: ".date("i",$von_time);

Gibt bei mir:
TimeStamp:1334473200 Stunde: 09 Minute: 00

Hallo Thomas,

habs vielleicht ein bissl unverständlich beschrieben.

Wenn ich die Variable $von_time mit einem mktime erzeuge kommt ja auch bei mir 09.00 Uhr heraus. Nur wenn ich mein Ereignis auslese, kommt 08:59 Uhr heruas, obwohl der Timestamp der gleiche ist?!?

Im IpSymcon wird das Ereignis auch mit 09.00 Uhr angzeigt.

Mein Problem ist, das der erzeugte TimeStamp (1334473200) sich unterschiedlich ausgibt, von wo aus er erzeugt wird.

IPS_GetEvent -> 1334473200 -> 08.59 Uhr
mktime -> 1334473200 -> 09.00 Uhr

Wie du in den 2 Beispieln im Letzten Beitrag von mir siehst, sind die TimeStamp absulut identisch, der Befehl date… macht aber 2 Unterschiedliche Uhrzeiten daraus.

Witzig ist, wenn ich das Ereignis auf 08:59 stelle, erzeugt mein Code ein TimeStamp von 1334473140, was dann 08:59 ausgegeben wird. Funktioniert also richtig. Ändere ich im IPS das Ereignis wieder aif 09.00 Uhr, macht er wieder den Fehler (TimeStamp 1334473200 08:59)

?!?!

Darf ich jetzt meine Aktoren nicht zur vollen Stunde einschalten :wink:

Grüße

Andy

Zeig mal das ganze Script, in welchem Du den Unix Timestamp speicherst und die Uhrzeit als String übergibst.

Hallo Thomas,

gerno doch…

Speichern:

$EreignisID = 10590;
$text1 = "09";
$text2 = "00";
IPS_SetEventCyclic($EreignisID, 2, 1, 0, 0, 0, 0);   //Täglich 1x
IPS_SetEventCyclicTimeBounds($EreignisID, mktime($text1, $text2, 0), 0);

Die Variablen $text1 und $text2 kommen eigendlich aus meinem html Formular. (Hier mal statisch zugewiesen)

Das Ereignis wird dann wie im Anhang gespeichert.Dies habe ich seit 2 Jahren ohne Fehler im Einsatz.

Jetzt möchte ich aber auch den aktuell Stand auslesen. Das versuche ich verzweifelt mit:

$EreignisID = 10590;
$EreignisInfo = IPS_GetEvent($EreignisID);
$test = $EreignisInfo["CyclicTimeFrom"];
echo "TimeStamp:".$von_time;
echo " Stunde: ".date("H",$von_time);
echo " Minute: ".date("i",$von_time);

Die Werte die dort ermitelt werden, sollen dann (wenn es funktioniert) in die Variablen $text1 und $text2 geschrieben werden.

Daran hänge ich nun.

Andy

Ereignis.jpg

Probiere mal

$von_time = intval($EreignisInfo["CyclicTimeFrom"]);

Dann bekommst du
TimeStamp:1334473199 Stunde: 08 Minute: 59 Sekunde: 59

Hallo 1007,

mit der Syntax ergibt sich leider kein Unterschied, außer das er immer 1 Minute abzieht.

09.00 Uhr ergbit 08:59
08:59 Uhr ergibt 08:57

Bin aber mit deinem Ansatz, auf eine ganz Tolle Lösung gekommen.

$EreignisID = 10590;
$EreignisInfo = IPS_GetEvent($EreignisID);
$von_time = $EreignisInfo["CyclicTimeFrom"];
$von_time = $von_time + 1;
$text1a = date("H",$von_time);
$text2a = date("i",$von_time);

Warum auch immer, die beiden identischen TimeStamps von dem date Befehl unterschiedlich convertiert werden, rechne ich einfach 1 Sekunde drauf, was für meine Stunde / Minuten ausgabe egal ist.

Verstehn tu ich es trotzdem nicht, die Tolle Lösung funktionert aber.

Danke dir Thomas und 1007!

Grüße

Andy

Hab mal ein paar Uhrzeiten getestet. Bei einigen gehts bei anderen nicht.
Es ist auch keine Minute Unterschied sondern 1 Sekunde.
Hab alle probiert von 0 - 12 Uhr . Bei denen die ohne Rest durch 3 teilbar sind
tritt der Fehler auf. 3Uhr - 6Uhr - 9Uhr - 12Uhr
Warum auch immer :confused:

Seltsam:confused:

Zwei Dinge noch:

  1. $text1 = „09“; / $text2 = „00“; => IPS_SetEventCyclicTimeBounds($EreignisID, mktime($text1, $text2, 0), 0);
    mktime verlangt Integer, keinen String, wobei das der PHP Interpreter hier sicherlich richtig umsetzt.
  2. @paresy: Mich würde interessieren warum in IPS_SetEventCyclicTimeBounds der Unixtimestamp als float Wert übergeben wird, das kenne ich nur wenn ms verwendet werden sollen/können?