Anzeigefehler bei webCmd und eventMAP aus dim72% wird dimdim72%%

Begonnen von Grisu, 18 März 2014, 21:38:36

Vorheriges Thema - Nächstes Thema

Grisu

Hallo zusammen

Folgendes Problem. Der Dimmer akzeptiert on off oder Zahlenwerte zum Dimmen.
Für die Anzeige habe ich ein webCmd und eventMap erstellt um on >100 ; off>0 und dim72%>72 zu mappen, was auch funktioniert.
attr SZ_Licht  eventMap 100:on 72:dim72% 0:off
attr SZ_Licht webCmd on:dim72%:off


bei dim72% wird  State = dimdim72%% gesetzt.
Das Problem ist vor allem im Floorplan. dort wird in der Anzeige des Dimmer  [on dimdim72%%  off] angezeigt was ziemlich unschön ist
hat jemand eine Idee? Bei SF20 konnte ich das Problem nicht feststellen.

Besten Dank
Grisu


2x RPI B+ 1x FritzBox7390 1x USV
1x HM-Lan 1x cul433 1x cul868
9x HM Türkontakt 1x Heizzyklen Überw. 1x Ultraschall Öl Pegel 1x Regens. 15x IT Z.stecker 2x HM Dimmer 6x FS20 Dimmer 1x Stromzähler 1x FS20 to Infrarot 3x HM Rauchmelder 3x Temp 10x Sender
Alarmanlage Aquariumst. Terrariumst.

betateilchen

Homematic und EventMap hat noch nie richtig funktioniert. Nicht nur bei Prozentwerten.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

martinp876

das liegt definitv nicht an homematic. Offensichtlich wird hier 2mal ersetzt

72 => dim72% => dimdim72%%

es liegt einfach daran, dass der Wert 72 im Ausgabestring noch einmal erscheint und es irgendwie noch einen Durchlauf um Mapen gibt. Mit % hat es garnichts zu tun

Ist nur die Frage warum 2mal gemappt wird....

betateilchen

Das Fehlverhalten der eventMap tritt bei mir nachweislich und reproduzierbar NUR bei Homematic Komponenten auf.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

martinp876

Hi betateilchen,
Also.... ich habe es nachgestellt.

1) CUL_HM setze state auf 72.
1.1) readingsEndUpdate
1.1.1) evalStateFormat
1.1.1.1)ReplaceEventMap
          Reading "state"= 72 => dim72%
2) nach dem Parsen erzeugt fhem.pl die trigger events
2.1) DoTrigger
2.1.1)ReplaceEventMap
          Reading "state"= dim72% => dimdim72%%

Ich kannn nicht sagen, was andere Module machen. CUL_HM setzt das Reading und muss hernach (leider manuell) das Triggern der Events veranlassen. Ein anderes Modul könnte dies nur verhindern, wenn es keine Events triggern lässt - oder das Reading state nicht setzt sondern Internal "STATE" direkt. Das Mapping von reading state nach internal STATE ist aber Sache von Rudi, damit habe ich nichts zu tun.

Es gibt noch eine möglichkeit, das doppelte mappen zu verhindern: Wenn man nicht die vereinbarten Methoden zum setzen der Readings benutzt sondern es von Hand macht. Schlechter Programmierstil... schliesslich sind die Methoden direkt dafür zu verfügung gestellt!
Könnte also sein, wenn die Trigger nicht ersetzt werden, dass jemand sich nicht an die Regeln hält!

Hi Grisu,

eventMap hat so seine Tücken, da es sehr viel und pauschal ersetzt. Gemäß commandref werden eventnames und set command werte ersetzt. Zusätzlich auch noch STATE in internals (nicht Dokumentiert!).
Das ist auch genau was passiert:
Licht level: set_dim72%
Licht set_dim72%
Licht level: off.5
Licht pct: off.5
Licht deviceMsg: off.5 (to iohl1)
Licht off.5
Licht dim: up:off.5
Licht phyLevel: dim72%
Licht level: dim72%
Licht pct: dim72%
Licht deviceMsg: dim72% (to iohl1)
Licht dim72%
Licht dim: stop:dim72%


alle Events werden gemäß eventMap konvertiert.
also
0.5 => off.5
0 => off
10.5 => 1off.5
10 => 1off
72 => dim72%
72.5 => dim72%.5

Es passieren also hässliche Sachen. Die Readings sind übrigens nicht betroffen - was du immer im Auge behalten musst!
Wenn du beispielsweise ein notify baust, das "level" auswertet bekommst du ein event
Licht:level: dim72%
und kannst mit %EVTPART1 =dim72%, mit ReadingsVal (..."level",...) aber 72 erhalten.
Hier ist also vorsicht geboten!!

Jetzt einmal praktisch
Besser ist in jedem Fall
attr SZ_Licht eventMap 100$:on 72$:dim72% 0$:off
Damit Bekommst du "nur noch" Probleme beim Setzen und Anzeigen von Werten, die auf '0' enden, also
10, 20, 30,...

Noch besser wäre
attr LichtL  eventMap ^100$:on ^72$:dim72% ^0$:off
aber Rudi unterstützt dies nicht korrekt. Das richtige Parsen der regexp in beiden Richtungen ist auch nicht trivial....

Gruss Martin


Grisu

Das nenne ich Service

Vielen Dank für eure Unterstützung.

Mit dieser Lösung stimmt meine Anzeige einwandfrei
attr SZ_Licht eventMap 100$:on 72$:dim72% 0$:off
2x RPI B+ 1x FritzBox7390 1x USV
1x HM-Lan 1x cul433 1x cul868
9x HM Türkontakt 1x Heizzyklen Überw. 1x Ultraschall Öl Pegel 1x Regens. 15x IT Z.stecker 2x HM Dimmer 6x FS20 Dimmer 1x Stromzähler 1x FS20 to Infrarot 3x HM Rauchmelder 3x Temp 10x Sender
Alarmanlage Aquariumst. Terrariumst.