Voraussetzung:
Um den Funkverkehr gering zu halten, gibt es bei mir zu jeder LED eine Systemvariable.
Der Sinn ist, wenn ich den Zustand der Anzeige wissen will, greife ich (eben ohne Funkverkehr) auf die
Systemvariable zu. Nur wenn sich eine ändert, wird das Display aktualisiert.
Sonst rauscht schnell mal der Dutycycle hoch, wenn man öfter mal was schaltet.
Zum Aktualisieren des Displays gibt es ja 2 Möglichkeiten:
1. Ich schicke zu jeder einzelnen LED den Befehl rüber
z.B. dom.GetObject(BidCos-RF.KEQ01xxxxx:1.LED_STATUS").State(3) )
Damit habe ich im worst-case Fall 16 Sendebefehle.
oder
2. Ich berechne den Wert für den Zustand aller LEDs und schicke den Befehl
z.B. dom.GetObject("BidCos-RF.IEQ12xxxxxxx:1.ALL_LEDS").State("3221225472")
Das ist nur ein Sendebefehl für alle LED's.
Funktioniert auch alles.
Nun zum Problem:
Ich habe die 16-fach LED als Favorit in der WEB-UI angelegt und benutze sie in Tinymatic.
Bei der 1. Variante funktioniert alles,
bei der 2. Variante wird nur das Display selber upgedatet,
aber weder in der Web-UI noch in Tinymatic werden die Änderungen übernommen.
Hier das Script, um alle Kanäle einzeln zu schalten:
Code: Alles auswählen
var ch;
var i= 0;
var led;
var outstr;
! Alle Systemvariablen der LED-Zustände einlesen
while (i < 16) {
i = i + 1;
ch = i.ToString(0);
led = dom.GetObject("fl_led_"#ch).Value();
outstr = "BidCos-RF.KEQ0xxxxxxx:"+ ch.ToString(0) + ".LED_STATUS";
dom.GetObject(outstr).State(led)
}
Code: Alles auswählen
var ch;
var i= 0;
var led;
var all = 0.0; ! Ausgabewert
var f = 1.0; ! Faktor je nach LED
! Alle Systemvariablen der LED-Zustände einlesen
while (i < 16) {
i = i + 1;
ch = i.ToString(0);
led = dom.GetObject("fl_led_"#ch).Value();
all = all + (f * led); ! Zusammengebauter Wert für die Anzeige
f = 4.0 * f; ! Wertigkeit (Led-Position) erhöhen
}
! Seriennummer anhand des Gerätenames (hier: LED16) ermiiteln
string Name = "LED16";
string Adresse = dom.GetObject(Name).Address();
string device = "BidCos-RF." + Adresse + ":" + "1" + ".ALL_LEDS";
! Alle LED's auf einmal setzen
dom.GetObject(device).State(all.ToString(0));
Würde aber gern die 2 Variante verwenden.
Hat jemand ne Idee, was der Grund für das Verhalten sein kann ?