Popp Z-Wave+ Wall Plug Switch Schuko Inklusion Assoziation POPE009006

Begonnen von sun112, 06 September 2015, 11:59:37

Vorheriges Thema - Nächstes Thema

A.Harrenberg

Hallo Michael,

ja, das sieht doch schon mal sehr viel vielversprechender aus.

Im Logfile hätte eigentlich ein Hinweis erscheinen sollen das SECURITY wg. fehlendem/falschem Netzwerkschlüssel nicht aktiv ist... Aber das können wir später klären.

Die ganzen Klassen tauchen jetzt unter secure_classes auf, damit hat sich Krikan's Theorie bestätigt. Das Ding will anscheinend zwingend eine secure-Inklusion und gibt es dann alle Fähigkeiten frei. Wenn es hier wirklich keine Möglichkeit gibt eine nicht-secure-Inklusion durchzuführen, die die Klassen dann offenlegt, wäre das wirklich eine ziemlich dumme Idee vom Hersteller. (Vielleicht mal ein quadruppel-klick?)

Aber jetzt mal zum technischen...

Die secure-Inklusion hat einwandfrei funktioniert und liefert jetzt die "fehlenden" Klassen (Switch_Binary, Meter, ...) zum Schalten:
secure_classes ZWAVEPLUS_INFO BASIC SWITCH_BINARY PROTECTION CONFIGURATION ASSOCIATION MULTI_CHANNEL_ASSOCIATION INDICATOR METER ASSOCIATION_GRP_INFO SWITCH_ALL VERSION MANUFACTURER_SPECIFIC MARK BASIC MULTI_CHANNEL

ZitatAnsonsten steht der Stecker wie bisher auch im Raum ZWave, zeigt aber keine Schaltmöglichkeit an, da steht nur "sendNonce".
Jaaa, Glückwunsch ,-)
Da hast Du eine neue Eigenheit gefunden die ich bisher nicht bedacht habe...

Zur Erklärung: ZWAVE liest beim Inkludieren die Klassen des Gerätes aus und speichert diese im Attribut "classes". Anhand dieser Liste werden die Fähigkeiten des Gerätes erkannt und die Befehlsliste für das Gerät wird entsprechend dieser Fähigkeiten aufgebaut. Befehle für Klassen die in der Liste nicht enthalten sind werden auch gar nicht angeboten/akzeptiert.

Bei der secure-Inklusion lese ich die Klassen aus welche SECURITY unterstützen und speichere diese analog im Attribut "secure_classes". Diese Liste nutze ich in meinem Code um Befehle für diese Klasse "abzufangen" und zu verschlüsseln.

Im Normalfall ist es aber so, dass "secure_classes" eine Untermenge von "classes" ist. D.h. alle Befehle werden angeboten.

In diesem (Sonder-)Fall ist es aber so das hier unter Security MEHR Klassen angeboten werden, die werden zwar schön in "secure_classes" angezeigt, aber NICHT für das Erstellen der Befehlsliste verwendet.
Ich werde demnächst dann mal einen Patch vorbereiten, der diese zusätzlichen Klassen in "classes" ergänzt.

Zum Testen kannst Du auch einfach alle noch nicht vorhandenen Klassen aus secure_classes in classes eintragen.

ZWAVEPLUS_INFO BASIC SWITCH_BINARY PROTECTION CONFIGURATION ASSOCIATION MULTI_CHANNEL_ASSOCIATION INDICATOR METER ASSOCIATION_GRP_INFO SWITCH_ALL FIRMWARE_UPDATE_MD POWERLEVEL DEVICE_RESET_LOCALLY SECURITY VERSION MANUFACTURER_SPECIFIC MARK BASIC MULTI_CHANNEL

Dann müssten Dir eigentlich alle Befehle zur Verfügung stehen. (Nicht wundern das da BASIC und MULTI_CHANNEL zwei mal vorkommen...)
("Save Config" nicht vergessen...)

Probier doch bitte mal aus das in das Attribut "classes" einzutragen. Ich bin mir nicht ganz sicher, aber ich denke das müsste danach sogar ohne Neustart von FHEM erkannt werden.

Gruß,
Andreas.
FB 7360, Homematic und ZWave
Support for ZWave-SECURITY

MichaelO

Ich habe die Classes aus deinem Code kopiert und in das Attribut eingetragen:

List
Internals:
   CFGFN
   DEF        d054ae9f 14
   IODev      ZWave_Stick_UZB
   LASTInputDev ZWave_Stick_UZB
   MSGCNT     4
   NAME       ZWave_SWITCH_BINARY_14
   NR         209
   STATE      secEncap 817475a383678d8970963e2b4c361a2ef22cc83e9bfa
   TYPE       ZWave
   ZWave_Stick_UZB_MSGCNT 4
   ZWave_Stick_UZB_RAWMSG 0004000e1c9881ba791d0ada4c73f5110d6e8c94b98f8e8a824931280a52d63eec
   ZWave_Stick_UZB_TIME 2015-10-17 10:13:12
   homeId     d054ae9f
   isWakeUp
   lastMsgSent 1445076220.59996
   nodeIdHex  0e
   Readings:
     2015-10-17 10:13:03   CMD             ZW_APPLICATION_UPDATE
     2015-10-17 10:13:07   SECURITY        ENABLED
     2015-10-17 10:13:12   model           0x0154 0x0003 0x0001
     2015-10-17 10:13:12   modelId         0154-0003-0001
     2015-10-17 12:03:40   received_nonce  368ca3724b125509
     2015-10-17 10:13:12   send_nonce      82d681865ce55b12
     2015-10-17 12:03:40   state           secEncap 817475a383678d8970963e2b4c361a2ef22cc83e9bfa
     2015-10-17 12:03:40   transmit        OK
   secMsg:
Attributes:
   IODev      ZWave_Stick_UZB
   classes    ZWAVEPLUS_INFO BASIC SWITCH_BINARY PROTECTION CONFIGURATION ASSOCIATION MULTI_CHANNEL_ASSOCIATION INDICATOR METER ASSOCIATION_GRP_INFO SWITCH_ALL FIRMWARE_UPDATE_MD POWERLEVEL DEVICE_RESET_LOCALLY SECURITY VERSION MANUFACTURER_SPECIFIC MARK BASIC MULTI_CHANNEL
   room       ZWave
   secure_classes ZWAVEPLUS_INFO BASIC SWITCH_BINARY PROTECTION CONFIGURATION ASSOCIATION MULTI_CHANNEL_ASSOCIATION INDICATOR METER ASSOCIATION_GRP_INFO SWITCH_ALL VERSION MANUFACTURER_SPECIFIC MARK BASIC MULTI_CHANNEL


Danach zeigt das Gerät über den Internals set und get und diverse Dropdown Möglichkeiten. wähle ich dort on/off, schaltet der Stecker. Im ZWave-Raum selbst steht das allerdings noch "unhübsch" und ohne die bei Schaltern bislang angezeigte Lampe:

ZWave_SWITCH_BINARY_14 secEncap 817475a383678d8970963e2b4c361a2ef22cc83e9bfa on off

Auch zeigt der Eventmonitor nichts an, wenn ich am Gerät manuell schalte. Da scheint es aber zwischen den Ohren zu liegen, da ich die Sache mit den Assoziationen noch nicht wirklich verstanden habe und nicht weiß, was ich da zu tun habe.

A.Harrenberg

Hi Michael,

so langsam wird es doch ,-)

Mir ist aber nicht klar wo das hier:
ZWave_SWITCH_BINARY_14 secEncap 817475a383678d8970963e2b4c361a2ef22cc83e9bfa on off
herkommt...

secEncap ist ein (interner) Befehl um eine verschlüsselte Nachricht zu versenden, on/off hat da nichts zu suchen.
Wo hast Du das denn rauskopiert?

Warum die "Lampe" nicht angezeigt wird kann ich nicht sagen, könnte sein das der Schalter zu allem Überfluss noch eine falsche/unpassende Geräteklasse meldet.

Das Gerät wird mit "get model" auch nicht als bekanntes Gerät erkannt, daher wurde ansheinend auch keine automatische Assoziation durchgeführt.
set <name> associationAdd <associationGroup> <CtrlNodeId>
Ich würde es mal mit
set ZWave_SWITCH_BINARY_14 associationAdd 1 1
probieren.

Gruß,
Andreas.
FB 7360, Homematic und ZWave
Support for ZWave-SECURITY

MichaelO

Zitat von: A.Harrenberg am 17 Oktober 2015, 13:16:22
Mir ist aber nicht klar wo das hier:
ZWave_SWITCH_BINARY_14 secEncap 817475a383678d8970963e2b4c361a2ef22cc83e9bfa on off
herkommt...

secEncap ist ein (interner) Befehl um eine verschlüsselte Nachricht zu versenden, on/off hat da nichts zu suchen.
Wo hast Du das denn rauskopiert?

Da hab ich mich vielleicht ungenau ausgedrückt. Das war keine Zeile aus einem Log! Wenn ich links auf den Raum ZWave gehe, bekomme ich ja rechts alle Geräte angezeigt. Da habe ich zum Einen die Gruppe der FileLogs und dann die Gruppe ZWave mit den Geräten selbst. Da steht dann die Zeile wie im Code eingefügt mit den "Schaltern" on und off am Ende. Wenn ich da drücke, schaltet der Stecker und die kryptische Anzeige ändert sich in eine andere nicht besser lesbare. Normalerweise hat man da aber bei Schaltern die Lampe, welche den Zustand anzeigt.

MichaelO

Zitat von: A.Harrenberg am 17 Oktober 2015, 13:16:22
Warum die "Lampe" nicht angezeigt wird kann ich nicht sagen, könnte sein das der Schalter zu allem Überfluss noch eine falsche/unpassende Geräteklasse meldet.

Ich würde es mal mit
set ZWave_SWITCH_BINARY_14 associationAdd 1 1
probieren.

Gruß,
Andreas.

Das habe ich gemacht, hab aber leider keine Ahnung, was jetzt anders sein müsste. Wenn ich den Schalter manuell schalte, passiert im Eventmonitor das:
2015-10-17 13:30:06 ZWave ZWave_SWITCH_BINARY_14 on
2015-10-17 13:30:06 ZWave ZWave_SWITCH_BINARY_14 reportedState: on
2015-10-17 13:30:06 ZWave ZWave_SWITCH_BINARY_14 sendNonce
2015-10-17 13:30:07 ZWave ZWave_SWITCH_BINARY_14 power: 0 W


Und da wo eben die kryptische Zeile stand, steht jetzt sendNonce. Schalte ich manuell, ändert sich in der Geräteanzeige nichts, schalte ich über die on/off Web-Schalter, blitzt kurz die kryptische Sache auf, dann steht da wieder sendNonce. Sorry, wenn ich mich ungeschickt ausdrücke, aber ich weiß nicht, wie man die Anzeige der Geräte im jeweiligen Raum korrekt bezeichnet. Im PDF "Heimautomatisierung-mit-fhem" ist es auf Seite 16 die Nr.5 bzw. 6, hat aber auch da keinen Namen.

A.Harrenberg

Hi Michael,

ah, jetzt weiss ich wovon Du redest.

Der Status "On" wird schön übertragen, aber anscheinend will der Schalter danach auch die Power übertragen. Die Klasse ist aber verschlüsselt, dazu muss eine NONCE gesendet werden mit der dann die Nachricht vom Gerät verschlüsselt wird. Daher wird jetzt der State "on" durch das Versenden der Nonce mit dem Befehl sendNonce überschrieben.

Ich schau mir das bei Gelegenheit mal an, evtl. kann man solche Änderungen am STATE unterdrücken. Da kann ich aber nichts versprechen, das sind interne Sachen von FHEM, damit kenne ich mich nicht wirklich aus... Habe gerade mal kurz danach gesucht, finde aber auch Anbieb nichts.

Immerhin kannst Du jetzt mit einem Notify auf "on" oder "reportedState: on" reagieren.

Gruß,
Andreas.

FB 7360, Homematic und ZWave
Support for ZWave-SECURITY

krikan

Probiere mal als Notloesung mit dem Attribut stateFormat die Anzeige anzupassen.

A.Harrenberg

Hallo Michael,
Zitat von: MichaelO am 17 Oktober 2015, 12:11:08
Ich habe die Classes aus deinem Code kopiert und in das Attribut eingetragen:
könntest Du bitte mal die NodeInfo von dem Gerät abfragen und das Log dazu posten?

Theoretisch müsste das Gerät jetzt ja die "neuen" Klassen die unter Security dazu gekommen sind auch melden.
Bei Dir müsste der Befehl dazu wahrscheinlich so aussehen:
get ZWave_Stick_UZB nodeInfo 14

Gruß,
Andreas.

FB 7360, Homematic und ZWave
Support for ZWave-SECURITY

MichaelO

Zitat von: A.Harrenberg am 18 Oktober 2015, 12:12:54
Hallo Michael,könntest Du bitte mal die NodeInfo von dem Gerät abfragen und das Log dazu posten?

Moin,
nachdem ich das so eingegeben hatte, erscheint im Log:
2015.10.18 12:42:11 4: ZWDongle get ZWave_Stick_UZB nodeInfo 14
2015.10.18 12:42:11 5: ZWDongle_Write 00 410e
2015.10.18 12:42:11 5: SW: 010400410eb4
2015.10.18 12:42:11 4: ZWDongle_ReadAnswer arg:nodeInfo regexp:^0141
2015.10.18 12:42:11 5: ACK received, removing 010400410eb4 from dongle sendstack
2015.10.18 12:42:11 4: ZWDongle_Read ZWave_Stick_UZB: sending ACK, processing 0141d39c01041001
2015.10.18 12:42:11 5: SW: 06
2015.10.18 12:42:11 4: ZWDongle_ReadAnswer for nodeInfo: 0141d39c01041001


und unter der Kommandozeile in fhem steht
ZWave_Stick_UZB nodeInfo_14 => ROUTING_SLAVE SWITCH_BINARY listening frequentListening:0 beaming:16 routing 40kBaud Vers:4 Security:0

rudolfkoenig

ZitatIch schau mir das bei Gelegenheit mal an, evtl. kann man solche Änderungen am STATE unterdrücken.

Bisher fuehrte jedes set Befehl zum setzen der Status (readingsSingleUpdate ganz unten in ZWave_Cmd). Ich habe jetzt  %zwave_noStateSetCmds eingefuehrt, und mit allen SECURITY set Befehlen gefuellt.

MichaelO

Zitat von: rudolfkoenig am 18 Oktober 2015, 12:53:20
Bisher fuehrte jedes set Befehl zum setzen der Status (readingsSingleUpdate ganz unten in ZWave_Cmd). Ich habe jetzt  %zwave_noStateSetCmds eingefuehrt, und mit allen SECURITY set Befehlen gefuellt.

Das heißt für mich was? Sorry... so tief stecke ich noch nicht in fhem, um damit was anfangen zu können. Meinst Du, ich soll ein update machen und danach ist die kryptische Zeile im STATE verschwunden?

A.Harrenberg

Hi Michael,
Zitat von: MichaelO am 18 Oktober 2015, 12:57:49
Das heißt für mich was? Sorry... so tief stecke ich noch nicht in fhem, um damit was anfangen zu können. Meinst Du, ich soll ein update machen und danach ist die kryptische Zeile im STATE verschwunden?
ja, das wäre das Ziel der Änderung ;-)
Wenn Rudi die Änderung noch heute eincheckt ist die allerdings erst morgen früh als Update verfügbar.

Der Status "on" wird ja aus dem "set ... on" gesetzt. Wegen Security kommt es danach noch mal zu einem "set ... secEncap ...." Befehl, der Dir dann Deinen "on"-Status überschreibt. Wenn ich Rudi richtig verstehe werden jetzt alle Security Befehle (also z.B. der secEncap) NICHT mehr als Statusupdate behandelt, d.h. der Status "on" sollte danach erhalten bleiben, solange bis Du wieder einen anderen set-Befehl auslöst.

@Rudi: Danke, wollte gerade anfangen die Zeile mal auszukommentieren um zu sehen ob das ausreicht.

Gruß,
Andreas.
FB 7360, Homematic und ZWave
Support for ZWave-SECURITY

A.Harrenberg

Hallo Rudi,

hab' mir die Änderung mal per SVN geholt und ausprobiert, funktioniert leider nicht wie gewünscht, ganz so einfach ist es dann leider doch nicht ,-(

Zum einen müsste man $cmd noch zerlegen damit die Parameter wegfallen, ich habe das mal so gemacht (geht sicherlich eleganter):
  readingsSingleUpdate($hash, "state", $cmd, 1)
        if($type eq "set" && !$zwave_noStateSetCmds{( split / /, $cmd, 2 )[0]});


Danach zeigt sich aber leider immer noch nicht das gewünschte Verhalten... Durch das "Abfangen" der zu verschlüsselnden Nachricht wird der untere Teil des Code gar nicht mehr erreicht, hier springe ich etwas weiter oben mit einem "return ZWave_Get($hash, $name, "secNonce");" bereits aus ZWave_cmd raus...
    #check message here for needed encryption (SECURITY)
    if (ZWave_isSecureClass($hash, $cc_cmd)) {
      my $interceptedMSG = $cc_cmd . $payload;
      # message stored in reading, will be processed when nonce arrives
      ZWave_putSecMsg($hash, $interceptedMSG);
      return ZWave_Get($hash, $name, "secNonce");
    }

Hierzu fehlt mir jetzt ein direkter Lösungsansatz. Eine Notlösung wäre es den Status bereits vor dem rausspringen und eigentlichen Abarbeiten des Befehls zu setzen, das ist aber reichlich unschön, vor allem bei WU-Geräten, da würde der State dann was anzeigen was evtl. erst Stunden später (oder im Fehlerfall gar nicht) eintritt.

Bei WakeUp-Geräten bei denen der Befehl auf dem WU-Stack landet passiert ja eigentlich was ähnliches, der State wird dort auch nicht gesetzt/aktualisiert.

Ohne jetzt zu wissen wie man das realiseren kann, würde mir nur einfallen das man beim Abfangen der Nachricht den dazugehörigen FHEM-Befehl zusätzlich zum Befehlscode ablegt und bei Absetzen der verschlüsselten Nachricht (die den Befehl dann enthält), diesen Status mit dem gespeicherten FHEM-Befehl erzeugt.

Das dürfte in einer größeren Anpassung/Änderung am Code enden... Ich denke aber das einiges davon für die Implementierung der Ablaufsteuerung sowieso nötig wäre.

Gruß,
Anreas.
FB 7360, Homematic und ZWave
Support for ZWave-SECURITY

A.Harrenberg

Hallo Rudi,

ich habe doch noch eine Stelle gefunden an der man das gut einbauen kann...
Ich setze den Status jetzt "manuel" nachdem der verschlüselte Befehl per ZWave_Set / secEncap versendet wurde.

Eine Patchdatei ist angehängt, die basiert schon auf Deinem Update 9515.

Gruß,
Andreas.
FB 7360, Homematic und ZWave
Support for ZWave-SECURITY

MichaelO

Vielleicht zur Rückinfo: Ich habe ein Update gemacht und danach Fhem neu gestartet. Wenn ich jetzt schalte, dann kommt noch kurz diese kryptische und elend lange Zeile und dann zeigt das Gerät das Lämpchen an oder aus an, so wie jeder andere Schalter bisher auch.

Wenn es nicht zu viel verlangt ist, bekommt ihr diese kryptische Anzeige noch irgendwie weg (oder kann ich das selbst wie beeinflussen)?

Danke schonmal für die viele Mühe
Michael