Uhrzeit Differenz Script

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

Moderatoren: jmaus, Co-Administratoren

Tyfys
Beiträge: 531
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 26 Mal
Danksagung erhalten: 121 Mal

Re: Uhrzeit Differenz Script

Beitrag von Tyfys » 29.11.2022, 21:15

TimestampSeconds() klappt - hatte ich geprüft.

TimeZoneOffset() lässt das Script auch in England laufen - das stimmt natürlich
Gruß
Harry

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

Henke hat geschrieben:
29.11.2022, 20:00
Wie löse ich die Aufgabe mit nur einer Systemvariable vom Typ Logikwert? :D
Dann sag mir wie DU das löst :mrgreen:
Das Brenner-Ende benötige ich noch für eine zweite berechnung. Daher beide als SV

Tyfys
Beiträge: 531
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 26 Mal
Danksagung erhalten: 121 Mal

Re: Uhrzeit Differenz Script

Beitrag von Tyfys » 29.11.2022, 22:07

Henke hat geschrieben:
29.11.2022, 20:00
Wie löse ich die Aufgabe mit nur einer Systemvariable vom Typ Logikwert? :D
bietet sich doch an Timestamp() - LastTimestamp()
Gruß
Harry

Benutzeravatar
Henke
Beiträge: 1500
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 133 Mal
Danksagung erhalten: 304 Mal

Re: Uhrzeit Differenz Script

Beitrag von Henke » 29.11.2022, 22:30

Nope, die Lösung hatte Tyfys schon.
1 Programm mit einem Script und einer Systemvariable.

Programm:
Wenn Brenner an
und Systemvariable aus
-> Systemvariable auf an

Sonst wenn Brenner aus
und Systemvariable auf an
-> Script

Script:
1. Aktelle Zeit - Zeit aus Setzen der Systemvariable = Differenz -> Anzeigen, versenden oder was weiß ich
2. Systemvariable auf aus!

Was dabei in der Systemvariablen steht ist vollkommen egal, da die Zeit aus der Änderung der Variablen genommen wird.

Aber zurück zu deiner Frage:
Screenshot 2022-11-29 222134.jpg
NodeRed macht es einfacher

Wobei sich eigentlich die Frage stellt, was willst du damit?
Die Schaltzyklen der Heizung werte ich über den Historian aus bzw. durch einen Betriebsstundenzähler und lasse mir die aktuellen Werte als Diagramm anzeigen. Scripte, egal ob direkt in der CCU oder NodeRed, sind eher was für eine Steuerung.

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

Re: Uhrzeit Differenz Script

Beitrag von Wichtelmann007 » 30.11.2022, 19:27

Irgendwo hängts noch...
Die beiden SV start und stop werden gesetzt, weiter jedoch nichts. Wo hab ich den Fehler?

SV als Typ Zeichenkette
  • HZG_Brenner_start
  • HZG_Brenner_stop
  • HZG_Brenner_dauer
Programm bei Brenner ein
Wenn Brenner ein dann Script

Code: Alles auswählen

dom.GetObject('HZG_Brenner_start').State(system.Date("%H:%M Uhr"));
...
pushover usw.
Programm bei Brenner aus

Code: Alles auswählen

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

Tyfys
Beiträge: 531
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 26 Mal
Danksagung erhalten: 121 Mal

Re: Uhrzeit Differenz Script

Beitrag von Tyfys » 30.11.2022, 19:48

Diese Zeile war ja nur zur Kontrolle im Skript testen gedacht:

Code: Alles auswählen

WriteLine(HZG_Brenner_dauer);
zum Schreiben in deine Systemvariable noch diese danach einfügen :
(die WriteLine - Zeile kann auch entfallen)

Code: Alles auswählen

dom.GetObject("HZG_Brenner_dauer").State(HZG_Brenner_dauer); !Schreiben der Brennder 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 » 01.12.2022, 09:35

Guten Morgen zusammen
Tipitopi! :D

Das mit den Variablen klappt soweit.
Ich bekomme die mehrfachauswahl in der Ausgabe aber nicht hin. Es wird ein Scriptfehler angegeben.
Ich wollte die Brennerlaufzeitz / Pumpenpause wie folgt mit ausgeben:

Code: Alles auswählen

! bisheriger Code
string po_message=  "Brenner AUS " # OWtemp #" C ";

! gewünschte Änderung
string po_message=  "Brenner AUS " # OWtemp #" C " # HZG_Brenner_dauer #;

! evtl mit Zeilenumbruch 
string po_message=  "Brenner AUS " \n# OWtemp #" C " # HZG_Brenner_dauer #;

Tyfys
Beiträge: 531
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 26 Mal
Danksagung erhalten: 121 Mal

Re: Uhrzeit Differenz Script

Beitrag von Tyfys » 01.12.2022, 10:17

das # darf in den beiden Zeilen am Ende nicht sein !

HZG_Brenner_dauer #; in HZG_Brenner_dauer ; ändern


das # i sorgt für Verkettungen von Zeichenketten.
Wenn danach nichts mehr kommt, gibt es einen Fehler
Gruß
Harry

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

Re: Uhrzeit Differenz Script

Beitrag von Wichtelmann007 » 02.12.2022, 11:53

Verrückt...
Mit einem kleinen Zusatz, den ich nachgetragen habe, läuft das Script nicht mehr wo ist da der Fehler?

Hier der funktionierende Code:

Code: Alles auswählen

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");
dom.GetObject("HZG_Brenner_dauer").State(HZG_Brenner_dauer); ! Schreiben der Brennder dauer in die Variable 

Das wollte ich am Ende noch hinzu fügen:

Code: Alles auswählen


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

dom.GetObject("HZG_Brenner_dauer_gesamt").State(HZG_Brenner_dauer_gesamt); ! Schreiben der neuen Brennder dauer in die Variable 
Danach erfolgt das Versenden per Pushover, welches mit der obigen Änderung auch nicht mehr ausgeführt wird.

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Uhrzeit Differenz Script

Beitrag von MichaelN » 02.12.2022, 12:04

Code: Alles auswählen

var HZG_Brenner_dauer_gesamt =(((HZG_Brenner_dauer_gesamt+
Wenn Du die Variable Da erst definierst, wieso wird die dann in der Formel benutzt? Bestenfalls hat die immer den Wert 0. Oder bei HM Skript irgendeinen unedfinierten Wert. Keine Ahnung ob dies zum Abbruch führt.

Generell: unterteile solche Befehle in einzelne Schritte bist Du den Fehler gefunden hast.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Antworten

Zurück zu „RaspberryMatic“