Schalter Invertieren seit ein paar Tagen kaputt

Begonnen von rtv, 08 Januar 2013, 22:35:41

Vorheriges Thema - Nächstes Thema

rtv

Hallo!

Seit drei Tagen versuche ich schon heraus zu finden, ob es eine Feature-Änderung gab oder ob ich einen HomeMatic Schalter (HM-LC-Sw1PBU-FM) nicht mehr umkehren kann.

Bis ca. SVN-Stand Heiligabend hatte ich folgende Lösung erfolgreich im Einsatz:
attr <MeinVerdrehtEingebauterSchalter> eventMap off:Aus on:An off:on on:off

Damit wurden on/off umgedreht und passend übersetzt. Auch die Icons stimmten und in Skripten musste ich keine Rücksicht nehmen, wenn ich z.B. alle Lampen gleichzeitig ausgeschaltet habe.

Vor einigen Tagen hab ich FHEM wieder aktualisiert und nicht gleich gemerkt, dass die ganze Nacht das Licht brannte.
Offensichtlich wurde wohl in der Zwischenzeit am devStateIcon geschraubt.
Leider ist dieses aber auch ohne Invertierung defekt: Wenn ein Icon existiert (z.B. für off) dann wird dieses bevorzugt genommen, selbst wenn devStateIcon auf off:An on:Aus gesetzt ist (und diese Grafiken existieren).

Also eigentlich zwei Bugs:
- mit devStateIcon bekomme ich nicht das invertierte Icon angezeigt (auch wenn dann immer noch in allen Skripten, etc die Richtung falsch wäre).
- die eigentliche Umkehrung ist kaputt gegangen. Gibt's vielleicht [Rolladen-]Nutzer, die ähnliche Probleme haben?

Ideal wäre natürlich, man könnte jedes Device auf niedrigerem Level per Attribut invertieren. Dann müsste nicht jedes Frontend eigene Workarounds implementieren...

Grüße, Ralf

jhohn

Ich habe ein ähnliches Problem mit devStateIcon.
das unter devStateIcon definierte Icon wird immer erst nach einem reload der Seite angezeigt, nach einem Klick auf das Icon wird das zugörige "normale" Icon angezeigt.
Ich habe bei mir Icons für die Schaltaktoren der Nachtspeicherofen-Gebläse über devStateIcon geändert. Wenn die Heizung z.B. eingeschaltet ist und ich sie über einen Klick auf das Icon ausschalte zeigt mir die Weboberfläche die ausgeschaltete Lampe. Wenn ich dann F5 drücke sehe ich die ausgeschaltete Heizung.
FHEM auf Synology Diskstation DS413j (DSM4.3), HM LAN Adapter
Steuerung für Nachtspeicheröfen:
Ladung:   HM-WDS10-TH-O, HM-LC-Sw4-DR, Weather-Modul
Gebläse: HM-CC-TC, HM-LC-SW1-FM, HM-Sec-RHS
FHEM auf FritzBox 7390 für Telefon Funktionen

rudolfkoenig

>  das unter devStateIcon definierte Icon wird immer erst nach einem reload der Seite angezeigt

Das ist generisch so nicht richtig. Vielleicht geht es um HM: Bei den pessimistischen HM-Modul muss entweder ein reload oder das FHEMWEB longpoll aktiviert sein, das das endgueltige Status erst spaeter eintrifft. Und: Bitte kein Thread-Hijacking.


>  Offensichtlich wurde wohl in der Zwischenzeit am devStateIcon geschraubt.

Das nicht, aber am STATE. Aber auch nach eine Ueberpruefung gerade sehe ich kein Problem: Falls devStateIcon gesetzt ist, dann wird vom STATE abgeleitet das passende Icon gesucht. D.h. wenn weiterhin ein Problem vorliegt, dann brauche ich eine definition sammt allen Attributen und ausgefuehrten Befehlen zum debuggen.


> attr <MeinVerdrehtEingebauterSchalter> eventMap off:Aus on:An off:on on:off

Das ist gefaehrlich, weil eventMap evtl. mehr als einmal ausgewertet wird, und damit STATE zuerst von on nach off und danach wieder zu on gemapped. Ich rate dringend auf dem zusaetzlichen "off:on on:off" zu verzichten. Wenn danach irgendetwas nicht funktioniert, dann muessen wir das anders fixen.


> Ideal wäre natürlich, man könnte jedes Device auf niedrigerem Level per Attribut invertieren.

Dazu gibt es eventMap, und fuer die meisten Geraete zusaetzlich stateFormat, also genug Verdreh-Moeglichkeiten.

rtv

Zitat von: rudolfkoenig schrieb am Mi, 09 Januar 2013 10:43>  
>  Offensichtlich wurde wohl in der Zwischenzeit am devStateIcon geschraubt.

Das nicht, aber am STATE. Aber auch nach eine Ueberpruefung gerade sehe ich kein Problem: Falls devStateIcon gesetzt ist, dann wird vom STATE abgeleitet das passende Icon gesucht. D.h. wenn weiterhin ein Problem vorliegt, dann brauche ich eine definition sammt allen Attributen und ausgefuehrten Befehlen zum debuggen.

Okay, hier ist der betroffene Schalter in "Minimal-Konfiguration":

Internals:
   DEF        197463
   IODev      hmlan1
   LASTIODev  hmlan1
   MSGCNT     23
   NAME       Bad_Spiegelschrank
   NR         110
   STATE      Aus
   TYPE       CUL_HM
   hmlan1_MSGCNT 23
   hmlan1_RAWMSG E197463,0000,318D60EA,FF,FFB1,29A4101974637DDB0C0601C800
   hmlan1_RSSI -79
   hmlan1_TIME 2013-01-09 10:52:19

   Readings:
     2013-01-08 22:22:52   CommandAccepted yes
     2013-01-09 10:52:19   deviceMsg       on (to hmlan1)
     2013-01-09 10:52:19   state           on
   Helper:
     mId        0069
     rxType     1
     Respwait:
Attributes:
   alias      Badlicht
   devInfo    010100
   devStateIcon .*:noIcon
   eventMap   off:An on:Aus
   firmware   2.1
   group      Lampen
   hmClass    receiver
   icon       icoLicht
   invertState true
   model      HM-LC-Sw1PBU-FM
   room       Bad,Alle
   serialNr   JEQ0011111
   subType    switch
   webCmd     An:Aus


Zitat von: rudolfkoenig schrieb am Mi, 09 Januar 2013 10:43>
> attr <MeinVerdrehtEingebauterSchalter> eventMap off:Aus on:An off:on on:off

Das ist gefaehrlich, weil eventMap evtl. mehr als einmal ausgewertet wird, und damit STATE zuerst von on nach off und danach wieder zu on gemapped. Ich rate dringend auf dem zusaetzlichen "off:on on:off" zu verzichten. Wenn danach irgendetwas nicht funktioniert, dann muessen wir das anders fixen.

1. Da EventMap so nicht zum invertieren genutzt werden kann - gibt es eine andere Möglichkeit, wenn der Schalter elektrisch / physikalisch nicht gedreht werden kann? Eine, die es ermöglicht, z.B. alle Geräte gleichzeitig mit "off" anzusprechen?

2. Mit der Definition oben funktioniert es "logisch" im Webinterface richtig: Ich klicke auf "An" und das Licht geht an (der State auf "off"). Sobald ich devStateIcon setze, wird immer das "off" Icon angezeigt solange der state "off" ist. Unabhängig von EventMap und der devStateIcon Definition. Selbst ein "off:FS20.on on:FS20.off" wird nicht respektiert.

Zitat von: rudolfkoenig schrieb am Mi, 09 Januar 2013 10:43>
> Ideal wäre natürlich, man könnte jedes Device auf niedrigerem Level per Attribut invertieren.

Dazu gibt es eventMap, und fuer die meisten Geraete zusaetzlich stateFormat, also genug Verdreh-Moeglichkeiten.
Danke für stateFormat! Jetzt können wir dewpoint und actuator hinzufügen - sehr schön :)

rudolfkoenig

> Da EventMap so nicht zum invertieren genutzt werden kann

Wieso nicht? Man muss sich aber entscheiden, ob man Aus oder off haben will. Fuer die erste Version muessen allen betroffenen Geraete Aus kennen, fuer die zweite reicht ein eventMap beim verdrehten Geraet.


> Sobald ich devStateIcon setze, wird immer das "off" Icon angezeigt solange der state "off" ist.

Kann ich mit einem dummy nicht nachvollziehen:

define d2 dummy
attr d2 webCmd webCmd An:Aus
attr d2 eventMap off:An on:Aus
attr d2 devStateIcon .*:noIcon

-> Status ist An oder Aus (kein Bild), zum Auswahl stehen An und Aus, abgesendet wird aber off bzw. on.

rtv

Zitat von: rudolfkoenig schrieb am Mi, 09 Januar 2013 13:22> Da EventMap so nicht zum invertieren genutzt werden kann

Wieso nicht? Man muss sich aber entscheiden, ob man Aus oder off haben will. Fuer die erste Version muessen allen betroffenen Geraete Aus kennen, fuer die zweite reicht ein eventMap beim verdrehten Geraet.

Ah, okay. Dann würde man in Skripten also alles lokalisieren und immer state eq "Aus" abfragen.
Weiterer Nachteil ist natürlich, dass ein on-for-timer jetzt real ein off-for-timer ist (genau wie off-till).


Zitat von: rudolfkoenig schrieb am Mi, 09 Januar 2013 13:22> Sobald ich devStateIcon setze, wird immer das "off" Icon angezeigt solange der state "off" ist.

Kann ich mit einem dummy nicht nachvollziehen:

define d2 dummy
attr d2 webCmd webCmd An:Aus
attr d2 eventMap off:An on:Aus
attr d2 devStateIcon .*:noIcon

Richtig ^^ diese Minimalkonfiguration "funktioniert" im Sinne, dass ich den realen Status "lesen" kann.
Das beschriebene "devStateIcon off:FS20.on on:FS20.off" geht auch beim Dummy, nicht aber beim HM-Schalter mit der EventMap die bis Weihnachten im Einsatz war.
Jetzt komme ich aber mit "An:FS20.on Aus:FS20.off" zum Ziel, wenn ich mich für die lokalisierte Variante entscheide.


Interessanter Nebeneffekt:
Mit dem einfachen "eventMap off:An on:Aus" ist der obere STATE = Aus, das Reading state = on.
Solange kein devStateIcon gesetzt ist, wird aber das Default-Icon für "on" angezeigt.
Erwarten würde ich immer das Icon passend zum EventMap also "STATE".