Uhrzeit Differenz Script

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

Moderatoren: jmaus, Co-Administratoren

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 » 05.12.2022, 11:49

Ist die Systemvariable "HZG_Brenner_dauer_gesamt" eine Zahl?

Wenn nicht, draus machen.

Dann evtl, um auf Nummer sicher zu gehen:
integer iHZG_Brenner_dauer_gesamt =oSVr_HB_gesamt.Value();
in
integer iHZG_Brenner_dauer_gesamt =oSVr_HB_gesamt.Value().ToInteger();

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

Re: Uhrzeit Differenz Script

Beitrag von Tyfys » 05.12.2022, 16:07

vieleicht hat Henke noch 'ne bessere Idee...

Aber ich würde die Sekundenzahl in die Beschreibung DPInfo() der Systemvariablen setzen
und die formatierte Zeit in das eigentlich Feld Value().
Da kann die Systemvariable "HZG_Brenner_dauer_gesamt" vom Typ Zeichenkette bleiben.

z.B. so:

Code: Alles auswählen

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

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

! Schreiben der neuen gesamt Brenndauer in die Beschreibung der Variablen
!oSVr_HB_gesamt.State(iHZG_Brenner_dauer_gesamt);
oSVr_HB_gesamt.DPInfo(iHZG_Brenner_dauer_gesamt);

!Formatieren in Tage HH:MM:SS
var BDT = (iHZG_Brenner_dauer_gesamt / 86400).ToString() # " Tage ";
var HZG_Brenner_dauer_gesamtTHM =BDT # ((iHZG_Brenner_dauer_gesamt-(3600+86400)).ToTime()).Format("%H:%M h");

!Schreiben der neuen gesamt Brenndauer formatiert in die Variable
dom.GetObject(SysVarNameDauerGes).State(HZG_Brenner_dauer_gesamtTHM);

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

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, 17:05

Henke hat geschrieben:
05.12.2022, 11:49
Ist die Systemvariable "HZG_Brenner_dauer_gesamt" eine Zahl?

Wenn nicht, draus machen.

Dann evtl, um auf Nummer sicher zu gehen:
integer iHZG_Brenner_dauer_gesamt =oSVr_HB_gesamt.Value();
in
integer iHZG_Brenner_dauer_gesamt =oSVr_HB_gesamt.Value().ToInteger();
Hab ich so gemacht, SV war Zeichenkette, ist jetzt Zahl. Das Script habe ich auch geändert.

Ergebnis
-266040.000000

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 » 05.12.2022, 17:25

Anfangswert 0?

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, 19:50

Ja Anfangswert 0, eben nochmal zurück gesetzt und einen weiteren Scriptlauf abgewartet.

Code: Alles auswählen

.    ! 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";
string sSysVar_HB_pause =  "HZG_Brenner_pause";

string sOWtemp = dom.GetObject(ID_SYSTEM_VARIABLES).Get("owTemperatur").Value().ToString(1);

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_dauer = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sSysVar_HB_dauer);
if (!oSVr_HB_dauer) {   WriteLine( sSysVar_HB_dauer # " 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_pause = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sSysVar_HB_pause);
if (!oSVr_HB_pause) {    WriteLine( sSysVar_HB_pause # " 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
   

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 » 05.12.2022, 20:28

Code: Alles auswählen

! 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";
string sSysVar_HB_pause =  "HZG_Brenner_pause";

string sOWtemp = dom.GetObject(ID_SYSTEM_VARIABLES).Get("owTemperatur").Value().ToString(1);

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_dauer = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sSysVar_HB_dauer);
if (!oSVr_HB_dauer) {   WriteLine( sSysVar_HB_dauer # " 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_pause = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sSysVar_HB_pause);
if (!oSVr_HB_pause) {    WriteLine( sSysVar_HB_pause # " 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() ;

integer iDiffBrenner = (tHB_stop-tHB_start);
string sHZG_Brenner_dauer = (((iDiffBrenner/60)-system.TimeZoneOffset())*60).ToTime().Format("%H:%M h");

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

! kummulieren
iHZG_Brenner_dauer_gesamt =iHZG_Brenner_dauer_gesamt+iDiffBrenner;

! 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

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, 21:06

:(
leider nein, Wert bleibt 0

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 » 05.12.2022, 21:37

Sry, keine Lust mehr die Bugs/Strukturen von anderen theoretisch die Fehler zu suchen. Ich mach das mal in schön.

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 » 05.12.2022, 22:31

1. Script
1. Programm
3. Systemvariablen - eine davon für mich zum Testen

Variablen:
"Brenner.An/Aus" - wahr/falsch
"Brenner.Laufzeit" - Zahl
"Brenner.Ausgabe" - für mich

Programm:
Screenshot 2022-12-05 223055.jpg

Code: Alles auswählen

object oBr_AnAus = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Brenner.An/Aus");
if (!oBr_AnAus) {    WriteLine( "Variablenname ist falsch"); quit; }

object oBr_LaufzeitGesamt = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Brenner.Laufzeit");
if (!oBr_LaufzeitGesamt) {    WriteLine( "Variablenname ist falsch"); quit; }

object oBr_Ausgabe = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Brenner.Ausgabe");
if (!oBr_Ausgabe) {    WriteLine( "Variablenname ist falsch"); quit; }

if ( oBr_AnAus.Value() )
{
    integer tAn = oBr_AnAus.TimestampSeconds();
	oBr_AnAus.State ( false );
    integer iDiff = localtime.ToInteger() - tAn;
!WriteLine ( iDiff );
    string sGelaufen = (iDiff-(system.TimeZoneOffset()*60)).ToTime().Format("%H:%M:%S");
	integer iDiffGesamt = oBr_LaufzeitGesamt.Value() + iDiff;
    oBr_LaufzeitGesamt.State (iDiffGesamt);
    string sGelaufenGesamt = (iDiffGesamt-(system.TimeZoneOffset()*60)).ToTime().Format("%H:%M:%S");

	string sOut = "Letzter Lauf: " # sGelaufen # " - Gesamt: " # sGelaufenGesamt;
	oBr_Ausgabe.State(sOut ) ;
	WriteLine ( sOut );
}
else
{
	WriteLine ( "Brenner läuft, keine Ausgabe");
}
Fertig

[sprotte80]
Beiträge: 336
Registriert: 05.10.2020, 18:37
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 25 Mal

Re: Uhrzeit Differenz Script

Beitrag von [sprotte80] » 11.12.2022, 15:05

Hi,
Henke hat geschrieben:
29.11.2022, 21:02
Ist eine Stil Frage. 3600 sind ne Stunde, TimeZoneOffset() lässt das Script auch in England laufen.
TimeZoneOffset() is keine Stilfrage eher ne Wissensfrage und unbrauchbar.
TimeZoneOffset() gibt auch in England oder Australien per default 60 zurück.
gehört zu den über 40 gelisteten badenpower-rega-Bugs

Thomas
Wenn du keine App zur Bedienung brauchst, dann hast du kein Smarthome, sondern nur eine angefangene Baustelle, oder nur ein unsmartes Autohome.

Homematic-Script - ScriptLexikon für alle
Methoden Konstanten
Hilfe und Infos erwünscht. Alle können mitmachen. Keine Levels. Keine Geheimtuerei.

Antworten

Zurück zu „RaspberryMatic“