[GELÖST] widgetOverride slider mit separatem Status Reading

Begonnen von Olaf, 29 April 2020, 16:27:35

Vorheriges Thema - Nächstes Thema

Olaf

Hi,

ich versuche gerade, einen KNX Dimmer mit einem widgetOverride slider sauber zu definieren. Folgende Definition verwende ich aktuell:


define Wohnzimmer_Deckenlampen KNX 2/4/83:dpt5.001:Dimmwert:nosuffix 2/5/83:dpt5.001:StatusDimmwert:listenonly:nosuffix 2/1/83:dpt1:Schalten:nosuffix 2/2/83:dpt1:StatusSchalten:listenonly:nosuffix
attr Wohnzimmer_Deckenlampen IODev knxd
attr Wohnzimmer_Deckenlampen eventMap /Schalten on:an/Schalten off:aus/
attr Wohnzimmer_Deckenlampen webCmd an:aus:Dimmwert
attr Wohnzimmer_Deckenlampen stateCmd {$state = ReadingsVal('Wohnzimmer_Deckenlampen','StatusSchalten','')}
attr Wohnzimmer_Deckenlampen widgetOverride Dimmwert:slider,0,10,100
attr Wohnzimmer_Deckenlampen room Wohnbereich
attr Wohnzimmer_Deckenlampen alias Deckenlampen
attr Wohnzimmer_Deckenlampen group Lampen


Das meiste funktioniert, d.h. wenn ich auf an klicke, geht das Licht an, und wenn ich auf aus klicke, geht das Licht aus. Wenn ich den Schieber betätigte, wird die korrekte Dimmstufe eingestellt und der Status steht auf an.

Mein Problem ist das Folgende: wenn die Lampe einfach nur angeschaltet wird, wird automatisch der letzte Dimmwert verwendet, z.B. 40%. Dieser Wert kommt auch über StatusDimmwert rein und steht dann auch im Reading StatusDimmwert. Das Reading Dimmwert selbst wird aber nur geschrieben, wenn ich entweder über KNX einen Dimmwert vorgebe oder den Slider in FHEM benutze. Im Übrigen bleibt das Reading auf dem alten Wert. Damit bleibt aber auch der Slider immer auf dem alten Wert, selbst wenn der StatusDimmwert längst etwas anderes anzeigt.

Ich müsste also entweder das Reading Dimmwert verändern, wenn sich das Reading StatusDimmwert ändert, oder der Slider müsste zwei unterschiedliche Readings verwenden (einmal für set und einmal für get). Letzeres scheint nicht zu gehen, aber auch ersteres bekomme ich nicht hin.

Ich wäre für jeden Tipp dankbar.

VG, Olaf

Beta-User

Falls man das nicht auf der KNX-Seite besser hinbekommt (braucht es zwei Namen Dimmwert und StatusDimmwert oder ginge auch derselbe?), könnte das mit einem userReadings-Eintrag klappen:
attr Wohnzimmer_Deckenlampen userReadings Dimmwert:StatusDimmwert.* {Readingsval($name,'StatusDimmwert',0)}"Nachteil": Das verändert den Readingwert (was hier aber ausnahmsweise gewollt ist, nehme ich an).
Alternativ ginge evtl. auch eventMap, dann aber nur in der asymetrischen Variante (https://fhem.de/commandref_modular_DE.html#attributes, aber das ist dem Gefühl nach eher was für state).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Olaf

Danke. Mit userReadings bekomme ich allerdings einen Fehler.

Ich habe es jetzt einmal über ein notify versucht.

define not_Dimmwerte notify Wohnzimmer_Deckenlampen:StatusDimmwert:.* setreading $NAME Dimmwert $EVTPART1


Das ist nicht optimal, aber zumindest bekomme ich so den Wert von Dimmwert aktualisiert. Zugleich zeigt das aber auch den Nachteil dieser Methode auf, denn ich muss die Seite neu laden, damit der geänderte Reading-Wert auch im Slider angezeigt wird, d.h. den Reading-Wert zu verändern ist vermutlich nicht der richtige Weg.

An die explizite Variante von eventMap hatte ich auch schon gedacht, aber da bin ich noch nicht ganz durchgestiegen.

Olaf

Mit userReadings geht es doch. Ich hatte übersehen, dass bei Readingsval versehentlich das "v" klein war. Habe es jetzt so geschrieben:

attr Wohnzimmer_Deckenlampen userReadings Dimmwert:StatusDimmwert.* {ReadingsVal($name,'StatusDimmwert',0)}

und damit klappt es wie gewünscht.

Vielen Dank!