Entschuldigung für die Anfängerfrage, aber ich komme auch mit der Doku von EQ3 nicht viel weiter (neben dem Forum, Google usw.).
Der Doku fehlen für Anfänger wie mich einfache Beispiele
Ich will nur einfach eine Kommazahl in HH:MM wandeln.
Dazu habe ich leider keine Möglichkeit gefunden aus der Kommazahl die Zahl vor dem Komma und nach dem Komma zu trennen. Muss ich das tatsächlich über die Variable tun und den Punkt suchen und dann den linken und rechten Wert auslesen? Und wenn ja, wie macht man das? Ich finde nix zu links, rechts oder Punkt
Oder gibt es im Skripting hier schon eine Lösung, dass es über eine Klassifizierung gemacht werden kann?
Vermutlich stelle ich mich auch an, arbeite mit dem Kleinen Fenster in der HM Umgebung und das ist schon echt anstrengend.
Vielen Dank für alle konstruktiven Vorschläge!
Kommazahl in HH:MM
Moderator: Co-Administratoren
-
- Beiträge: 12132
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 852 Mal
- Danksagung erhalten: 2155 Mal
- Kontaktdaten:
Re: Kommazahl in HH:MM
Schau dir mal in der Scriptdoku sowas wie Find(), Substr(), Split() an
https://www.eq-3.com/Downloads/eq3/down ... g_V2.2.pdf
https://www.eq-3.com/Downloads/eq3/down ... g_V2.2.pdf
-
- Beiträge: 9740
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 705 Mal
- Danksagung erhalten: 1644 Mal
Re: Kommazahl in HH:MM
Und was nicht in der Script-Doku steht, findest Du im Link in meiner Signatur. Wenn Du wirklich rechts vom Komma Minuten stehen hast (und nicht Dezimal Minuten), dann kannst Du das, mit. Replace() gegen : austauschen und hast das richtige Format. Aber vermutlich hast Du Dezimal Werte.
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 +++
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 +++
-
- Beiträge: 566
- Registriert: 17.04.2021, 17:12
- System: CCU
- Hat sich bedankt: 28 Mal
- Danksagung erhalten: 130 Mal
Re: Kommazahl in HH:MM
Viele Wege führen nach ......
Mein Vorschlag wäre aufgedröselt /erklärt :
und in kompakter Form:
In der Script-Doku sind die verwendeten Befehle meist genau erklärt.
Mein Vorschlag wäre aufgedröselt /erklärt :
Code: Alles auswählen
!Ausgang Homatic-Zahl
var kommazahl = 11.75;
!Zahl in Zeichenkette umsetzen mit 2 Nachkommastellen
kommazahl = kommazahl.ToString(2);
!Stunden vor Dezimalzeichen extrahieren
var std = kommazahl.StrValueByIndex(".", 0);
WriteLine(std);
!Minuten nach Dezimalzeichen extrahieren
var min= kommazahl.StrValueByIndex(".", 1);
WriteLine(min);
!daraus wieder als Nachkommazahl machen damit führene Null z.B. bei 0-9 Minuten erhaltenbleibt
min = ("0."#min).ToFloat() ;
WriteLine(min);
!in Minuten umrechnen
min = min * 0.60 ;
WriteLine(min);
!nun in Zeichenkette umwandeln und Vorkommanull und Dezimalzeichen entfernen
min = min.ToString(2).Replace("0.","").Substr(0,2);
WriteLine(min);
!nun daraus den HH:MM string zusammensetzen
!Stunden bei Bedarf mit führender Null
!if ( std.Length()<2) {std = "0" #std ;}
var hhmm= std #":" # min;
WriteLine(hhmm);
Code: Alles auswählen
var kommazahl = 09.25;
kommazahl = kommazahl.ToString(2);
var std = kommazahl.StrValueByIndex(".", 0);
var min = (("0."#kommazahl.StrValueByIndex(".", 1)).ToFloat() * 0.60).ToString(2).Replace("0.","").Substr(0,2);
if ( std.Length()<2) {std = "0" #std ;}
var hhmm= std #":" # min;
WriteLine(hhmm);
Gruß
Harry
Harry
-
- Beiträge: 10757
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 674 Mal
Re: Kommazahl in HH:MM
geht natürlich auch, wie ja oben schon aufgeführt.
Dann könnte man noch mit schnöder Mathematik alles hin und her rechnen
Leider schreibst du nichts Genaueres.
Willst du wirklich die Angabe in Stunden und Minuten, auch wenn es sich z.B. um mehrerer Tage handelt?
hier gleich die ganze Rechnerei.
Code: Alles auswählen
var zeit = 9.5; ! Zeit hier in Stunden
!++++Finger weg +++++
integer imtimer = (zeit*60).ToInteger() ; !Timervorgabe in Minuten
integer istimer = imtimer*60; ! Timerzeit in Sekunden
integer iTage = istimer / 86400; ! Timerzeit Tage
integer iMinuten = (istimer % 3600) / 60; !Timerzeit Minuten
integer iStunden = (imtimer-iTage*1440) / 60; ! Timerzeit Stunden
WriteLine((istimer/3600) #":" #iMinuten);
WriteLine(imtimer #" Minuten sind "#iTage #"Tag(e) " #iStunden #" Stunden und " #iMinuten #" Minuten");
In dem Fall die "kürzeste" Variante als mein Vorschlag:
Code: Alles auswählen
real zeit = 11.5; ! hier in Stunden
string uhrzeit = ((zeit*3600)-3600).ToTime().Format("%H:%M");
Genau
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.
Re: Kommazahl in HH:MM
Ich habe meine Aufgabe nun folgendermaßen gelöst:
Damit sehe ich den Wert meiner Homematic für den Sonnenaufgang als Float-Wert mit Stunden und Minuten getrennt.
Und umgekehrt kann ich den umgekehrten Wert rechnen.
Vielleicht hilft es an der ein oder anderen Stelle.
Code: Alles auswählen
real c_tagesbeginn =
(system.SunriseTime("%M").ToFloat() / 60) + system.SunriseTime("%H").ToFloat();
WriteLine ("Sonnenaufgang Minuten als float: " #
system.SunriseTime("%M").ToFloat() / 60) + system.SunriseTime("%H").ToFloat();
WriteLine ("Sonnenaufgang ohne float: " # system.SunriseTime("%H") # ":" #
system.SunriseTime("%M"));
WriteLine ("c_tagesbeginn: " # c_tagesbeginn);
WriteLine (system.SunriseTime("%H:%M"));
var tb_stunde = c_tagesbeginn.ToInteger();
WriteLine (tb_stunde);
var tb_minute = ((c_tagesbeginn - c_tagesbeginn.ToInteger()) * 60).ToInteger();
WriteLine (tb_minute);
WriteLine(c_tagesbeginn.ToInteger() # ":" #
((c_tagesbeginn - c_tagesbeginn.ToInteger()) * 60).ToInteger());
Damit sehe ich den Wert meiner Homematic für den Sonnenaufgang als Float-Wert mit Stunden und Minuten getrennt.
Und umgekehrt kann ich den umgekehrten Wert rechnen.
Vielleicht hilft es an der ein oder anderen Stelle.