Bug bei logischen Verknüpfungen

Fehler in Firmware und WebUI & Workarounds

Moderator: Co-Administratoren

Antworten
Debi1986
Beiträge: 12
Registriert: 30.04.2022, 16:53
System: CCU und Access Point

Bug bei logischen Verknüpfungen

Beitrag von Debi1986 » 25.06.2022, 01:13

Ich arbeite hier mit einem Raspberrymatic in Version 3.63.9.20220521.

Habe mir heute an einem Problem die Zähne ausgebissen, bis ich merkte, dass glaube ich grundlegende logische Verknüpfungen nicht funktionieren.
Speziell bei der UND-Verknüpfung zweier Bedingungen.

Hier mein nicht funktionierendes Dimmer-Skript:

Code: Alles auswählen

var TARGET = "Hue-Kueche:1";

integer Steps = dom.GetObject ("Steps");

WriteLine(Steps.Value());
WriteLine(dom.GetObject(TARGET).State());

if((dom.GetObject(TARGET).State()<=0 && Steps.Value() < 0) || (dom.GetObject(TARGET).State()>=1 && Steps.Value() > 0)) {
  WriteLine("change");
  Steps.Variable(Steps.Value() * -1);
}
  
dom.GetObject(TARGET).State(dom.GetObject(TARGET).State() + Steps.Value());
Zur Erläuterung:
Der Status der Hue Lampe liegt hier in der Regel zwischen 0 (aus) und 1 (an). Steps ist hier eine Systemvariable, die z.B. den Wert 0.1 enthält, also um in 0.1 Schritten zu dimmen.

Mit folgendem Aufbau ohne logische UND/ODER-Verknüpfung sondern Schachtelung der Bedingungen in einzelne If-Abfragen hatte es funktioniert...

Code: Alles auswählen

var TARGET = "Hue-Kueche:1";

var Steps = dom.GetObject ("Steps");

WriteLine(Steps.Value());
WriteLine(dom.GetObject(TARGET).State());

if(dom.GetObject(TARGET).State() <= 0) {
  if(Steps.Value() < 0) {
    WriteLine("up");
    Steps.Variable(Steps.Value() * -1);
  }
} 

if(dom.GetObject(TARGET).State() >= 1) {
  if(Steps.Value() > 0) {
    WriteLine("down");
    Steps.Variable(Steps.Value() * -1);
  }
}

dom.GetObject(TARGET).State(dom.GetObject(TARGET).State() + Steps.Value());
Hat jemand dieses Phänomen auch schon einmal gehabt? Sofern das ein Bug ist, wo kann man den am schlausten melden?

Benutzeravatar
Roland M.
Beiträge: 9720
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 251 Mal
Danksagung erhalten: 1351 Mal

Re: Bug bei logischen Verknüpfungen

Beitrag von Roland M. » 25.06.2022, 01:49

Hallo und willkommen im Forum!
Debi1986 hat geschrieben:
25.06.2022, 01:13

Code: Alles auswählen

if((dom.GetObject(TARGET).State()<=0 && Steps.Value() < 0) || (dom.GetObject(TARGET).State()>=1 && Steps.Value() > 0)) {
Hat jemand dieses Phänomen auch schon einmal gehabt? Sofern das ein Bug ist, wo kann man den am schlausten melden?
Das ist kein Bug im eigentlichen Sinn, die Scriptsprache liebt jedoch Klammern!

In deinem Fall also etwa so:

Code: Alles auswählen

If (((Bedingung1 <=0) && (Bedingung2 < 0)) || ((Bedinung3 >=1) && (Bedingung4 > 0)))
Das hängt auch mit der etwas unorthodoxen Abarbeitung und Auflösung von Rechenschritten (rechts nach links) und automatischer Typenänderung zu tun.

Zum Augenöffnen führe einmal dieses Script aus:

Code: Alles auswählen

boolean x = 0.0 + "Hello world" / 0;
WriteLine(x.Type());
:D


Roland
Zuletzt geändert von Roland M. am 25.06.2022, 11:04, insgesamt 1-mal geändert.
Grund: Logikfehler berichtigt
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

Tyfys
Beiträge: 522
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 26 Mal
Danksagung erhalten: 120 Mal

Re: Bug bei logischen Verknüpfungen

Beitrag von Tyfys » 25.06.2022, 07:24

Roland ist doch noch eine öffnenden Klammer bei Bedingung4 abhanden gekommen,
hat es aber so gemeint:

Code: Alles auswählen

If (((Bedingung1 <=0) && (Bedingung2 < 0)) || ((Bedinung3 >=1) && (Bedingung4 > 0)))
Gruß
Harry

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: Bug bei logischen Verknüpfungen

Beitrag von Matsch » 25.06.2022, 10:51

Debi1986 hat geschrieben:
25.06.2022, 01:13
bis ich merkte, dass glaube ich grundlegende logische Verknüpfungen nicht funktionieren.
Du hast die Script-Dokumentation gelesen? Dann weißt du doch, dass die Script-Interpretation keinerlei Vorrrangregeln kennt und Scripte stur von rechts nach links abgearbeitet werden. Der Anwender muß also konsequent die Vorrangregeln durch massives Setzen von Klammern selbst erzwingen.
Daher: KEINE grundlegende Disfunktion, sondern beschriebene Eigenart der sehr einfachen Scriptsprache, die man in der Dokumenation nachlesen kann.

Benutzeravatar
Roland M.
Beiträge: 9720
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 251 Mal
Danksagung erhalten: 1351 Mal

Re: Bug bei logischen Verknüpfungen

Beitrag von Roland M. » 25.06.2022, 11:05

Hallo Harry!
Tyfys hat geschrieben:
25.06.2022, 07:24
Roland ist doch noch eine öffnenden Klammer bei Bedingung4 abhanden gekommen,
Danke für die Berichtigung, ich hab den Fehler jetzt oben ausgebessert.
Um diese Tageszeit sollte man eben doch keine Postings mehr schreiben... ;)


Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

Debi1986
Beiträge: 12
Registriert: 30.04.2022, 16:53
System: CCU und Access Point

Re: Bug bei logischen Verknüpfungen

Beitrag von Debi1986 » 27.06.2022, 21:48

Oh, danke für die Tipps... Habe die Dokumentation tatsächlich nicht bis zum Ende gelesen. Ist doch tatsächlich eine recht gruselige Skriptsprache. :roll:
Da bin ich doch zu sehr von anderen Programmiersprachen verwöhnt und ich dachte tatsächlich, dahinter steckt ein Javascript oder ähnliches... aber danke für die Infos.

Debi1986
Beiträge: 12
Registriert: 30.04.2022, 16:53
System: CCU und Access Point

Re: Bug bei logischen Verknüpfungen

Beitrag von Debi1986 » 27.06.2022, 21:55

Wobei es ja eigentlich kein Javascript sein konnte, da wäre es schließlich syntaktisch korrekt gewesen... Selbsterkenntnis kam eben erst, sorry :lol:

Antworten

Zurück zu „HomeMatic - bekannte Bugs“