Seite 1 von 1

Bug bei logischen Verknüpfungen

Verfasst: 25.06.2022, 01:13
von Debi1986
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?

Re: Bug bei logischen Verknüpfungen

Verfasst: 25.06.2022, 01:49
von Roland M.
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

Re: Bug bei logischen Verknüpfungen

Verfasst: 25.06.2022, 07:24
von Tyfys
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)))

Re: Bug bei logischen Verknüpfungen

Verfasst: 25.06.2022, 10:51
von Matsch
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.

Re: Bug bei logischen Verknüpfungen

Verfasst: 25.06.2022, 11:05
von Roland M.
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

Re: Bug bei logischen Verknüpfungen

Verfasst: 27.06.2022, 21:48
von Debi1986
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.

Re: Bug bei logischen Verknüpfungen

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