Umrechnung von Zeit / Minuten in h:m

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

nicolas-eric
Beiträge: 3302
Registriert: 07.01.2015, 23:26
Wohnort: Scheeßel
Hat sich bedankt: 21 Mal
Danksagung erhalten: 11 Mal

Umrechnung von Zeit / Minuten in h:m

Beitrag von nicolas-eric » 04.06.2019, 21:30

Hallo,

ich scheitere grad an einer bestimmt ganz simplen Aufgabe und auch die Suchfunktion bringt mir irgendwie nichts.

Der Wettersensor speichert die Sonnenscheindauer in einer SV in Minuten ab, z.B. heute 409 Minuten.
Nun möchte ich das für die Visu gerne in Stunden/Minuten umrechnen, also sollten 4:49 dabei heraus kommen.
Aber wie mache ich das per Script?

Danke schonmal für die Hilfe!

Gruß Nico

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: Umrechnung von Zeit / Minuten in h:m

Beitrag von Black » 04.06.2019, 21:42

Code: Alles auswählen

WriteLine ((i / 60).ToString (0) # ":" # i % 60); 
Gruss Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

nicolas-eric
Beiträge: 3302
Registriert: 07.01.2015, 23:26
Wohnort: Scheeßel
Hat sich bedankt: 21 Mal
Danksagung erhalten: 11 Mal

Re: Umrechnung von Zeit / Minuten in h:m

Beitrag von nicolas-eric » 04.06.2019, 21:50

Danke Black!

Habs noch mit einem ToString(0) erweitert, das hatte sonst Nullen hinter dem Komma.

nicolas-eric
Beiträge: 3302
Registriert: 07.01.2015, 23:26
Wohnort: Scheeßel
Hat sich bedankt: 21 Mal
Danksagung erhalten: 11 Mal

Re: Umrechnung von Zeit / Minuten in h:m

Beitrag von nicolas-eric » 04.06.2019, 22:11

Das verstehe ich grad nicht.

Die Zeit der Stunden:Minuten heute ist 1h zu viel. 409 Minuten sind 6:49 und nicht 7:49
Die Zeit der Stunden:Minuten gestern stimmt aber.

Script:

Code: Alles auswählen

string sonneh = dom.GetObject('svHmIPSunshineCounterToday_36264').State();
string sonneh2 = ((sonneh / 60).ToString (0) # ":" # (sonneh % 60).ToString (0));
! dom.GetObject('SVSonneHeute').State(sonneh2)
string sonneg = dom.GetObject('svHmIPSunshineCounterYesterday_36264').State();
string sonneg2 = ((sonneg / 60).ToString (0) # ":" # (sonneg % 60).ToString (0)); 
! dom.GetObject('SVSonneGestern').State(sonneg2)
WriteLine(sonneh);
WriteLine(sonneh2);
WriteLine(sonneg);
WriteLine(sonneg2);


Ergebnis:

Code: Alles auswählen

409.000000
7:49
252.000000
4:12
Was mache ich falsch?
Oder werden die Stunden gerundet und dadurch entsteht der Fehler?

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: Umrechnung von Zeit / Minuten in h:m

Beitrag von Black » 04.06.2019, 22:44

ToString rundet intern... grmmpf.
es muss aber getrunct werden.

also:

Code: Alles auswählen

integer sonneh=409.0;
string sonneh2 = ((sonneh / 60).Trunc (0).ToString (0) # ":" # (sonneh % 60).ToString (0)); 
ergibt bei mir nun:

Code: Alles auswählen

[sonneh            ]: 409.000000
[sonneh2           ]: 6:49
Sysvar vom typ Zahl ist immer float...
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: Umrechnung von Zeit / Minuten in h:m

Beitrag von alchy » 04.06.2019, 23:41

Black hat geschrieben:
04.06.2019, 22:44
Sysvar vom typ Zahl ist immer float...
korrekt, aber

Code: Alles auswählen

integer sonneh=409.0;
bleibt auch Type real :wink:
mit Type integer sollte auch Variante a funktionieren und .Typumwandlungen und trunc ....sollte auch unnötig sein, also :

Code: Alles auswählen

real i=409.0;
i = i.ToInteger();
WriteLine ((i / 60) # ":" # i % 60);
sollte funktionieren.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: Umrechnung von Zeit / Minuten in h:m

Beitrag von Black » 04.06.2019, 23:51

schon klar, das integer stammte aus meinem testlauf, wo ich vorher mal probiert hatte, bevor ich seinen Aufruf dann mit dem Laden de Systemvariablen kannte. drum dann auch aus der 409 eine 409.0 ^^

Das der Deklarationstyp durch die Zuweisung dynamisch verändert wird ist mir schon klar ^^

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

nicolas-eric
Beiträge: 3302
Registriert: 07.01.2015, 23:26
Wohnort: Scheeßel
Hat sich bedankt: 21 Mal
Danksagung erhalten: 11 Mal

Re: Umrechnung von Zeit / Minuten in h:m

Beitrag von nicolas-eric » 05.06.2019, 05:42

Danke!
Nun funktioniert es wie gewünscht. :D

nicolas-eric
Beiträge: 3302
Registriert: 07.01.2015, 23:26
Wohnort: Scheeßel
Hat sich bedankt: 21 Mal
Danksagung erhalten: 11 Mal

Re: Umrechnung von Zeit / Minuten in h:m

Beitrag von nicolas-eric » 06.06.2019, 08:22

Eine Frage habe ich noch.
Wie bekomme ich es hin, dass bei einstelligen Minutenzahlen eine Null davor gesetzt wird?
Bei heute bisher 5 Minuten wird mir grad 0:5 angezeigt.

Das jetzige Script sieht so aus:

Code: Alles auswählen

real sonneh = dom.GetObject('svHmIPSunshineCounterToday_36264').State();
sonneh = sonneh.ToInteger();
integer sonneh2 = ((sonneh / 60) # ":" # (sonneh % 60)); 
dom.GetObject('SVSonneHeute').State(sonneh2);
real sonneg = dom.GetObject('svHmIPSunshineCounterYesterday_36264').State();
sonneg = sonneg.ToInteger();
integer sonneg2 = ((sonneg / 60) # ":" # (sonneg % 60)); 
dom.GetObject('SVSonneGestern').State(sonneg2);
Danke schonmal!

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: Umrechnung von Zeit / Minuten in h:m

Beitrag von alchy » 06.06.2019, 21:43

nicolas-eric hat geschrieben:
06.06.2019, 08:22
Das jetzige Script sieht so aus:

Code: Alles auswählen

....
integer sonneh2 = ((sonneh / 60) # ":" # (sonneh % 60));
...
 
auch wenn es keine Rolle spielt da die Rega automatisch wandelt, sonneh2 ist ein string.

nicolas-eric hat geschrieben:
06.06.2019, 08:22
Wie bekomme ich es hin, dass bei einstelligen Minutenzahlen eine Null davor gesetzt wird?
Indem du prüfst ob die Werte für Minuten < 10 sind und wenn ja, eine 0 vor dem String knallst.
Das sollte dann für Stunden und Minuten für dein Anwendungsfall so möglich sein:

Code: Alles auswählen

real sonneh = dom.GetObject(ID_SYSTEM_VARIABLES).Get("svHmIPSunshineCounterToday_36264").Value();
sonneh = sonneh.ToInteger();
integer stunden = (sonneh / 60); 
if (stunden < 10) {stunden = 0#stunden;}
integer minuten = (sonneh % 60); 
if (minuten < 10) {minuten  = 0#minuten;}
dom.GetObject(ID_SYSTEM_VARIABLES).Get("SVSonneGestern").State(stunden#":"#minuten);
Wenn du das für Stunden nicht willst, dann einfach die entsprechende Zeile auskommentieren oder löschen.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

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