16-fach LED-Display Refresh Problem

Kabellose und kabelgebundene Sender und Empfänger der klassischen Homematic-Serie

Moderator: Co-Administratoren

Antworten
BitMac
Beiträge: 186
Registriert: 27.11.2015, 09:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal
Danksagung erhalten: 8 Mal

16-fach LED-Display Refresh Problem

Beitrag von BitMac » 13.11.2023, 14:26

Ich habe ein merwürdige Phänomen mit der 16-fach-LED-Anzeige.

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)
}
Hier das Script, alle Kanäle auf einmal zu schalten:

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));
Ich habe jetzt wieder auf die 1. Variante umgestellt, damit alles funktioniert.
Würde aber gern die 2 Variante verwenden.
Hat jemand ne Idee, was der Grund für das Verhalten sein kann ?

Sven_A
Beiträge: 4160
Registriert: 26.01.2016, 08:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Renningen
Hat sich bedankt: 352 Mal
Danksagung erhalten: 285 Mal

Re: 16-fach LED-Display Refresh Problem

Beitrag von Sven_A » 13.11.2023, 14:38

Meine Vermutung so wie ich das Teil kenne:
Das 16fach LED sendet den Zustand seiner LEDs nicht zurück an die Zentrale. Damit hat die Zentrale nach deinem Sammel-Update keine neuen Infos über den Zustand, und zeigt eben den letzten bekannten an.

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

Re: 16-fach LED-Display Refresh Problem

Beitrag von Roland M. » 13.11.2023, 14:47

Hallo!
BitMac hat geschrieben:
13.11.2023, 14:26
Ich habe die 16-fach LED als Favorit in der WEB-UI angelegt und benutze sie in Tinymatic.
Warum "die Anzeige der Anzeige" nutzen, wenn man auch direkt das Original - die Systemvariablen - verwenden könnte? :roll:


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,...

BitMac
Beiträge: 186
Registriert: 27.11.2015, 09:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal
Danksagung erhalten: 8 Mal

Re: 16-fach LED-Display Refresh Problem

Beitrag von BitMac » 13.11.2023, 14:54

Roland M. hat geschrieben:
13.11.2023, 14:47

Warum "die Anzeige der Anzeige" nutzen, wenn man auch direkt das Original - die Systemvariablen - verwenden könnte? :roll:
Sieht einfach schöner und übersichtlicher aus mit den farbigen Kreisen :)

Übrigens:
Sven hat Recht.
Ich habe nochmal in der Doku zu den Datenpunkten nachgesehen.
ALL_LEDS ist tatsächlich nur schreibend. Das scheint der Grund zu sein.

Um den Funkverkehr zu reduzieren, kann ich ja auch die auslösende Variable bestimmenn
und dann nur die entsprechende LED schalten.
Aber wie behandel ich dann den Fall, wenn sich mehrere Variablen geändert haben ?

Silverstar
Beiträge: 375
Registriert: 11.02.2020, 12:14
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 98 Mal
Danksagung erhalten: 68 Mal

Re: 16-fach LED-Display Refresh Problem

Beitrag von Silverstar » 13.11.2023, 15:17

Aktualisieren sich alle led status im Webui und xmlapi (tinymatic), wenn man nach einem all_leds noch einen led_status setzt? Das wäre vielleicht ein dutycycle schonender workaround.

BitMac
Beiträge: 186
Registriert: 27.11.2015, 09:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal
Danksagung erhalten: 8 Mal

Re: 16-fach LED-Display Refresh Problem

Beitrag von BitMac » 14.11.2023, 11:25

Silverstar hat geschrieben:
13.11.2023, 15:17
Aktualisieren sich alle led status im Webui und xmlapi (tinymatic), wenn man nach einem all_leds noch einen led_status setzt? Das wäre vielleicht ein dutycycle schonender workaround.
LED_STATUS schickt immer nur den Zustand von einem Kanal.
Man müßte also alle 16 abfragen.

Antworten

Zurück zu „HomeMatic Aktoren und Sensoren (klassisch)“