UTC Timestamp umrechnen

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
Schalterrei
Beiträge: 142
Registriert: 05.01.2018, 17:26
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

UTC Timestamp umrechnen

Beitrag von Schalterrei » 20.07.2018, 15:02

Hallo zusammen,

ich verwende ein OpenWeather-Script um mir diverse Wetterdaten anzuzeigen.
Das Problem: Die Uhrzeiten für Sonnenauf- und Sonnenuntergang werden scheinbar als UTC-Value angegeben.

Dort gab es auch schon mal einen Hinweis vom User Alchy wie man das Problem angehen könnte.
Leider hab ich es nicht hinbekommen den entsprechenden Codeteil so anzupassen, dass es funktioniert.

Auszugsweise daher der Teil für den Sonnenaufgang:

Code: Alles auswählen

    !Schreiben von svSonnenaufgang
    if(svSonnenaufgang)
    {
       genString1='';genTime1=null;genString2='';
       genString1 = owSonnenaufgang.Substr(0,10)#' '#owSonnenaufgang.Substr(11);
       genTime1 = genString1.ToTime();
       genString2 = genTime1.Format("%d.%m.%Y %H:%M"#" Uhr");
       svObject = dom.GetObject(svSonnenaufgang);
       if (!svObject)
       {   
           svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
           svObject = dom.CreateObject(OT_VARDP);
           svObjectlist.Add(svObject.ID());
           svObject.Name(svSonnenaufgang);   
           svObject.ValueType(ivtString);
           svObject.ValueSubType(istChar8859);
           svObject.DPInfo('OpenWeatherMap - Sonnenaufgang');
           svObject.ValueUnit('');
           svObject.State(genString2);
           svObject.Internal(false);
           svObject.Visible(true);
           dom.RTUpdate(true);
       } else {
          svObject.State(genString2);
       }
       if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svSonnenaufgang#';'#genTime1);}
    }
.. kann mir dabei jemand helfen? Vielen Dank!

Xel66
Beiträge: 14145
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 582 Mal
Danksagung erhalten: 1497 Mal

Re: UTC Timestamp umrechnen

Beitrag von Xel66 » 20.07.2018, 15:35

Unabhängig vom Lösumgsansatz. Gibt es irgendeinen nachvollzieharen Grund, ein Datum, welches das System von sich aus zu Verfügung stellt, über ein "wackelige" Konstruktion als Webabfrage ins System zu holen? Regelmäßig gibt es Proböeme mit Webabfragen, wegen nicht erreichbarer Seiten oder Änderung der Webseite oder API oder what ever.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Schalterrei
Beiträge: 142
Registriert: 05.01.2018, 17:26
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: UTC Timestamp umrechnen

Beitrag von Schalterrei » 20.07.2018, 15:46

Hallo Xel66,

du hast schon Recht, ich habe mir die Werte auch inzwischen systemseitig abgeholt:

Code: Alles auswählen

dom.GetObject('Sonnenaufgang').State(system.SunriseTime("%H:%M"));
dom.GetObject('Sonnenuntergang').State(system.SunsetTime("%H:%M"));
Dennoch möchte ich ja auch etwas lernen, daher würde ich gern das ursprüngliche Script anpassen.
Statisch funktioniert diese Lösung:

Code: Alles auswählen

genTime1 = genString1.ToTime()+7200;
Aber auch nur solange noch Sommerzeit (+2h = 7200 Sekunden) ist. Spätestens bei der Zeitumstellung fällt einem das auf die Füße.

Es ist also im Sinne des Lerneffektes denn der Bequemlichkeit..

Xel66
Beiträge: 14145
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 582 Mal
Danksagung erhalten: 1497 Mal

Re: UTC Timestamp umrechnen

Beitrag von Xel66 » 20.07.2018, 15:52

In meinem Schichtscript habe ich die Sommerzeitweiche mit

Code: Alles auswählen

if (system.Date("%F").ToTime().IsDST() ==1){;  ! Haben wir Sommerzeit?
eingebaut. Im Fall der Sommerzeit korrigiere ich mit 7200 Sekunden und sonst mit 3600. Gefunden in der "HomeMatic-Script Dokumentation - Teil 1: Sprachbeschreibung" als Download bei eQ-3.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Schalterrei
Beiträge: 142
Registriert: 05.01.2018, 17:26
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: UTC Timestamp umrechnen

Beitrag von Schalterrei » 20.07.2018, 17:10

Ah, Klasse - vielen Dank!

Ist jetzt keine schöne Lösung, aber sollte funktionieren:

Code: Alles auswählen

   integer DST;
   if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;}
   else {DST = 3600;}
   genTime1 = genString1.ToTime()+DST;

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“