Formatierung von Temperaturwerten in Scripts?

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Benutzeravatar
metaxa
Beiträge: 649
Registriert: 01.10.2011, 00:03
Wohnort: südliches Wien
Hat sich bedankt: 3 Mal

Formatierung von Temperaturwerten in Scripts?

Beitrag von metaxa » 10.02.2013, 12:25

Ich habe mir hier im Forum schon sehr viele Anleitungen, Ideen & Scripte „zusammengeklaut“. Danke an dieser Stelle für die vielen Lösungshilfen!

Auch wenn in Wien zur Zeit nicht die optimalsten Bedingungen für unsere neue Solaranlage bestehen, der nächste Sommer kommt bestimmt :wink:

Bitte um Eure informative Hilfe, folgendes Script funktioniert technisch einwandfrei:

Code: Alles auswählen

! Liest die aktuelle Temperatur des Soloarsensors aus.
var curTemp = dom.GetObject("BidCos-RF.JEQ0393036:1.TEMPERATURE").Value().ToString(1) # " °C";

! schreibt die ausgelesene Temperatur in meine sv24 rein.
dom.GetObject("sv24 Solarspeicher aktuell").State(curTemp);

! befüllt sv20 bei geänderten Werten.
var source = dom.GetObject("$src$");
var maxTemp = dom.GetObject("sv20 Solarspeicher max.");
if (source)
{

! Wenn die akutelle Temp grösser als "sv20 Solarspeicher max."
if (source.Value() > maxTemp.Variable())
{

! dann schreib in "sv20 Solarspeicher max." die jetztige Temperatur hinein.
maxTemp.Variable(source.Value());
}
}
else
{

! Die nächsten 3 Zeilen verstehe ich nicht.
var wds = dom.GetObject("Solarspeicher");
var curTemp = wds.DPByHssDP("TEMPERATURE");
maxTemp.Variable(curTemp.Value());
}

! befüllt sv22 bei geänderten Werten.
var source = dom.GetObject("$src$");
var minTemp = dom.GetObject("sv22 Solarspeicher min.");
if (source)
{

! Wenn die akutelle Temp kleiner als "sv22 Solarspeicher min."
if (source.Value() < minTemp.Variable())
{

! dann schreib in "sv22 Solarspeicher min." die jetztige Temperatur hinein.
minTemp.Variable(source.Value());
}
}
else
{

! Die nächsten 3 Zeilen verstehe ich nicht.
var wds = dom.GetObject("Solarspeicher");
var curTemp = wds.DPByHssDP("TEMPERATURE");
minTemp.Variable(curTemp.Value());
}
Nun nach 3 Monaten wollte ich die Formatierung der Variablen verbessern. Seit Tagen scheitere ich an meiner persönlichen Unfähigkeit. "sv24 Solarspeicher aktuell" passt seit Anfang an!
Temp. Solsp. unformatiert.JPG
SysVar Temp. Solsp..JPG
Versucht habe ich schon:
.ToString(1) # " °C" in den relevanten Scriptzeilen (wie bei "sv24 Solarspeicher aktuell") zu ergänzen, kein Erfolg.
Ändern der Systemvariablen auf Zeichenkette, kein Erfolg.

Wo muss ich was WARUM ergänzen oder ändern, damit die Formatierung in den angezeigten Systemvariablen wie in der Systemvariablen „sv24 Solarspeicher aktuell“ aussieht?

Herzlichen Dank im Voraus für Eure – hoffentlich für mich verständlichen – Hilfestellungen!
Lg, mxa

Lueghi
Beiträge: 630
Registriert: 01.11.2007, 21:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Siebengebirge (bei Bonn)
Hat sich bedankt: 18 Mal
Danksagung erhalten: 2 Mal

Re: Formatierung von Temperaturwerten in Scripts?

Beitrag von Lueghi » 10.02.2013, 17:57

Ich glaube, das geht gar nicht .... :(.
Ich habe eine Zahlvariable, die ich von "aussen" (über einen separaten Server) setze mit 1 Nachkommastelle und in der Anzeige habe ich immer mehr ....
Gruß Stefan

Benutzeravatar
robbi77
Beiträge: 13862
Registriert: 19.01.2011, 19:15
System: CCU
Wohnort: Landau
Hat sich bedankt: 182 Mal
Danksagung erhalten: 739 Mal

Re: Formatierung von Temperaturwerten in Scripts?

Beitrag von robbi77 » 10.02.2013, 18:16

Hallo,
wenn gleiches Problem, dann :
anli hat geschrieben:
ccu123 hat geschrieben:Allerding erscheint der Wert z.B. nicht als 23,5 °C sondern nur als 23.5000000
Kann man das beeinflussen? Z.B. auf 2 Nachkommastellen beschränken und die Einheit aus der Systemvariable dahintersetzen?
Das wäre nur möglich, wenn Du die Systemvariable vom Typ Zeichenkette machst und Dein Skript dann statt der Zahl einen String mit zwei Nachkommastellen postet und die Einheit dahinter setzt ( .ToString(2) # " Grad").
Von :
http://homematic-forum.de/forum/viewtopic.php?t=11962

Gruß
Roberto
Bei Risiken und Nebenwirkungen fragen Sie den Elektriker Ihres geringsten Mißtrauens!
http://www.eq-3.de/service/downloads.html
Tips und Tricks für Anfänger: viewtopic.php?t=22801
Programmlogik: viewtopic.php?f=31&t=4251
Webui-Handbuch: https://www.eq-3.de/downloads/download/ ... h_eQ-3.pdf
Script und Linksammlung: viewtopic.php?f=26&t=27907
Troll des Forums ...

Benutzeravatar
Mister2
Beiträge: 614
Registriert: 24.12.2010, 16:51

Re: Formatierung von Temperaturwerten in Scripts?

Beitrag von Mister2 » 10.02.2013, 18:17

Das Problem ist, das du die sv20 und sv22 Variablen ja auch zum Berechnen der Min und Max Werte des Tages benötigst.
Sobald du die Variablen in eine Zeichenkette umgewandelt hast, kannst du damit nicht mehr rechnen.
Ich würde daher für die Anzeige mit 2 zusätzlichen Variablen vom Typ Zeichenkette arbeiten-
z.B.
sv20t Solarspeicher max.
sv22t Solarspeicher min.

dann im Script diese Variablen noch füllen

Code: Alles auswählen

! dann schreib in "sv20 Solarspeicher max." die jetztige Temperatur hinein.
maxTemp.Variable(source.Value());
dom.GetObject("sv20t Solarspeicher max.").State(maxTemp).ToString(1) # " °C";
}

Code: Alles auswählen

! dann schreib in "sv22 Solarspeicher min." die jetztige Temperatur hinein.
minTemp.Variable(source.Value());
dom.GetObject("sv22t Solarspeicher min.").State(minTemp).ToString(1) # " °C";
}
193 Kanäle in 125 Geräten:
1x HM-SCI-3-FM, 1x HM-WDS100-C6-O, 3x HM-PB-2-WM, 1x HM-PB-2-WM55, 1x HM-PB-6-WM55, 5x HM-Sec-MDIR, 5x HM-Sen-MDIR-O, 6x HM-LC-Sw1-Pl,
24x HM-Sec-RHS, 15x HM-LC-Sw1-FM, 6x HM-LC-Sw2-FM, 2x HM-LC-Sw1-Pl-2, 3x HM-Sec-SD, 1x HM-Sec-SD-Team, 2x HM-Sys-sRP-Pl, 9x HM-LC-Bl1-FM,
5x HM-LC-Bl1PBU-FM, 2x HM-OU-CF-Pl, 7x HM-WDS10-TH-O, 9x HM-CC-TC, 1x HM-LC-Sw4-Ba-PCB, 2x HM-Sec-WDS, 1x HM-RC-12, 1x HM-RC-4-B,
1x HM-RC-Sec4-2, 2x HM-Sec-TiS, 2x HM-LC-Sw1-Ba-PCB, 2x HM-Sec-SCo, 1x HM-Sec-Key, 1x HM-Sec-SC-2, 2x HM-ES-PMSw1-Pl
CCU-2: 2.21.10 / Homeputer CL: 3.00 - 160919 / CL-Web-Server: 1.60 - 120326 / xmlapi-Addon: 1.10
Homeputer CL Studio: 4.0 - 161002 / VisuWin: 2.57 - 160912 / ExecEngineWin: 2.9 - 160810 / Modultabellen: 1.85 - 160919 / History CL: 1.2

Benutzeravatar
metaxa
Beiträge: 649
Registriert: 01.10.2011, 00:03
Wohnort: südliches Wien
Hat sich bedankt: 3 Mal

Re: Formatierung von Temperaturwerten in Scripts?

Beitrag von metaxa » 10.02.2013, 18:18

Lueghi hat geschrieben:Re: Formatierung von Temperaturwerten in Scripts?
von Lueghi » 10.02.2013, 17:57
Ich glaube, das geht gar nicht .... .
Hallo,

ich denke schon, ich bin nur einfach zu kurzsichtig, weil

Code: Alles auswählen

dom.GetObject("sv30_Formatierung").State(dom.GetObject("BidCos-RF.JEQ0393036:1.TEMPERATURE").Value().ToString(1) # " °C");
funkt z.B. auch einwandfrei. Die Beteiligten sind die gleichen Verdächtigen. Nur die Sysvar ist eine Zeichenkette.
Temp. Solsp. unformatiert 2.JPG
Temp. Solsp. unformatiert 2.JPG (12.11 KiB) 4932 mal betrachtet
Lg
mxa

Benutzeravatar
metaxa
Beiträge: 649
Registriert: 01.10.2011, 00:03
Wohnort: südliches Wien
Hat sich bedankt: 3 Mal

Re: Formatierung von Temperaturwerten in Scripts?

Beitrag von metaxa » 10.02.2013, 18:47

Mister2 hat geschrieben:Das Problem ist, das du die sv20 und sv22 Variablen ja auch zum Berechnen der Min und Max Werte des Tages benötigst.
Sobald du die Variablen in eine Zeichenkette umgewandelt hast, kannst du damit nicht mehr rechnen.
Ich würde daher für die Anzeige mit 2 zusätzlichen Variablen vom Typ Zeichenkette arbeiten-
z.B.
sv20t Solarspeicher max.
sv22t Solarspeicher min.

dann im Script diese Variablen noch füllen
Das ist es!!! Glaube ich, logisch ....

Bin schon am Umsetzen, dauert nur ein wenig, da sich bei 0° Aussentemperatur und Schneefall im Moment nicht viel an der Solarspeichertemperatur ändert :twisted:

*mal kurz Schneeschaufeln bin*

Lg, mxa

paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Re: Formatierung von Temperaturwerten in Scripts?

Beitrag von paul53 » 10.02.2013, 19:21

Mister2 hat geschrieben:...Sobald du die Variablen in eine Zeichenkette umgewandelt hast, kannst du damit nicht mehr rechnen.
Ja, eine direkte Verwendung zum Rechnen ist nicht möglich. Wenn man aber den Wert separiert und anschließend den Typ wandelt, sollte es wieder gehen.

Code: Alles auswählen

x = dom.GetObject("sv20t Solarspeicher max.").StrValueByIndex(" ",0).ToFloat();
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

Benutzeravatar
metaxa
Beiträge: 649
Registriert: 01.10.2011, 00:03
Wohnort: südliches Wien
Hat sich bedankt: 3 Mal

Re: Formatierung von Temperaturwerten in Scripts?

Beitrag von metaxa » 10.02.2013, 21:28

Mister2 hat geschrieben: dann im Script diese Variablen noch füllen

Code: Alles auswählen

! dann schreib in "sv20 Solarspeicher max." die jetztige Temperatur hinein.
maxTemp.Variable(source.Value());
dom.GetObject("sv20t Solarspeicher max.").State(maxTemp).ToString(1) # " °C";
}

Code: Alles auswählen

! dann schreib in "sv22 Solarspeicher min." die jetztige Temperatur hinein.
minTemp.Variable(source.Value());
dom.GetObject("sv22t Solarspeicher min.").State(minTemp).ToString(1) # " °C";
}
Das war der richtige Denkanstoss, Danke! Musste es noch etwas editieren, so funkt es jetzt:

Code: Alles auswählen

! dann schreib in "sv20 Solarspeicher max." die jetztige Temperatur hinein.
maxTemp.Variable(source.Value());
dom.GetObject("sv20t Solarspeicher max.").State(source.Value()).ToString(1) # " °C";

Code: Alles auswählen

! dann schreib in "sv22 Solarspeicher min." die jetztige Temperatur hinein.
minTemp.Variable(source.Value());
dom.GetObject("sv22t Solarspeicher min.").State(source.Value()).ToString(1) # " °C";
@ paul53:
paul53 hat geschrieben:
Mister2 hat geschrieben: Ja, eine direkte Verwendung zum Rechnen ist nicht möglich. Wenn man aber den Wert separiert und anschließend den Typ wandelt, sollte es wieder gehen.

Code: Alles auswählen

x = dom.GetObject("sv20t Solarspeicher max.").StrValueByIndex(" ",0).ToFloat();
Das ist mir zur Zeit (noch?) zwei Nummern zu groß :?:
Wo wird da der Wert als Zeichenkette dargestellt und DANACH? wieder eine Zahl weitergegeben? Ich möchte es zumindest verstehen, eventuell auch mal umsetzen ..... ich verstehe es zur Zeit nicht. Fürchte da fehlen mir noch Welten...

Lieben Dank an Alle!

Benutzeravatar
Mister2
Beiträge: 614
Registriert: 24.12.2010, 16:51

Re: Formatierung von Temperaturwerten in Scripts?

Beitrag von Mister2 » 10.02.2013, 21:55

Code: Alles auswählen

x = dom.GetObject("sv20t Solarspeicher max.").StrValueByIndex(" ",0).ToFloat();
dom.GetObject("sv20t Solarspeicher max.") liest den Wert aus "sv20t Solarspeicher max."
StrValueByIndex(" ",0) macht aus der Zeichenkette einen Index indem nach Leerzeichen gesucht wird und die Werte dort getrennt werden.
ToFloat() macht daraus eine Dezimalzahl

Bei z.B 10.5 °C
dom.GetObject("sv20t Solarspeicher max.") ergibt dann 10.5 °C
StrValueByIndex(" ",0) ergibt 10.5
ToFloat() macht aus dem Textstring (Zeichenkette) eine Dezimalzahl.

Nachher steht dann in x = 10.5

Und damit kannst du wiederum rechnen und es danach wieder mit dom.GetObject("sv20t Solarspeicher max.").State(source.Value()).ToString(1) # " °C"; als Zeichenkette speichern.

Usw., usw.
193 Kanäle in 125 Geräten:
1x HM-SCI-3-FM, 1x HM-WDS100-C6-O, 3x HM-PB-2-WM, 1x HM-PB-2-WM55, 1x HM-PB-6-WM55, 5x HM-Sec-MDIR, 5x HM-Sen-MDIR-O, 6x HM-LC-Sw1-Pl,
24x HM-Sec-RHS, 15x HM-LC-Sw1-FM, 6x HM-LC-Sw2-FM, 2x HM-LC-Sw1-Pl-2, 3x HM-Sec-SD, 1x HM-Sec-SD-Team, 2x HM-Sys-sRP-Pl, 9x HM-LC-Bl1-FM,
5x HM-LC-Bl1PBU-FM, 2x HM-OU-CF-Pl, 7x HM-WDS10-TH-O, 9x HM-CC-TC, 1x HM-LC-Sw4-Ba-PCB, 2x HM-Sec-WDS, 1x HM-RC-12, 1x HM-RC-4-B,
1x HM-RC-Sec4-2, 2x HM-Sec-TiS, 2x HM-LC-Sw1-Ba-PCB, 2x HM-Sec-SCo, 1x HM-Sec-Key, 1x HM-Sec-SC-2, 2x HM-ES-PMSw1-Pl
CCU-2: 2.21.10 / Homeputer CL: 3.00 - 160919 / CL-Web-Server: 1.60 - 120326 / xmlapi-Addon: 1.10
Homeputer CL Studio: 4.0 - 161002 / VisuWin: 2.57 - 160912 / ExecEngineWin: 2.9 - 160810 / Modultabellen: 1.85 - 160919 / History CL: 1.2

Benutzeravatar
metaxa
Beiträge: 649
Registriert: 01.10.2011, 00:03
Wohnort: südliches Wien
Hat sich bedankt: 3 Mal

Re: Formatierung von Temperaturwerten in Scripts?

Beitrag von metaxa » 10.02.2013, 22:20

Mister2 hat geschrieben:dom.GetObject("sv20t Solarspeicher max.") liest den Wert aus "sv20t Solarspeicher max."
StrValueByIndex(" ",0) macht aus der Zeichenkette einen Index indem nach Leerzeichen gesucht wird und die Werte dort getrennt werden.
ToFloat() macht daraus eine Dezimalzahl

Bei z.B 10.5 °C
dom.GetObject("sv20t Solarspeicher max.") ergibt dann 10.5 °C
StrValueByIndex(" ",0) ergibt 10.5
ToFloat() macht aus dem Textstring (Zeichenkette) eine Dezimalzahl.

Nachher steht dann in x = 10.5

Und damit kannst du wiederum rechnen und es danach wieder mit dom.GetObject("sv20t Solarspeicher max.").State(source.Value()).ToString(1) # " °C"; als Zeichenkette speichern.

Usw., usw.
Pffft...
das sieht echt genial aus. Wer denkt sich soetwas aus? Wo lernt man solche Feinheiten?
Ich werd mal in den nächsten Wochen herumtesten, sofern sich nicht eine neue andere Herausforderung ergibt :oops:

Zum Schluss sei mal gesagt, dass dieses Forum nicht nur sehr flott hilft sondern eines der wenigen ist, dass auch mit Erklärungen nicht geizt! Schön hier zu sein!

Lg aus Wien, mxa

Antworten

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