Probleme beim Parsen eines dim-Kommando Fibaro FGD212

Begonnen von krusi, 31 Januar 2016, 19:39:29

Vorheriges Thema - Nächstes Thema

krusi

Hallo zusammen,

nachdem ich ständig Probleme mit einem Trigger hatte bin ich heute auf die eigentliche Ursache gestoßen:

Wird an einen Fibaro-Dimmer 2 (model: FIBARO System FGD212 Dimmer 2) welcher sich im status "off" befindet ein DIM-Befehl, z.B. "set dim 90"
gesendet Antwortet das System darauf mit einem

2016.01.31 19:11:38 2: ZWave set EG.WZ.DI.1 dim 90
2016.01.31 19:11:38 3: Notify n_Licht_WZ Event: dim 90
2016.01.31 19:11:39 3: Notify n_Licht_WZ Event: UNPARSED: SWITCH_MULTILEVEL 0426016301
2016.01.31 19:11:39 3: Notify n_Licht_WZ Event: UNPARSED: SWITCH_MULTILEVEL 0426016301
2016.01.31 19:11:40 3: Notify n_Licht_WZ Event: dim 99

Sprich: nachdem es Probleme beim Parsen gab wird zwar eingeschaltet, aber auf volle Leuchtstärke
Versucht man hingegen ein "set on" gefolgt von einem "set dim xx" klappt das Ganze:

2016.01.31 19:17:31 2: ZWave set EG.WZ.DI.1 on
2016.01.31 19:17:31 3: Notify n_Licht_WZ Event: on
2016.01.31 19:17:32 3: Notify n_Licht_WZ Event: UNPARSED: SWITCH_MULTILEVEL 0426016301
2016.01.31 19:17:32 3: Notify n_Licht_WZ Event: UNPARSED: SWITCH_MULTILEVEL 0426016301
2016.01.31 19:17:32 3: Notify n_Licht_WZ Event: dim 99
2016.01.31 19:17:33 3: Notify n_Licht_WZ Event: reportedState: dim 99
2016.01.31 19:17:36 3: Notify n_Licht_WZ Event: power: 105.4 W
2016.01.31 19:17:38 3: Notify n_Licht_WZ Event: power: 105.4 W
2016.01.31 19:17:41 2: ZWave set EG.WZ.DI.1 dim 90
2016.01.31 19:17:41 3: Notify n_Licht_WZ Event: dim 90
2016.01.31 19:17:41 3: Notify n_Licht_WZ Event: dim 90
2016.01.31 19:17:41 3: Notify n_Licht_WZ Event: reportedState: dim 90

Klappt zwar aber umständlich und unschön - da auch hier im ersten Durchlauf der Fehler erzeugt wird.

Leider komme ich im Modul 10_ZWave.pm dem Fehler noch nicht ganz auf die Schliche.
Kann es jemand nachvollziehen bzw. hat jemand einen Lösungsvorschlag ?

Zusatzinformationen:

Internals:
[font=courier][font=courier]   DEF             c791f8a9 18
   IODev           ZWDongle_1
   LASTInputDev    ZWDongle_1
   MSGCNT          71
   NAME            EG.WZ.DI.1
   NR              39
   STATE           dim 90
   TYPE            ZWave

   model           FIBARO System FGD212 Dimmer 2
   modelConfig     fibaro/fgd212.xml
   modelId         010f-0102-1000
   reportedState   dim 90
   state           dim 90
   transmit        OK
   version         Lib 3 Prot 4.5 App 3.3 HW 2 FWCounter 1 FW 3.3
   
Attributes
   IODev           ZWDongle_1
   alias           Dimmer_WZ
   classes         ZWAVEPLUS_INFO BASIC VERSION MANUFACTURER_SPECIFIC
                   SWITCH_MULTILEVEL DEVICE_RESET_LOCALLY ASSOCIATION_GRP_INFO
                   ASSOCIATION POWERLEVEL SECURITY FIRMWARE_UPDATE_MD CRC_16_ENCAP
                   CONFIGURATION SENSOR_MULTILEVEL METER MULTI_CHANNEL_ASSOCIATION
                   MULTI_CHANNEL PROTECTION ALARM SWITCH_ALL APPLICATION_STATUS
                   MARK SCENE_ACTIVATION
                   
Fhem info: (letztes Update am 31.01.16)
  Release  : 5.7 FeatureLevel: 5.7
  OS       : MSWin32
  Arch     : MSWin32-x86-multi-thread-64int
  Perl     : v5.22.1
  uniqueID : 2c1c6ed1293ac0394b5e32ce2c34b93f
  upTime   : 06:38:53[/font][/font]

rudolfkoenig

Ich verstehe noch nicht, wieso man hier von einem Fehler in FHEM ausgeht.

krikan

Ich tippe auf eine "fehlerhafte", d.h. eigentlich nicht gewollte, Assoziation. Vermutlich ist der Controller mit Assogroup 3 des Dimmers assoziert. Die sendet set-Switch_Multilevel-Befehle. Assoziationen mal kontrollieren und ggfs. korrigieren.
Gruß, Christian

krusi

Fehler ist relativ:
Wenn ich die 10_ZWave.pm (Line 83) richtig deute ist dieser Fall gar nicht abgebildet und somit wird auch nichts Vernünftiges gesendet.


[font=courier]  SWITCH_MULTILEVEL        => { id => '26',
    set   => { off         => "0100",
               on          => "01FF",
               dim         => "01%02x",
               stop        => "05" },
    get   => { swmStatus   => "02",     },
    parse => { "032603(.*)"=> '($1 eq "00" ? "state:off" :
                               ($1 eq "ff" ? "state:on" :
                                             "state:dim ".hex($1)))',
               "..260420"  => "state:swmBeginUp",
               "..260460"  => "state:swmBeginDown",
               "..2605"    => "state:swmEnd" } },[/font]


Falls ich auf dem Holzweg sagt's ruhig - bin noch FHEM-Neueinsteiger und gerade erst dabei mich in den Code einzuarbeiten  ;)

krusi

#4
Hallo Christian,

Zitat von: krikan am 31 Januar 2016, 19:53:48
Ich tippe auf eine "fehlerhafte", d.h. eigentlich nicht gewollte, Assoziation. Vermutlich ist der Controller mit Assogroup 3 des Dimmers assoziert. Die sendet set-Switch_Multilevel-Befehle. Assoziationen mal kontrollieren und ggfs. korrigieren.
Gruß, Christian

das stimmt: der Controller ist bisher bewusst mit Gruppe 1 UND 3 assoziiert.
Hatte dies so Verstanden, daß der Fibaro für die Erweiterten Funktionen zusätzlich die Gruppe 3 braucht.
Ist das falsch - also nur mit 1 assoziieren ?


assocGroups   5
assocGroup_1  Max 1 Nodes ZWDongle_1
assocGroup_2  Max 5 Nodes
assocGroup_3  Max 5 Nodes ZWDongle_1
assocGroup_4  Max 5 Nodes
assocGroup_5  Max 5 Nodes

krikan

Ja, in diesem Fall falsch.
Fibaro nutzt bei dem ZWavePlus-Dimmer Assogroup 1 für Meldungen an Controller (lifeline). 3 ist für Steuerung anderer Geräte mit SWITCH_MULTILEVEL-Befehlen und verursacht Deine UNPARSED. Also löschen und dann ist UNPARSED vermutlich weg.
Wegen 100% Aufdimmen mal die Konfiguration des Aktors durchsehen.

krusi

Gleich noch ein Update: auch wenn man die Gruppe raus nimmt (set EG.WZ.DI.1 associationDel 3 1) bleibt das Ergebnis gleich:
Es wird ein dim 99 daraus - hätte mich auf Grund des Codes sonst auch gewundert.

krikan

Ist denn UNPARSED weg und Teil 1 gelöst?
Zweites Problem verstehe ich dann vermutlich noch nicht:
Du hattest Dich doch gewundert, dass der Aktor immer auf volle Leuchtstärke geht und dann erst dimmbar ist, oder?

krusi

Das stimmt Christian, die unparsed-Meldung ist nun weg - mir zwar noch nicht klar aber herzlichen Dank für den Tipp.

Zu Teil 2: richtig verstanden - ich wundere mich, dass ein dim 90 Befehl zu dim 99 umgesetzt wird
Was die Konfig des Aktors angeht: configMinimum/MaximumBrightnessLevel ist auf 1 bzw. 99 gesetzt.

Was ich erreichen möchte: aus Zustand "off" direkt auf "dim xx" dimmen und nicht zuerst 100% und dann zum Zielwert.

Hintergrund: in meiner Anwendung wird per Kommando auf 50% bzw. 90% gedimmt - für eine andere Funktion spricht bei 99% bzw. "on" (manuell geschaltet über den Taster-Eingang) ein notify an, deshalb darf dieser Wert nie erreicht werden

krikan

#9
Zitatmir zwar noch nicht klar
Dann neuer Versuch:
Assoziationsgruppe 1 sendet den Zustand an den Controller; d.h. muss gesetzt werden, damit FHEM Statusmeldungen bekommt
Assoziationsgruppe 3 sendet an alle assozierten Geräte den set-Befehl zum dimmen über Class SWITCH_MULTILEVEL. Nimmt man den Controller in die Assioziationsgruppe auf erhält er eben den dim-Befehl, den FHEM aber nicht auswertet (UNPARSED), weil man FHEM nicht dimmen kann.

Dann hatte ich Teil 2 doch korrekt verstanden. FHEM setzt "dim 90" nicht zu "dim 99" um, sondern sendet stur "dim 90". Das Umsetzen auf "dim 99" macht Dein Aktor vermutlich automatisch und sendet das als Statusinfo an Controller/FHEM. Das kann man im verbose 5-Log sicher erkennen. Warum kann ich nicht sagen, da ich den Aktor nicht kenne. Jedoch sollte das über die Konfiguration des Aktors beeinflußbar sein.

Was ich nicht definitiv ausschließen kann: Aktor nutzt eine neue Version der Class SWITCH_MULTILEVEL, setzt Rückwärtskompatibilität nicht korrekt um und zeigt dadurch dieses 99-Aufdimmverhalten.

krusi

Hallo Christian,

vielen Dank für die Erklärung - jetzt wird ein Schuh draus.
Hatte mich dauernd schon gewundert, dass es sich ja eigentlich um empfangene Werte bei dem UNPARSED-Problem handeln muss.
In Verbindung mit dem Thema Association-Groups ist mir nun auch klar, dass der Wert vom Aktor zurückgelesen wurde.

Das Problem mit dem Aufdimmen werde ich mir dann in den nächsten Tagen mal in Ruhe anschauen und auch etwas tiefer in die Kommunikation und den Code einsteigen.

Nochmals Danke für die Einstiegshilfe.