HM Script Variable addieren

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

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

Re: HM Script Variable addieren

Beitrag von Black » 31.12.2019, 10:32

nicht unbedingt, wenn deine Sysvars vom typ string sind kommt genau das dabei raus.

und noch ein Tip, direkt dran gewöhnen, systemvariablen im richtigen Namensraum zu greifen.

dom.GetObject (ID_SYSTEM_VARIABLES).Get ("NameDerSysVar").State ();

damit vermeidet man Fehler bei gleichen Namen in unterscheidlichen namenräumen

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

Xel66
Beiträge: 14164
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 585 Mal
Danksagung erhalten: 1500 Mal

Re: HM Script Variable addieren

Beitrag von Xel66 » 31.12.2019, 12:43

Wenn Du zwei Strings aneinanderfügst, dann kommt genau das raus. Aus Oma und Opa wird nun mal nur OmaOpa und nicht Großeltern. Wenn Du mathematisch addieren willst, dann musst Du auch die mathematische Notation benutzen. Die Scriptingengine hält noch mehr Überraschungen bereit (z.B. Rechnung von rechts nach links), dass es dringend geboten ist, die Doku (auch wenn sie sehr rudimentär ist) zu lesen.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Balisto
Beiträge: 50
Registriert: 14.03.2016, 08:11
Hat sich bedankt: 10 Mal
Danksagung erhalten: 1 Mal

Re: HM Script Variable addieren

Beitrag von Balisto » 23.04.2023, 20:53

Hallo,

berechne ich falsch? oder ist die Ausgabe nicht richtig?

Code: Alles auswählen

real a = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("Shelly_3EM_Hauptzaehler_Leistung1");
real b = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("Shelly_3EM_Hauptzaehler_Leistung2");
real c = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("Shelly_3EM_Hauptzaehler_Leistung3");

real d =a+b+c;

WriteLine(a.Value());
WriteLine(b.Value());
WriteLine(c.Value());
WriteLine(d.Value());
Ausgabe ist:

[*]523.51
326.54
346.03
523.51

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

Re: HM Script Variable addieren

Beitrag von Black » 23.04.2023, 21:10

DU versuchst da Objekte zu addieren.
(Zu beachten den Typwechsel Deklariert Real nach Object, das was ich gelb markiert habe)
Wobei ich aber mal schnell zur Demonstration 2 Sysvars aus meinem Testsystem genommen habe, reicht aber zum Effekt vorführen.

OBj1.PNG
Is Natürlich quatsch sowas.

Schreibs mal so, dann wirds richtiger:

Code: Alles auswählen

real a = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Shelly_3EM_Hauptzaehler_Leistung1").Value();
real b = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Shelly_3EM_Hauptzaehler_Leistung2").Value();
real c = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Shelly_3EM_Hauptzaehler_Leistung3").Value();

real d =a+b+c;

WriteLine(a);
WriteLine(b);
WriteLine(c);
WriteLine(d);
Grund: das dom.GetObject(ID_SYSTEM_VARIABLES).Get("Shelly_3EM_Hauptzaehler_Leistung1") referenziert das Objekt der Systemvarialen, nicht deren Wert. dafür brauchts das .Value();

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

Balisto
Beiträge: 50
Registriert: 14.03.2016, 08:11
Hat sich bedankt: 10 Mal
Danksagung erhalten: 1 Mal

Re: HM Script Variable addieren

Beitrag von Balisto » 25.04.2023, 20:47

Hi Black,

super, vielen lieben Dank

Antworten

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