String in Real umwandeln

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

duffy6
Beiträge: 184
Registriert: 14.03.2017, 10:29
Hat sich bedankt: 29 Mal
Danksagung erhalten: 1 Mal

String in Real umwandeln

Beitrag von duffy6 » 27.11.2020, 21:44

Hallo zusammen,

ich komm nicht dahinter, warum mein Skript nicht funktioniert:

Code: Alles auswählen

string avg;
system.Exec("curl 'http://192.168.133.102:8091/query/text.gy?dp=294&b=-1M&ag=avg'", &avg); ! Wert aus CCU-Homematic holen
WriteLine("Wert aus CCU-Historian: "#avg);
real prozent = avg.ToReal();

real maxleistung = 15;
real heizwert = 11.295;
real zustandszahl =0.9571;

real verbrauch = (prozent/100) * maxleistung * 24 / (heizwert * zustandszahl);
WriteLine("Verbrauch in m3: "#verbrauch);
Die Variable "verbrauch" wird einfach nicht richtig berechnet!
Sie ist stets genauso groß wie "avg"

Ich komme nicht dahinter, wie ich mit dem Wert "avg" weiterrechnen kann...

Gruß
duffy6
——-
Raspberrymatic auf einem Raspi 3B, Funkmodul HM-MOD-RPI-PCB

Matsch
Beiträge: 5345
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 113 Mal
Danksagung erhalten: 722 Mal

Re: String in Real umwandeln

Beitrag von Matsch » 27.11.2020, 21:50

Es gibt in der Skriptsprache keinerlei Vorrangregeln, es wird streng von rechts nach links berechnet. Vorränge müssen immer mit Klammern erzwungen werden, das ist hier beim Dividenden wohl nicht der Fall.

jp112sdl
Beiträge: 12072
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 846 Mal
Danksagung erhalten: 2138 Mal
Kontaktdaten:

Re: String in Real umwandeln

Beitrag von jp112sdl » 27.11.2020, 22:13

duffy6 hat geschrieben:
27.11.2020, 21:44

Code: Alles auswählen

real prozent = avg.ToReal();
.ToReal(); gibt es nicht.
Es muss .ToFloat() heißen.

Seite 19:
https://www.eq-3.com/Downloads/eq3/down ... g_V2.2.pdf

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

duffy6
Beiträge: 184
Registriert: 14.03.2017, 10:29
Hat sich bedankt: 29 Mal
Danksagung erhalten: 1 Mal

Re: String in Real umwandeln

Beitrag von duffy6 » 27.11.2020, 22:59

Oh, das war ein Typo. Im Skript steht tatsächlich .ToFloat()

Aber dad Skript wirft gar nix aus! Nicht mal einen Fehler!

Es ist zum Haare raufen:

Code: Alles auswählen

string avg;
system.Exec("curl 'http://192.168.133.102:8091/query/text.gy?dp=294&b=-1M&ag=avg'", &avg);
WriteLine("Mittelwert aus CCU-Historian in Prozent: "#avg);

real prozent; 
prozent = avg.ToFloat();

real maxleistung = 15;
real heizwert = 11.295;
real zustandszahl = 0.9571;
                                                                                         
real verbrauch = (avg/100) * maxleistung * 24 / (heizwert * zustandszahl);
WriteLine("Verbrauch in m3: "#verbrauch);

——-
Raspberrymatic auf einem Raspi 3B, Funkmodul HM-MOD-RPI-PCB

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

Re: String in Real umwandeln

Beitrag von Black » 27.11.2020, 23:13

doch, wirft es...
der Fehler steht dann im Syslog, der Editor der CCU/RMatik gibt die aber nicht direkt den zugehörigen Teil des Fehlerprotokolles aus.

"Script testen" hätte den fehler auch angezeit.

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

Matsch
Beiträge: 5345
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 113 Mal
Danksagung erhalten: 722 Mal

Re: String in Real umwandeln

Beitrag von Matsch » 27.11.2020, 23:28

Frage mich gerade, was herauskommt, wenn man einen String durch 100 teilt.

(avg/100)

Benutzeravatar
Baxxy
Beiträge: 10603
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 594 Mal
Danksagung erhalten: 2173 Mal

Re: String in Real umwandeln

Beitrag von Baxxy » 27.11.2020, 23:31

duffy6 hat geschrieben:
27.11.2020, 22:59
Es ist zum Haare raufen:
Black hat geschrieben:
27.11.2020, 23:13
doch, wirft es...
Macht es nicht, ist ja prinzipiell nicht falsch.
Er wandelt zwar...

Code: Alles auswählen

real prozent; 
prozent = avg.ToFloat();
Aber in der Berechnungszeile setzt er doch wieder avg ein.

Code: Alles auswählen

real verbrauch = (avg/100) * maxleistung * 24 / (heizwert * zustandszahl);
mit optimiertem Einzeiler:

Code: Alles auswählen

real prozent = avg.Trim().ToFloat();
und richtiger Berechnungszeile:

Code: Alles auswählen

real verbrauch = (prozent/100) * maxleistung * 24 / (heizwert * zustandszahl);
sollte es dann, vorausgesetzt die "Formel" stimmt, passen. :wink:

Benutzeravatar
Baxxy
Beiträge: 10603
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 594 Mal
Danksagung erhalten: 2173 Mal

Re: String in Real umwandeln

Beitrag von Baxxy » 27.11.2020, 23:33

Matsch hat geschrieben:
27.11.2020, 23:28
Frage mich gerade, was herauskommt, wenn man einen String durch 100 teilt.
Auf jeden Fall nichts stringentes. :mrgreen:

duffy6
Beiträge: 184
Registriert: 14.03.2017, 10:29
Hat sich bedankt: 29 Mal
Danksagung erhalten: 1 Mal

Re: String in Real umwandeln

Beitrag von duffy6 » 27.11.2020, 23:34

Code: Alles auswählen


string avg;
system.Exec("curl 'http://192.168.133.102:8091/query/text.gy?dp=294&b=-1M&ag=avg'", &avg);
WriteLine("Mittelwert aus CCU-Historian in Prozent: "#avg);

real prozent; 
prozent = avg.ToFloat();

real maxleistung = 15;
real heizwert = 11.295;
real zustandszahl = 0.9571;
                                                                                         
real verbrauch = (avg/100) * maxleistung * 24 / (heizwert * zustandszahl);
WriteLine("Verbrauch in m3: "#verbrauch);

Die Berechnung funktioniert leider nicht!
Das Ergebnis lautet dann verbrauch = avg
Dabei sollte verbrauch ja einen ganz anderen Wert annehmen
——-
Raspberrymatic auf einem Raspi 3B, Funkmodul HM-MOD-RPI-PCB

Matsch
Beiträge: 5345
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 113 Mal
Danksagung erhalten: 722 Mal

Re: String in Real umwandeln

Beitrag von Matsch » 28.11.2020, 00:43

Ich steig aus ..... :roll:

Warum fragst du eigentlich die Community, wenn du dann keinen einzigen Hinweis umsetzt?
Zuletzt geändert von Matsch am 28.11.2020, 10:47, insgesamt 1-mal geändert.

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“