Wer manipuliert hier den Status?

Begonnen von Damian, 09 März 2022, 22:29:42

Vorheriges Thema - Nächstes Thema

Damian

Ich habe das Problem, dass der Status eines Devices verschwindet, wenn man per FHEM-Widget z. B. select ein Reading des eigenen Devices verändert. Per F5 Aktualisierung kann der Status wiederhergestellt werden. Das Problem tritt in FW_detailFn nicht auf. Bei Readings fremder Devices gibt es dagegen kein Problem. Das Modul selbst verändert den Status nicht.

Zum Nachvollziehen folgende Definition mit dem FHEM-Widget select:

defmod di_tester DOIF {}
attr di_tester room Labor
attr di_tester uiState {package ui_Table}\
widget([$SELF:test,"off"],"select,on,off")
attr di_tester uiTable {package ui_Table}\
widget([$SELF:test,"off"],"select,on,off")

setstate di_tester initialized
setstate di_tester 2022-03-09 22:19:26 test on
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Vielleicht anders ausgedrückt, ohne auf die internen Abläufe einzugehen:

Mechanismen, die mit FW_detailFn funktionieren, funktionieren mit summaryFn nicht.

Was muss der Entwickler bei Nutzung von summaryFn beachten?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

Soweit ich sehe, existiert das Problem sowohl in der Uebersicht, wie auch in der Detailansicht.

fhemweb.js ruft bei der Initialisierung der Seite fuer alle div.fhemWidget Elemente FW_replaceWidget auf.
Bei Statusaenderung wird die Seite nicht neu aufgebaut, sondern nur der neue Wert hingeschickt.
Falls das Statuswidget setValueFn hat, dann wird sie mit dem Wert aufgerufen, ansonsten das HTML mit dem Wert ersetzt.
Bei dieser Ersetzung wurde FW_replaceWidget nicht aufgerufen.

Ab sofort wird FW_replaceWidget auch nach der Ersetzung aufgerufen.

Damian

Zitat von: rudolfkoenig am 10 März 2022, 18:55:05
Ab sofort wird FW_replaceWidget auch nach der Ersetzung aufgerufen.

Danke, das war´s. Jetzt verhält sich die Statusansicht genauso (korrekt), wie die Details-Ansicht - das wird viele DOIF-User freuen :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF