Uhrzeit Differenz Script

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

Moderatoren: jmaus, Co-Administratoren

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

Re: Uhrzeit Differenz Script

Beitrag von Tyfys » 02.12.2022, 15:32

Wenn du die Minuten- Brenndauer aufsummieren willst, musst du natürlich auch vorher den alten Wert auslesen.
Da definierts du gleich deine Skriptvariable, dann berechnen und wieder in die Variable schreiben.

Code: Alles auswählen

!alten Wert holen
var HZG_Brenner_dauer_gesamt =dom.GetObject("HZG_Brenner_dauer_gesamt").Value();
 
!kummulieren
HZG_Brenner_dauer_gesamt =HZG_Brenner_dauer_gesamt+HZG_Brenner_dauer;

!Schreiben der neuen gesamt Brenndauer in die Variable
dom.GetObject("HZG_Brenner_dauer_gesamt").State(HZG_Brenner_dauer_gesamt);
-(3600+86400).ToTime()).Format("%H:%M h")).Replace("31 Tage","00 Tage") darf bei der Berechnung nicht verwendet werden,
weil daraus ja deine Anzeige-Zeichenkette gemacht wird.
Gruß
Harry

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

Re: Uhrzeit Differenz Script

Beitrag von Wichtelmann007 » 03.12.2022, 13:10

Glaube damit hatte ich auch schonmal experimentiert.
So gehts aber nicht.

Ggf weil die Variable formatiert ist?
In der Ausgabe werden die Werte offenbar nur hintereinander geschrieben... Ausgabe der HZG_Brenner_dauer_gesamt ist demnach also
00:18 h00:15 h00:11 h

Code: Alles auswählen

var HZG_Brenner_dauer =(((HZG_Brenner_stop-HZG_Brenner_start)-(3600+86400).ToTime()).Format("%H:%M h")).Replace("31 Tage","00 Tage");

! alten Wert holen
var HZG_Brenner_dauer_gesamt =dom.GetObject("HZG_Brenner_dauer_gesamt").Value();

! kummulieren
HZG_Brenner_dauer_gesamt =HZG_Brenner_dauer_gesamt+HZG_Brenner_dauer;

! Schreiben der neuen gesamt Brenndauer in die Variable
dom.GetObject("HZG_Brenner_dauer_gesamt").State(HZG_Brenner_dauer_gesamt);

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

Re: Uhrzeit Differenz Script

Beitrag von Henke » 03.12.2022, 13:19

Ich kann das Drama nicht mehr mit ansehen. Poste bitte mal dein ganzes Script, dann bringe ich da Ordnung rein.

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

Re: Uhrzeit Differenz Script

Beitrag von Wichtelmann007 » 03.12.2022, 13:44

Drama :shock:

Code: Alles auswählen

! Pushover - Skript HZG Info
! ------------------------------

dom.GetObject('HZG_Brenner_stop').State(system.Date("%H:%M Uhr"));

 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("%H:%M h")).Replace("31 Tage","00 Tage");

! alten Wert holen
var HZG_Brenner_dauer_gesamt =dom.GetObject("HZG_Brenner_dauer_gesamt").Value();

! kummulieren
HZG_Brenner_dauer_gesamt =HZG_Brenner_dauer_gesamt+HZG_Brenner_dauer;

! Schreiben der neuen gesamt Brenndauer in die Variable
dom.GetObject("HZG_Brenner_dauer_gesamt").State(HZG_Brenner_dauer_gesamt);

dom.GetObject("HZG_Brenner_dauer").State(HZG_Brenner_dauer); ! Schreiben der Brenner dauer in die Variable 


!__Pushover Keys
string po_api_user="xxx";
string po_api_token="xxx";

!__Nachricht
string po_title="Brenner";
string Zeilenumbruch = "\n";

var OWtemp = dom.GetObject("owTemperatur").Value().ToString(1);
string po_message=  "AUS / Aussen " # OWtemp #" C" #Zeilenumbruch #"Laufzeit " # HZG_Brenner_dauer;
! string po_message= po_message + "Brennerpause: " # HZG_Brenner-pause #;


string po_sound="incoming";
string po_priority="-1";

!___Nur benoetigt wenn Prioritaet auf Emergency (1) gesetzt ist
string po_retry="30";
string po_expires="3600";

!___Erlaeuterungen
! Sounds: pushover, bike, bugle, cashregister, classical, cosmic, falling, gamelan, incoming, intermission, magic, mechanical, pianobar, siren, spacealarm, tugboat, alien, climb, persistent, echo, updown, none
! Prioritaeten: 0=Normal; 1=High (AudioVibration auch waehrend quiet hour); 2=Emergency (Meldung Muss bestätigt werden, solange sound/Vibration); -1=Low ; -2=Lowest
! Bei Prio 2: po_retry gibt an (in sekunden), wie hauefig eine Nachricht vom Server geschickt wird (z.B. alle 30s)
! Bei Prio 2: po_expires gibt an (in Sekunden), wie lange nachrichten geschickt werden sollen. Bestätigt der User, stoppt die Benachrichtigung. Beispiel: Alle 30 sekunden wird eine Nachricht geschickt, das passiert eine Stunde lang (1 Stunde = 3600 sekunden).

!------ NICHT MODIFIZIEREN-------
string po_request;
if(po_priority=="2"){
po_request="/usr/local/addons/cuxd/curl -X POST -k -H \"Content-Type: application/x-www-form-urlencoded\" -d \"token=" # po_api_token # "&user=" # po_api_user # "&title=" # po_title # "&priority="# po_priority # "&sound=" # po_sound # "&retry="# po_retry # "&expire=" # po_expires # "&message=" # po_message # "\" https://api.pushover.net/1/messages.json";
}
else{
po_request="/usr/local/addons/cuxd/curl -X POST -k -H \"Content-Type: application/x-www-form-urlencoded\" -d \"token=" # po_api_token # "&user=" # po_api_user # "&title=" # po_title # "&priority="# po_priority # "&sound=" # po_sound # "&message=" # po_message # "\" https://api.pushover.net/1/messages.json";
}
dom.GetObject("CUxD.CUX2801001:3.CMD_EXEC").State(po_request);

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

Re: Uhrzeit Differenz Script

Beitrag von Henke » 03.12.2022, 14:39

Ungetestet mal aufgeräumt.

var hab_mich_lieb_ich_liebe_lange_Texte = dom.GetObject("hab_mich_lieb_ich_liebe_lange_Texte");
kann alles ein. String, Float, eine Systemvariable oder ein Device, der so heißt

var SysVar = dom.GetObject(ID_SYSTEM_VARIABLES).Get("hab_mich_lieb_ich_liebe_lange_Texte");
Ist eine Object auf eine Systemvariable, also nennen wir es auch so.

object oHmlIllt = dom.GetObject(ID_SYSTEM_VARIABLES).Get("hab_mich_lieb_ich_liebe_lange_Texte");
Das erste "o" sagt mir immer welcher Typ es ist.

Generell immer nur einmal eine Definition vornehmen.
string sSysVar_HB_start - Der Name der Systemvariable
object oSVr_HB_start - das Object Systemvariable

Und damit war recht schnell zu finden, das du Zeit/integer mit String addierst;

15 + Apfel = 15 Äpfel? :D

Hoffe das läuft so, den unteren Teil habe ich mir nicht angesehen.

LG
Michael

Code: Alles auswählen

! Pushover - Skript HZG Info
! ------------------------------

string sSysVar_HB_start = "HZG_Brenner_start";
string sSysVar_HB_stop =  'HZG_Brenner_stop';
string sSysVar_HB_dauer =  'sHZG_Brenner_dauer';
string sSysVar_HB_gesamt =  'HZG_Brenner_dauer_gesamt';

object oSVr_HB_start = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sSysVar_HB_start);
if (!oSVr_HB_start) {    WriteLine( oSVr_HB_start # " Variablenname ist falsch"); quit; }

object oSVr_HB_stop = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sSysVar_HB_stop);
if (!oSVr_HB_stop) {   WriteLine( sSysVar_HB_stop # " Variablenname ist falsch"); quit; }

object oSVr_HB_gesamt = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sSysVar_HB_gesamt);
if (!oSVr_HB_gesamt) {   WriteLine( sSysVar_HB_gesamt # " Variablenname ist falsch"); quit; }

object oSVr_HB_dauer = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sSysVar_HB_dauer);
if (!oSVr_HB_dauer) {   WriteLine( sSysVar_HB_dauer # " Variablenname ist falsch"); quit; }

oSVr_HB_stop.State( localtime );
time tHB_start = oSVr_HB_start.Timestamp().ToTime() ;
time tHB_stop = oSVr_HB_stop.Timestamp().ToTime() ;

time tHB_dauer = ((tHB_stop-tHB_start)-(3600+86400)).ToTime();
string sHZG_Brenner_dauer = tHB_dauer.Format("%H:%M h").Replace("31 Tage","00 Tage");

! alten Wert holen
integer HZG_Brenner_dauer_gesamt =oSVr_HB_gesamt.Value();

! kummulieren
HZG_Brenner_dauer_gesamt =HZG_Brenner_dauer_gesamt+tHB_dauer.ToInteger();

! Schreiben der neuen gesamt Brenndauer in die Variable
oSVr_HB_gesamt.State(HZG_Brenner_dauer_gesamt);

oSVr_HB_dauer.State(sHZG_Brenner_dauer); ! Schreiben der Brenner dauer in die Variable


!__Pushover Keys
string po_api_user="xxx";
string po_api_token="xxx";

!__Nachricht
string po_title="Brenner";
string Zeilenumbruch = "\n";

var OWtemp = dom.GetObject("owTemperatur").Value().ToString(1);
string po_message=  "AUS / Aussen " # OWtemp #" C" #Zeilenumbruch #"Laufzeit " # sHZG_Brenner_dauer;
! string po_message= po_message + "Brennerpause: " # HZG_Brenner-pause #;


string po_sound="incoming";
string po_priority="-1";

!___Nur benoetigt wenn Prioritaet auf Emergency (1) gesetzt ist
string po_retry="30";
string po_expires="3600";

!___Erlaeuterungen
! Sounds: pushover, bike, bugle, cashregister, classical, cosmic, falling, gamelan, incoming, intermission, magic, mechanical, pianobar, siren, spacealarm, tugboat, alien, climb, persistent, echo, updown, none
! Prioritaeten: 0=Normal; 1=High (AudioVibration auch waehrend quiet hour); 2=Emergency (Meldung Muss bestätigt werden, solange sound/Vibration); -1=Low ; -2=Lowest
! Bei Prio 2: po_retry gibt an (in sekunden), wie hauefig eine Nachricht vom Server geschickt wird (z.B. alle 30s)
! Bei Prio 2: po_expires gibt an (in Sekunden), wie lange nachrichten geschickt werden sollen. Bestätigt der User, stoppt die Benachrichtigung. Beispiel: Alle 30 sekunden wird eine Nachricht geschickt, das passiert eine Stunde lang (1 Stunde = 3600 sekunden).

!------ NICHT MODIFIZIEREN-------
string po_request;
if(po_priority=="2"){
po_request="/usr/local/addons/cuxd/curl -X POST -k -H \"Content-Type: application/x-www-form-urlencoded\" -d \"token=" # po_api_token # "&user=" # po_api_user # "&title=" # po_title # "&priority="# po_priority # "&sound=" # po_sound # "&retry="# po_retry # "&expire=" # po_expires # "&message=" # po_message # "\" https://api.pushover.net/1/messages.json";
}
else{
po_request="/usr/local/addons/cuxd/curl -X POST -k -H \"Content-Type: application/x-www-form-urlencoded\" -d \"token=" # po_api_token # "&user=" # po_api_user # "&title=" # po_title # "&priority="# po_priority # "&sound=" # po_sound # "&message=" # po_message # "\" https://api.pushover.net/1/messages.json";
}
dom.GetObject("CUxD.CUX2801001:3.CMD_EXEC").State(po_request);

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

Re: Uhrzeit Differenz Script

Beitrag von Wichtelmann007 » 03.12.2022, 19:19

Erstmal vielen Dank! :D
Verstehe zwar noch nicht alles, aber es ist übersichtlich.

Auf Anhieb hats aber mal nicht geklappt

Code: Alles auswählen

string sSysVar_HB_start = "HZG_Brenner_start";
string sSysVar_HB_stop =  'HZG_Brenner_stop';
string sSysVar_HB_dauer =  'sHZG_Brenner_dauer';
string sSysVar_HB_gesamt =  'HZG_Brenner_dauer_gesamt';
Damit wird einer (Virtuellen) Variable ein Name (in dem Fall der meinen SV) zugewiesen?
Bei der Ersten hast Du "xxx", bei den anderen 'xxx' - das ist so korrekt? Habs mal bei allen auf Anführungszeichen geändert.

Ein Problem gibt es mit der Formatierung der Zeit - und damit vermutlich der Rechnung.

Im Startscript wird der Brennerstart mit

Code: Alles auswählen

dom.GetObject('HZG_Brenner_start').State(system.Date("%H:%M Uhr"));
angelegt, erscheint also zB als 19:14 Uhr

Wird hiermit die Stop-Zeit angelegt?

Code: Alles auswählen

oSVr_HB_stop.State( localtime );
time tHB_start = oSVr_HB_start.Timestamp().ToTime() ;
time tHB_stop = oSVr_HB_stop.Timestamp().ToTime() ;
Dann muss da vermutlich die Startzeit wieder raus, die wird in einem anderen Script gesetzt.
Die Brenner-Stop-Zeit wird derzeit so angelegt: 2022-12-03 18:59:00

Ich versuch mal weiter durchzusteigen...

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

Re: Uhrzeit Differenz Script

Beitrag von Henke » 03.12.2022, 19:28

Der obere Teil noch mal übersichtlicher und den "s" Fehler behoben:

Code: Alles auswählen

object oSVr_HB_start = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_start');
if (!oSVr_HB_start) {    WriteLine( "Start Variablenname ist falsch"); quit; }

object oSVr_HB_stop = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_stop');
if (!oSVr_HB_stop) {   WriteLine( "Stop Variablenname ist falsch"); quit; }

object oSVr_HB_gesamt = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_dauer_gesamt');
if (!oSVr_HB_gesamt) {   WriteLine( "Gesamt Variablenname ist falsch"); quit; }

object oSVr_HB_dauer = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_dauer');
if (!oSVr_HB_dauer) {   WriteLine( "Dauer Variablenname ist falsch"); quit; }
Da sollte oSVr_HB_start hin, also
oSVr_HB_start.State( localtime );
und das ist dann laut Baxxy gleich
dom.GetObject('HZG_Brenner_start').State(system.Date("%H:%M Uhr"));

dom.GetObject('HZG_Brenner_start') ist oSVr_HB_start, siehe oben

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

Re: Uhrzeit Differenz Script

Beitrag von Wichtelmann007 » 03.12.2022, 21:00

Ich habe beide Scripte nochmal angepasst, soweit funktioniert es, bis auf die Angabe der Gesamt-Brenner-Laufzeit.

Dort habe ich aktuell folgenden Wert in der SV HZG_Brenner_dauer_gesamt:
-88740-89065-88860
Hier nochmal das Script, welches beim Brennerstart läuft

Code: Alles auswählen

! Brenner Start Pushover - Skript HZG Info
! ------------------------------

string sSysVar_HB_start = "HZG_Brenner_start";
string sSysVar_HB_stop =  "HZG_Brenner_stop";
string sSysVar_HB_dauer =  "HZG_Brenner_dauer";
string sSysVar_HB_gesamt =  "HZG_Brenner_dauer_gesamt";
string sSysVar_HB_pause =  "HZG_Brenner_pause";

object oSVr_HB_start = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_start');
if (!oSVr_HB_start) {    WriteLine( "Start Variablenname ist falsch"); quit; }

object oSVr_HB_stop = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_stop');
if (!oSVr_HB_stop) {   WriteLine( "Stop Variablenname ist falsch"); quit; }

object oSVr_HB_gesamt = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_dauer_gesamt');
if (!oSVr_HB_gesamt) {   WriteLine( "Gesamt Variablenname ist falsch"); quit; }

object oSVr_HB_dauer = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_dauer');
if (!oSVr_HB_dauer) {   WriteLine( "Dauer Variablenname ist falsch"); quit; }

object oSVr_HB_pause = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_pause');
if (!oSVr_HB_pause) {    WriteLine( "Start Variablenname ist falsch"); quit; }

oSVr_HB_start.State( localtime );

time tHB_start = oSVr_HB_start.Timestamp().ToTime() ;
time tHB_stop = oSVr_HB_stop.Timestamp().ToTime() ;

time tHB_pause = ((tHB_start-tHB_stop)-(3600+86400)).ToTime();
string sHZG_Brenner_pause = tHB_pause.Format("%H:%M h").Replace("31 Tage","00 Tage");
Hier das Script für Brenner-Stop

Code: Alles auswählen

! Brenner STop Pushover - Skript HZG Info
! ------------------------------

string sSysVar_HB_start = "HZG_Brenner_start";
string sSysVar_HB_stop =  "HZG_Brenner_stop";
string sSysVar_HB_dauer =  "HZG_Brenner_dauer";
string sSysVar_HB_gesamt =  "HZG_Brenner_dauer_gesamt";

object oSVr_HB_start = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_start');
if (!oSVr_HB_start) {    WriteLine( "Start Variablenname ist falsch"); quit; }

object oSVr_HB_stop = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_stop');
if (!oSVr_HB_stop) {   WriteLine( "Stop Variablenname ist falsch"); quit; }

object oSVr_HB_gesamt = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_dauer_gesamt');
if (!oSVr_HB_gesamt) {   WriteLine( "Gesamt Variablenname ist falsch"); quit; }

object oSVr_HB_dauer = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_dauer');
if (!oSVr_HB_dauer) {   WriteLine( "Dauer Variablenname ist falsch"); quit; }

oSVr_HB_stop.State( localtime );
time tHB_start = oSVr_HB_start.Timestamp().ToTime() ;
time tHB_stop = oSVr_HB_stop.Timestamp().ToTime() ;

time tHB_dauer = ((tHB_stop-tHB_start)-(3600+86400)).ToTime();
string HZG_Brenner_dauer = tHB_dauer.Format("%H:%M h").Replace("31 Tage","00 Tage");

! alten Wert holen
integer HZG_Brenner_dauer_gesamt =oSVr_HB_gesamt.Value();

! kummulieren
HZG_Brenner_dauer_gesamt =HZG_Brenner_dauer_gesamt+tHB_dauer.ToInteger();

! Schreiben der neuen gesamt Brenndauer in die Variable
oSVr_HB_gesamt.State(HZG_Brenner_dauer_gesamt);

oSVr_HB_dauer.State(sHZG_Brenner_dauer); ! Schreiben der Brenner dauer in die Variable

Mir fällt gerade noch eine Ungereimtheit auf: obwohl die SV HZG_Brenner_dauer einen Wert von 00:15 h zeigt, gibt mir das Script per Pushover eine Laufzeit von 0:17 h aus

Hier noch das entsprechende Pushover-Script

Code: Alles auswählen

var OWtemp = dom.GetObject("owTemperatur").Value().ToString(1);
string po_message=  "AUS / Aussen " # OWtemp #" C" #Zeilenumbruch #"Laufzeit " # HZG_Brenner_dauer;

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

Re: Uhrzeit Differenz Script

Beitrag von Henke » 03.12.2022, 22:51

Code: Alles auswählen

! Brenner Start Pushover - Skript HZG Info
! ------------------------------

object oSVr_HB_start = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_start');
if (!oSVr_HB_start) {    WriteLine( "Start Variablenname ist falsch"); quit; }

object oSVr_HB_stop = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_stop');
if (!oSVr_HB_stop) {   WriteLine( "Stop Variablenname ist falsch"); quit; }

object oSVr_HB_gesamt = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_dauer_gesamt');
if (!oSVr_HB_gesamt) {   WriteLine( "Gesamt Variablenname ist falsch"); quit; }

object oSVr_HB_dauer = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_dauer');
if (!oSVr_HB_dauer) {   WriteLine( "Dauer Variablenname ist falsch"); quit; }

object oSVr_HB_pause = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_pause');
if (!oSVr_HB_pause) {    WriteLine( "pause Variablenname ist falsch"); quit; }

oSVr_HB_start.State( localtime );

time tHB_start = oSVr_HB_start.Timestamp().ToTime() ;
time tHB_stop = oSVr_HB_stop.Timestamp().ToTime() ;

time tHB_pause = ((tHB_start-tHB_stop)-(3600+86400)).ToTime();
string sHZG_Brenner_pause = tHB_pause.Format("%H:%M h").Replace("31 Tage","00 Tage");
oSVr_HB_pause.State(sHZG_Brenner_pause); ! schreiben ?

Code: Alles auswählen

! Brenner STop Pushover - Skript HZG Info
! ------------------------------

object oSVr_HB_start = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_start');
if (!oSVr_HB_start) {    WriteLine( "Start Variablenname ist falsch"); quit; }

object oSVr_HB_stop = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_stop');
if (!oSVr_HB_stop) {   WriteLine( "Stop Variablenname ist falsch"); quit; }

object oSVr_HB_gesamt = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_dauer_gesamt');
if (!oSVr_HB_gesamt) {   WriteLine( "Gesamt Variablenname ist falsch"); quit; }

object oSVr_HB_dauer = dom.GetObject(ID_SYSTEM_VARIABLES).Get('HZG_Brenner_dauer');
if (!oSVr_HB_dauer) {   WriteLine( "Dauer Variablenname ist falsch"); quit; }

oSVr_HB_stop.State( localtime );
time tHB_start = oSVr_HB_start.Timestamp().ToTime() ;
time tHB_stop = oSVr_HB_stop.Timestamp().ToTime() ;

time tHB_dauer = ((tHB_stop-tHB_start)-(3600+86400)).ToTime();
string sHZG_Brenner_dauer = tHB_dauer.Format("%H:%M h").Replace("31 Tage","00 Tage");

! alten Wert holen
integer iHZG_Brenner_dauer_gesamt =oSVr_HB_gesamt.Value();

! kummulieren
iHZG_Brenner_dauer_gesamt =iHZG_Brenner_dauer_gesamt+tHB_dauer.ToInteger();

! Schreiben der neuen gesamt Brenndauer in die Variable
oSVr_HB_gesamt.State(iHZG_Brenner_dauer_gesamt);

oSVr_HB_dauer.State(sHZG_Brenner_dauer); ! Schreiben der Brenner dauer in die Variable

Code: Alles auswählen

string sOWtemp = dom.GetObject(ID_SYSTEM_VARIABLES).Get("owTemperatur").Value().ToString(1);
string po_message=  "AUS / Aussen " # sOWtemp #" C" #Zeilenumbruch #"Laufzeit " # sHZG_Brenner_dauer;

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

Re: Uhrzeit Differenz Script

Beitrag von Wichtelmann007 » 05.12.2022, 11:28

:D Du bist mein Held,

Es läuft ja alles rund, Die Start- und Stopzeiten werden ordentlich geloggt und oer Pushover gesendet.

Aber die HZG_Brenner_dauer_gesamt will nicht. Dort steht (bei 2 Durchläufen) Die Zahlen werden offenbar nur hintereinander gescheieben anstatt addiert - und nicht als Tage/Stunden/Minuten formatiert.
Gäbe es da noch eine Lösung? :roll:
-89100-88799

Antworten

Zurück zu „RaspberryMatic“