Hoffe bin hier richtig mit meinem Problem und habs nirgends übersehen
Ich wollte gerade eine Laufzeit für eine Pumpe programmieren, dazu hätte ich gerne das Variablenprofil ~UnixTimestampTime verwendet.
Jetzt ist mir aufgefallen, sobald ich bei der Variable den Wert 1 (also 1 Sekunde) schreibe, sehe ich in der Spalte Wert folgendes „01:00:01“
Denke mal es liegt jetzt gerade an der Sommerzeit, habe die Zeitzone mal testweise auf London gestellt und da passts.
Es betrifft übrigens auch das Profil ~UnixTimestamp
Habs bei 4.1 und bei 4.2 getestet -> bei beiden gleiches Verhalten.
du kannst da sehr wohl das Profil ~UnixTimeStampTime benutzen. Du musst allerdings verstehen, dass die Umrechnung der abgespeicherten Zahl manuell etwas komplizierter wäre. Aber dafür gibt es glücklicherweise in PHP ein paar Hilfsfunktionen.
Zum einen gibt es mktime um die Variablen zu initialisieren. Wenn wir nur bei Uhrzeiten bleiben, kannst mktime mit drei Argumenten aufrufen, also beispielsweise:
$time = mktime(1,30,0);
Das würde in der Variable $time die Uhrzeit 1:30:00 abspeichern bzw. 1 Stunde, 30 Minuten und 0 Sekunden, wenn du es als Dauer siehst.
Da du ja aber mit den Zahlen auch arbeiten möchtest, musst du sie auch wieder aus dem Zeitstempel auslesen. Dafür benutzt du die Funktion date. So kannst du beispielsweise mit
Ich habe für ein Modul 2 Variablen, über welche man eine Zeitspanne (von X bis Y) einstellen kann. Also z.B. von 19:00 bis 7:00 Uhr.
Da ich an das Gerät die Werte als String (HH:SS) übergeben muss, habe ich mir Funktionen zur Umrechnung geschrieben.
Funktioniert soweit alles wunderbar…aber:
>> Lese ich die Werte vom Gerät aus, rechne das in Integer-Sekunden um und schreibe es in die Variable, dann steht da z.B. „20:00“ statt den eigentlichen „19:00“ - obwohl die Sekunden stimmen.
>> Setze ich den Wert übers WebFront auf „20:00“ Uhr, dann wird ans Gerät "19:00"übertragen.
Ich könnte ja theoretisch die eine Stunde immer einberechnen, aber das ist ja nur bei Sommerzeit der Fall, wenn ich das richtig verstanden habe…?!
Wie kann ich das Variablenprofil „~UnixTimestampTime“ zur Einstellung der Stunden verwenden? Ich würde ungern einfach eine TextBox verwenden mit einem String.
Irgendwie erschließt sich mir die Logik hier nicht, warum Symcon da intern noch etwas dran drehen muss. Wenn ich 19:00 einstelle, dann will ich auch den Wert in Sekunden in der Variable haben und nicht den Wert „mit Umrechnung“…
Du musst als Grundlage immer UTC nutzen, mit lokaler Zeit rechnet niemand. UTC will auch IPS haben und ein Unix Timestamp ist auch immer UTC.
Wenn dein Geräte die Zeit in lokaler Zeit haben will, muss du selber umrechnen.
Funktionen dazu bietet PHP genug.
Michael
Ich will nur, dass der User einfach „19:00“ im WebFront auswählen kann und in der Integer-Variable erwarte ich dann 68400 Sekunden - und nicht wenn ich 20:00 im WebFront auswähle, dass ich dann 68400 in der Variable stehen habe
Ich brauche die Sekunden eigentlich gar nicht - muss die Integer Variable aber ja verwenden, damit ich dem User die Möglichkeit geben will über „~UnixTimestampTime“ die Stunden und Minuten einstellen zu lassen - statt über eine TextBox mit einem String.
Irgendwo fehlt mir wohl ein Puzzleteil, um den Sinn zu verstehen
UnixTimestamp ist in UTC kodiert. Nutz bei der Weitergabe einfach immer die date(„H:i:s“, $timestamp) Funktion und dann kommt auch genau das heraus, was du erwartest. Und beim Erstellen einfach mktime verwenden.
Habe das Modul eben nochmal auf Integer-Variablen mit ~UnixTimestampTime umgebaut (Code neu geschrieben)…und wie ich meine genauso wie vorhin - aber irgendwas hab ich vorhin wohl anders/falsch gemacht. Denn jetzt spucken meine Funktionen genau das aus was sie sollen und auch im/übers WebFront stimmt/funktioniert alles.
Damit nicht noch jemand sich so doof anstellt wie ich vorhin (was auch immer der Fehler war), hier der Code dazu:
<?
$timeInt = TimeConvert_HoursMinutes_to_Seconds('19:00');
echo "Zeit in Sekunden = ".$timeInt.PHP_EOL;
$timeString = TimeConvert_Seconds_to_HoursMinutes($timeInt);
echo "Zeit als String = ".$timeString.PHP_EOL;
function TimeConvert_HoursMinutes_to_Seconds($timeString)
{
return strtotime('01.01.1970 '.$timeString);
}
function TimeConvert_Seconds_to_HoursMinutes($seconds)
{
return date('H:i', $seconds);
}