Uhrzeit Differenz Script

Einrichtung, Nutzung und Hilfe zu RaspberryMatic (OCCU auf Raspberry Pi)

Moderatoren: jmaus, Co-Administratoren

Wichtelmann007
Beiträge: 222
Registriert: 26.02.2013, 21:11
Hat sich bedankt: 39 Mal

Uhrzeit Differenz Script

Beitrag von Wichtelmann007 » 29.11.2022, 18:52

Ich komme mit einem Script zur Berechnung einer Zeitdifferenz nicht weiter. Es soll die Brennerlaufzeit in Minuten, sowie im späteren Verlauf noch die Pause zwischen 2 Brennerstarts bzw vom letzten Stop bis zum nächsten Start berechnen. Das bekomme mit ein wenig Hilfe zum ersten Problem sicher selbst hin.

Ich logge meine Brennerzeiten der Heizung (mittels Shelly PlugS anhand der Leistung)
Bei Brennerstart wird ein Script aufgerufen:

Code: Alles auswählen

dom.GetObject('HZG_Brenner_start').State(system.Date("%H:%M Uhr"));
var HZG_Brenner_start = dom.GetObject("HZG_Brenner_start").Value(); !Wert der Systemvariable Brenner Start einlesen 
var HZG_Brenner_stop = dom.GetObject("HZG_Brenner_stop").Value(); !Wert der Systemvariable Brenner stop einlesen
Bei Brenner-Stop das nächste Script

Code: Alles auswählen

dom.GetObject('HZG_Brenner_stop').State(system.Date("%H:%M Uhr"));
var HZG_Brenner_dauer = (HZG_Brenner_stop - HZG_Brenner_start); !Differenz
dom.GetObject("HZG_Brenner_dauer").State(HZG_Brenner_dauer); !Schreiben der Brennder dauer in die Variable 
Start- und Stopzeiten werden in die SV geschrieben. SV ist vom Wert Zeichenkette.
Wie bekomme ich die Differenz, also Brennerlaufzeit berechnet?
Erweiterungsfrage bei Zeiten über 0:00 wird die Berechnungen nicht mehr stimmen. Wie kann ich da vorgehen?

Benutzeravatar
Baxxy
Beiträge: 10825
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 607 Mal
Danksagung erhalten: 2225 Mal

Re: Uhrzeit Differenz Script

Beitrag von Baxxy » 29.11.2022, 19:01

Brauchst du denn die lesbaren Strings in den SysVars? Für ne Visu?

Ansonsten würde ich gleich mit Unix-Timetamps rechen. Macht das ganze einfacher.

Oder mal das CUxD-State-Wrapper Device anschauen. Das hat auch schöne Statistiken.

Wichtelmann007
Beiträge: 222
Registriert: 26.02.2013, 21:11
Hat sich bedankt: 39 Mal

Re: Uhrzeit Differenz Script

Beitrag von Wichtelmann007 » 29.11.2022, 19:22

Baxxy hat geschrieben:
29.11.2022, 19:01
Brauchst du denn die lesbaren Strings in den SysVars? Für ne Visu?

Ansonsten würde ich gleich mit Unix-Timetamps rechen. Macht das ganze einfacher.

Oder mal das CUxD-State-Wrapper Device anschauen. Das hat auch schöne Statistiken.
Zunächst lasse ich mir die Daten nur per Script als Pushover senden.
Müsste doch per Script irgendwie einfach gehen?

Benutzeravatar
Henke
Beiträge: 1524
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Uhrzeit Differenz Script

Beitrag von Henke » 29.11.2022, 20:00

Code: Alles auswählen

integer timeSys = (system.Date("%F %T")).ToTime().ToInteger();

WriteLine ( timeSys.ToTime() # "==" #   timeSys );

integer timeVorher =  timeSys - 30 *60;

WriteLine ( timeVorher.ToTime() # "==" #   timeVorher );

integer diffInMin = (timeSys-timeVorher)/60;
WriteLine(diffInMin);

string h = ((diffInMin-system.TimeZoneOffset())*60).ToTime().Format("%H:%M h");
WriteLine(h);
  
Immer Timestamp speichern. Den kann man immer noch in eine Uhrzeit oder Datum umwandeln.

Edit:
Obwohl, wenn ich etwas darüber nachdenke...
Zusatzfrage: Wie löse ich die Aufgabe mit nur einer Systemvariable vom Typ Logikwert? :D
Zuletzt geändert von Henke am 29.11.2022, 20:11, insgesamt 1-mal geändert.

Benutzeravatar
Baxxy
Beiträge: 10825
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 607 Mal
Danksagung erhalten: 2225 Mal

Re: Uhrzeit Differenz Script

Beitrag von Baxxy » 29.11.2022, 20:06

Henke hat geschrieben:
29.11.2022, 20:00
integer timeSys = (system.Date("%F %T")).ToTime().ToInteger();
Ich mag's kurz und bündig... :wink:

Code: Alles auswählen

integer timeSys = localtime.ToInteger();

Benutzeravatar
Henke
Beiträge: 1524
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Uhrzeit Differenz Script

Beitrag von Henke » 29.11.2022, 20:14

Baxxy hat geschrieben:
29.11.2022, 20:06
localtime
Den kannte ich noch nicht. Schade das ich von den Scripts weg bin.
Wie sieht es mit der Zusatzaufgabe aus? Simpel, oder?

Tyfys
Beiträge: 550
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Uhrzeit Differenz Script

Beitrag von Tyfys » 29.11.2022, 20:21

Mein Senf dazu :

Ausgehend davon, dass ja die Brenner Start/Stoppzeiten in eine Stringvariable geschrieben werden.
Einfach die Timestamps nehmen :

Code: Alles auswählen

 string SysVarName = "HZG_Brenner_start";
 object SVrObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(SysVarName);
 if (SVrObj) {
     HZG_Brenner_start = SVrObj.Timestamp().ToTime() ;
 } else { 
    WriteLine("Variablenname ist falsch");
 }
 string SysVarName = "HZG_Brenner_stop";
 object SVrObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(SysVarName);
 if (SVrObj) {
    HZG_Brenner_stop = SVrObj.Timestamp().ToTime() ;
 } else { 
    WriteLine("Variablenname ist falsch");
 }

var HZG_Brenner_dauer =(((HZG_Brenner_stop-HZG_Brenner_start)-(3600+86400).ToTime()).Format("%d Tage %H:%M h")).Replace("31 Tage","00 Tage");
WriteLine(HZG_Brenner_dauer);
Sollte auch tagesübergreifend klappen.
Gruß
Harry

Benutzeravatar
Henke
Beiträge: 1524
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Uhrzeit Differenz Script

Beitrag von Henke » 29.11.2022, 20:29

Ziemlich perfekt, bis auf die Konstante statt system.TimeZoneOffset().
Und Baxxy wird SVrObj.Timestamp().ToTime() eher durch TimestampSeconds() ersetzen. :-)

Tyfys
Beiträge: 550
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Uhrzeit Differenz Script

Beitrag von Tyfys » 29.11.2022, 20:51

Henke hat geschrieben:
29.11.2022, 20:29
TimestampSeconds()
Wusste ich nicht, dass man das auch bei Systemvariablen benutzen kann.

Aber liefert system.TimeZoneOffset() nicht Minuten?
Zum Rechnen werden doch Sekunden gebraucht, oder ?

dann wäre 3600 von der Tipperei aber kürzer als system.TimeZoneOffset() * 60 :mrgreen:
Gruß
Harry

Benutzeravatar
Henke
Beiträge: 1524
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Uhrzeit Differenz Script

Beitrag von Henke » 29.11.2022, 21:02

Ist eine Stil Frage. 3600 sind ne Stunde, TimeZoneOffset() lässt das Script auch in England laufen.
TimestampSeconds() habe ich nicht getestet, aber da es eigentlich nur eine Umrechnung ist, muss es gehen.

Antworten

Zurück zu „RaspberryMatic“