Vergleichsoperationen in HM Script funktionieren nicht immer

Fehler in Firmware und WebUI & Workarounds

Moderator: Co-Administratoren

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

Vergleichsoperationen in HM Script funktionieren nicht immer

Beitrag von paul53 » 11.02.2013, 15:53

Durch Bildung von Nachkommastellen "weit hinten" bei der Verwendung von Meßwerten funktionieren Vergleichsoperationen in HM Script manchmal nicht wie erwartet.

Code: Alles auswählen

string raum = "Wohnen";

var x;
x = dom.GetObject(raum#".Sensor").DPByHssDP("TEMPERATURE").Value();
WriteLine(x);

x  = x - 12.1;
WriteLine(x);
if (x == 0.0) {WriteLine("Vergleich o.k.");}
else {WriteLine("Vergleich falsch");}
WriteLine(x * 100000);
Ausgabe:

Code: Alles auswählen

12.100000
-0.000000
Vergleich falsch
-0.000596
Workaround: Verwendung von Systemvariablen als Zwischenspeicher für Meßwerte. Bei Verwendung von Systemvariablen als Zwischenspeicher habe ich das fehlerhafte Verhalten noch nicht beobachtet. Das Zwischenspeichern in SV ist aufgrund der Reboot-Problematik (Initialisierung der Meßwerte auf 0 bei Reboot) ohnehin zu empfehlen.

Oder in String und wieder zurück wandeln:

Code: Alles auswählen

x = x.ToString(1).ToFloat();
Zuletzt geändert von paul53 am 18.02.2013, 14:55, insgesamt 2-mal geändert.
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)

stefanp
Beiträge: 38
Registriert: 18.12.2012, 22:15

Re: Vergleichsoperationen in HM Script funktionieren nicht i

Beitrag von stefanp » 11.02.2013, 21:39

Gerade da ein Float per WriteLine nur mit 5 NKs angezeigt wird versuche ich mir gerade die Begeisterung auszumalen wenn man diesen Fehler nach ewiger Suche entdeckt.

Großes Kino :shock:

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

Re: Vergleichsoperationen in HM Script funktionieren nicht i

Beitrag von paul53 » 11.02.2013, 23:01

stefanp hat geschrieben:... versuche ich mir gerade die Begeisterung auszumalen wenn man diesen Fehler nach ewiger Suche entdeckt.
Deshalb habe ich den Fehler hier publiziert. In dem Thread http://homematic-forum.de/forum/viewtop ... =27&t=8258, in dem er vielleicht das erste Mal festgestellt wurde, ist er ein Problem unter anderen und geht dort deshalb vermutlich unter.
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)

Katte
Beiträge: 3
Registriert: 10.03.2013, 12:18

Re: Vergleichsoperationen in HM Script funktionieren nicht i

Beitrag von Katte » 10.03.2013, 12:54

Ich kann nur jedem raten, bei Gleitkommazahlen auf einen Vergleich auf Gleichheit zu verzichten. Das gilt auch für andere Programmiersprachen und hat schon Generationen von Programmierern in den Wahnsinn getrieben!

Code: Alles auswählen

string raum = "Wohnen";

real x;
x = 10 * dom.GetObject(raum+".Sensor").DPByHssDP("TEMPERATURE").Value();
integer ix = x.ToInteger();
ix  = ix - 121;
if (ix == 0 ) 
{
  WriteLine("Vergleich o.k.");
}
else
{
  WriteLine("Vergleich falsch");
}

Antworten

Zurück zu „HomeMatic - bekannte Bugs“