Homematic Dimmer funktioniert nicht optimal mit Slider

Begonnen von uli2, 04 Mai 2014, 00:12:57

Vorheriges Thema - Nächstes Thema

uli2

Hallo,

ich habe mehrere Homematic Unterputz-Dimmer Typ HM-LC-Dim1TPBU-FM die ich auf einem Touchscreen (Tablet) gerne mit dem Slider Element bedienen würde.  Das funktioniert prizipiell auch mit
attr WZ_Stehlampe_Sw webCmd pct

Allerdings gibt es mit dem Slider ein Problem:
wenn man den Dimmer über den Slider bedient (z.B. von 0% auf 45%) springt der Slider erstmal wieder auf 0% zurück. Erst nach einigen Sekunden, wenn der Dimmer den Zielwert erreicht hat und einen aktuellen Status schickt, springt der Slider wider auf 45%. Das ist irgendwie unschön.
Das ganze liegt daran, dass der Dimmer sofort nachdem er einen set_XX Befehl bekommen hat erstmal seinen aktuellen Status (in diesem Fall 0%) zurückschickt und der Slider sich immer auf den aktuell gemeldeten pct Wert anpasst.
2014-05-03 23:45:22.999 CUL_HM WZ_Stehlampe CMDs_pending
2014-05-03 23:45:23.014 CUL_HM WZ_Stehlampe_Sw level: set_45
2014-05-03 23:45:23.026 CUL_HM WZ_Stehlampe_Sw set_45
2014-05-03 23:45:23.436 CUL_HM WZ_Stehlampe CMDs_done
2014-05-03 23:45:23.477 CUL_HM WZ_Stehlampe_Sw level: 0.5
2014-05-03 23:45:23.477 CUL_HM WZ_Stehlampe_Sw pct: 0.5
2014-05-03 23:45:23.477 CUL_HM WZ_Stehlampe_Sw deviceMsg: 0.5 (to HM)
2014-05-03 23:45:23.477 CUL_HM WZ_Stehlampe_Sw chn:0.5 phys:0
2014-05-03 23:45:23.477 CUL_HM WZ_Stehlampe_Sw timedOn: off
2014-05-03 23:45:23.477 CUL_HM WZ_Stehlampe_Sw dim: up:0.5
2014-05-03 23:45:23.477 CUL_HM WZ_Stehlampe_Sw overload: off
2014-05-03 23:45:23.477 CUL_HM WZ_Stehlampe_Sw overheat: off
2014-05-03 23:45:23.477 CUL_HM WZ_Stehlampe_Sw reduced: off
2014-05-03 23:45:29.424 CUL_HM WZ_Stehlampe CMDs_pending
2014-05-03 23:45:29.599 CUL_HM WZ_Stehlampe chn:0 % phys:45
2014-05-03 23:45:29.599 CUL_HM WZ_Stehlampe phyLevel: 45
2014-05-03 23:45:29.599 CUL_HM WZ_Stehlampe CMDs_done
2014-05-03 23:45:29.697 CUL_HM WZ_Stehlampe_Sw phyLevel: 45
2014-05-03 23:45:29.697 CUL_HM WZ_Stehlampe_Sw level: 45
2014-05-03 23:45:29.697 CUL_HM WZ_Stehlampe_Sw pct: 45
2014-05-03 23:45:29.697 CUL_HM WZ_Stehlampe_Sw deviceMsg: 45 (to HM)
2014-05-03 23:45:29.697 CUL_HM WZ_Stehlampe_Sw 45
2014-05-03 23:45:29.697 CUL_HM WZ_Stehlampe_Sw timedOn: off
2014-05-03 23:45:29.697 CUL_HM WZ_Stehlampe_Sw dim: stop:45
2014-05-03 23:45:29.697 CUL_HM WZ_Stehlampe_Sw overload: off
2014-05-03 23:45:29.697 CUL_HM WZ_Stehlampe_Sw overheat: off
2014-05-03 23:45:29.697 CUL_HM WZ_Stehlampe_Sw reduced: off

Es ist ja im Prinzip auch korrekt, dass der Slider sich so verhält, da der Dimmer ja auch direkt über den Unterputz-Schalter bedient werden kann. Dann möchte man ja, das der Slider sich auf den veränderten Dimm-Wert anpasst.
Eine mögliche Lösung wäre meiner Ansicht nach, dass eine bestimmt Zeit (z.B. 10s) nachdem der Slider verstellt und losgelassen wurde, keine Aktualisierung auf ankommende pct Werte erfolgt.

Gibt es das schon irgendwie einzustellen oder hat jemand eine andere Idee das Problem zu lösen ?

Ich habe bereits versucht mit
attr WZ_Stehlampe_Sw event-min-interval pct:10
den Effekt zu verhindern. Aber der Dimmer sendet trotzdem nach Empfang eines set_XX den aktuellen Status als pct XX

martinp876

das Problem ist der IST und SOLL Wert, der a) kurze Zeit nicht übereinstimmt und b) nicht unterscheiden wird.
ausserdem wird der IST-Wert nicht kontinuierlich angezeigt, sondern immer wenn das Device dies preis gibt, oder du den Status Requestest.
Das Verhalten in FHEM halte ich für Korrekt, es wird der" letzte gesicherte IST-wert" angezeigt. Beachte, dass die kurze dimm-zeit durchaus 85825945.6sec betragen kann. FHEM fragt in solchen Fällen per default regelmässig den Status ab (so du es nicht abschaltest)
Da der Slider (FHEM allgemein) regelt vom IST-wert, nicht vom Soll-wert.
Die Implementierung sollte also für die Allgemeinheit korrekt sein.

Dann kannst du die Rampenzeit auf 0 setzen. Der Dimmer schaltet dann - und liefert keinen Zwischenwert mehr. hm - beim Slider ist das kompliziert, da hier keine übrigen Parameter nicht eingegeben werden können.
Man könnte eine default-ramptime evtl einstellbar machen.

Wenn du nur stabile Stände anzeigen willst, kannst du das Reading "dim" nutzen. Nur wenn dort "stop" steht, ist dimmen beendet.

Ist etwas zum Basteln. Du musst den Sollwert zwischenspeichern und pct entsprechend setzen.
Gruss Martin

uli2

Hallo Martin,

danke für die Hinweise,
den Tipp mit dem dim:stop reading habe ich mal aufgegriffen.

Es ist aber tatsächlich eine ziemliche Bastellösung.
Ich musste dazu einen dummy slider, zwei notifys und nochmal eine zusätzliche dumm Variable benutzen. Ich bin mir sicher dass das ganze auch irgendwie einfacher geht.
Die Lösung unten funktioniert jeden falls, das unschöne "springen" des Slider ist damit weg


define WZ_Stehlampe_Sw CUL_HM XXXXXXXX
attr WZ_Stehlampe_Sw expert 1
attr WZ_Stehlampe_Sw group Licht1
attr WZ_Stehlampe_Sw icon light_floor_lamp
attr WZ_Stehlampe_Sw model HM-LC-Dim1TPBU-FM
attr WZ_Stehlampe_Sw peerIDs 00000000,
attr WZ_Stehlampe_Sw subType dimmer

define Stehlampe_Slider dummy
attr Stehlampe_Slider alias Stehlampe
attr Stehlampe_Slider devStateIcon 0:light_light_dim_00 \d:light_light_dim_10@yellow 1\d:light_light_dim_20@yellow 2\d:light_light_dim_30@yellow 3\d:light_light_dim_40@yellow 4\d:light_light_dim_50@yellow 5\d:light_light_dim_60@yellow 6\d:light_light_dim_70@yellow 7\d:light_light_dim_80@yellow 8\d:light_light_dim_90@yellow 9\d:light_light_dim_100@yellow 100:light_light_dim_100@yellow
attr Stehlampe_Slider group Licht1
attr Stehlampe_Slider icon light_floor_lamp
attr Stehlampe_Slider room Home,Favourites
attr Stehlampe_Slider setList state:slider,0,5,100
attr Stehlampe_Slider webCmd state

define WZ_Stehlampe_Sw_event dummy

define n_Stehlampe_Slider1 notify Stehlampe_Slider {\
if (Value("WZ_Stehlampe_Sw_event") eq "false") {fhem("set WZ_Stehlampe_Sw %EVENT")}\
else {fhem("set WZ_Stehlampe_Sw_event false")}\
}

define n_Stehlampe_Slider2 notify WZ_Stehlampe_Sw:dim.*stop.* {\
my $val = substr("%EVTPART1",5,length("%EVTPART1"));;\
if ($val eq "off") {$val = 0};;\
if ($val eq "on") {$val = 100};;\
fhem("set WZ_Stehlampe_Sw_event true");;\
fhem("set Stehlampe_Slider $val")}


Gibt es eine Möglichkeit, den slider des Dimmers direkt mit einem aufbereiteten dim Reading zu steuern, statt mit dem pct Reading ?
Aufbereitet deshalb, weil man ja noch den Zahlenwert aus dem dim:stop XXX extrahieren muss und ausserdem noch das "off" und "on" in Zahlenwert für den slider umwandeln muss.

Gruss
Uli

martinp876

Hallo Uli,

das ist so nicht vorgesehen. Die Zentrale kombiniert das Kommando mit dem Reading. Das Kommando "pct" sucht das Reaging "pct" um den Slider zu realisieren. Das ist fhem-allgemein.
Gruss Martin