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());
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());