DOIF: Problem bei Befehl set/setreading

Begonnen von jayjay, 17 Dezember 2019, 14:55:57

Vorheriges Thema - Nächstes Thema

jayjay

Hinweis: fälschlicherweise hatte ich das Thema ins Forum Software verschoben und kann es von dort nicht mehr in dieses Forum verschieben. Daher habe ich es hier nochmal als Thema eröffnet!

Bei Ausprobieren von DOIF für eine TabletUI Anwendung bin ich auf folgendes Problem gestoßen:

Ich überprüfe mit DOIF den State eines Device auf bestimmte Zustände und setze je nach Zustand ein anderes Reading in dem gleichen Device.


define dtest1 dummy
attr dtest1 readingList popup

define openpopup DOIF ([dtest1:state] eq "2") (set dtest1 popup on) DOELSEIF ([dtest1:state] eq "1")  (set dtest1 popup off)
attr openpopup do always
attr openpopup addStateEvent 1


Wenn sich der State von dtest1  zwischen 1 und 2 ändere wird der entsprechende Befehl von DOIF ausgeführt und der Event Monitor zeigt auch an, dass der Wert des Readings "popup" sich entsprechend geändert hat. Im Fenster des Devices dtest1 wird aber die Änderung des Readings "popup" nicht automatisch angezeigt während die Änderung des Readings "state" angezeigt wird. Ich muss das Fenster manuell neu laden damit die Änderung sichtbar wird.
Im Zusammenspiel mit TabletUI erfolgt auch kein Update von Widgets die sich auf das Reading beziehen.

Das Problem betrifft nur das Device, das auch in DOIF ausgewertet wird.


define dtest1 dummy
attr dtest1 readingList state popup

define dtest2 dummy
attr dtest2 readingList state popup

define openpopup DOIF ([dtest1:state] eq "2") (set dtest1 popup on, set dtest2 popup on) DOELSEIF ([dtest1:state] eq "1")  (set dtest1 popup off, set dtest2 popup off)
attr openpopup do always
attr openpopup addStateEvent 1

Beim zweiten Device dtest2 wird bei DOIF Aktionen das Device Fenster automatisch mit dem neuen Wert von "popup" aktualisiert während in dtest1 keine Aktualisierung von "popup" erfolgt.

Auch wenn ich anstelle von "state" ein anderes Reading überprüfe (wie im folgenden Beispiel "value") wird das Device Fenster mit dem neuen Wert von "popup" aktualisiert.


define dtest1 dummy
attr dtest1 readingList popup value

define openpopup DOIF ([dtest1:value] eq "2") (set dtest1 popup on) DOELSEIF ([dtest1:value] eq "1")  (set dtest1 popup off)
attr openpopup do always

Bei Verwendung von "setreading" anstelle von "set" habe ich das gleiche Verhalten.
FHEM in virtueller Maschine (Ubuntu) auf Intel Serverboard
HM-TC-IT-WM-W-EU, HM-CC-RT-DN, Vitodens 200 Gastherme Anbindung über vcontrol ( leider nur lesend) und Eigenbau Interface als Emulation eines abgesetzten Raumthermostaten (Soll-Temperatur Steuerung)

Damian

Vermutlich hat das den gleichen Ursprung: https://forum.fhem.de/index.php/topic,101106.msg946007.html

Es müsste funktionieren, wenn man den set-Befehl mit einem Wait z. B. 0.1 verzögert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF