[gelöst] AES-Key übertragen; war: Statusanzeige initialisieren (HM-OU-LED16)

Begonnen von SolRad, 15 August 2015, 15:26:07

Vorheriges Thema - Nächstes Thema

SolRad

Hallo *,

ich möchte meine Statusanzeige HM-OU-LED16 initialisieren können. So kann ich mir auch besser merken, was ich einstellen müsste, wenn ich eine neue bekäme.

Leider reagiert die Anzeige nicht so, wie ich es erwarte. Ich würde mich freuen, wenn einer von euch mir erklären würde, woran das liegt.


     
  • Was soll bei der Initialisierung passieren?
       

           
    • Register löschen
    • Status wieder einlesen
    • AES-Key empfangen
    • AES-Signierung einschalten
    • alle LEDs ansschalten
    • LEDs ganz hell schalten
     
  • Wie sieht der Code aus?
define HS_EG_FL_Statusanzeige_Geraet CUL_HM XXXXXX
[...]
define HS_EG_FL_Statusanzeige_Led_01 CUL_HM XXXXXX01
[...]
define Notify_HS_EG_FL_Statusanzeige_Geraet_Initialisierung notify Notify_HS_EG_FL_Statusanzeige_Geraet_Initialisierung {\
  my $Statusanzeige_Geraet       = "HS_EG_FL_Statusanzeige_Geraet";;\
  my $Statusanzeige_Helligkeit   = "HS_EG_FL_Statusanzeige_AbsoluteHelligkeit";;\
  my $Statusanzeige_Kanal_Prefix = "HS_EG_FL_Statusanzeige_Led_";;\
  \
  Log 3, "(TR) Info: Gerät $Statusanzeige_Geraet: Register löschen.";;\
  fhem "set $Statusanzeige_Geraet clear all";;\
  \
  Log 3, "(TR) Info: Gerät $Statusanzeige_Geraet: Status wieder einlesen.";;\
  fhem "set $Statusanzeige_Geraet getConfig";;\
  \
  Log 3, "(TR) Info: Gerät $Statusanzeige_Geraet: AES-Key empfangen.";;\
  fhem "set $Statusanzeige_Geraet assignHmKey";;\
  \
  my $Kanalname           = "";;\
  my $Statusanzeige_Kanal = "";;\
  for (my $Kanalnummer = 1;; $Kanalnummer <= 16;; $Kanalnummer++) {\
    $Kanalname           = sprintf ("%%02d", $Kanalnummer);;\
    $Statusanzeige_Kanal = $Statusanzeige_Kanal_Prefix.$Kanalname;;\
    \
    Log 3, "(TR) Info: Kanal $Statusanzeige_Kanal: Register löschen.";;\
    fhem "set $Statusanzeige_Kanal clear all";;\
    \
    Log 3, "(TR) Info: Kanal $Statusanzeige_Kanal: Status wieder einlesen.";;\
    fhem "set $Statusanzeige_Kanal getConfig";;\
    \
    Log 3, "(TR) Info: Kanal $Statusanzeige_Kanal: AES-Signierung einschalten.";;\
    fhem "set $Statusanzeige_Kanal sign on";;\
  }\
  \
  Log 3, "(TR) Info: Gerät $Statusanzeige_Geraet: alle LEDs ansschalten.";;\
  fhem "set $Statusanzeige_Geraet led FFFFFFFF";;\
  \
  Log 3, "(TR) Info: Gerät $Statusanzeige_Geraet: LEDs ganz hell schalten.";;\
  fhem "set $Statusanzeige_Helligkeit 15";;\
}
attr Notify_HS_EG_FL_Statusanzeige_Geraet_Initialisierung room hidden
  • (Die Schaltung der Farben und Helligkeit funktioniert.)

     
  • Wie reagiert das Gerät?
2015.08.15 14:03:24.184 3: (TR) Info: Gerät HS_EG_FL_Statusanzeige_Geraet: Register löschen.
2015.08.15 14:03:24.187 3: CUL_HM set HS_EG_FL_Statusanzeige_Geraet clear all
2015.08.15 14:03:24.187 3: (TR) Info: Gerät HS_EG_FL_Statusanzeige_Geraet: Status wieder einlesen.
2015.08.15 14:03:24.193 3: CUL_HM set HS_EG_FL_Statusanzeige_Geraet getConfig
2015.08.15 14:03:24.194 3: (TR) Info: Gerät HS_EG_FL_Statusanzeige_Geraet: AES-Key empfangen.
2015.08.15 14:03:24.194 3: CUL_HM set HS_EG_FL_Statusanzeige_Geraet assignHmKey
2015.08.15 14:03:24.194 3: (TR) Info: Kanal HS_EG_FL_Statusanzeige_Led_01: Register löschen.
2015.08.15 14:03:24.194 3: CUL_HM set HS_EG_FL_Statusanzeige_Led_01 clear all
2015.08.15 14:03:24.194 3: (TR) Info: Kanal HS_EG_FL_Statusanzeige_Led_01: Status wieder einlesen.
2015.08.15 14:03:24.195 3: CUL_HM set HS_EG_FL_Statusanzeige_Led_01 getConfig
2015.08.15 14:03:24.195 3: (TR) Info: Kanal HS_EG_FL_Statusanzeige_Led_01: AES-Signierung einschalten.
2015.08.15 14:03:24.195 3: set HS_EG_FL_Statusanzeige_Led_01 sign on : cannot calculate value. Please issue set HS_EG_FL_Statusanzeige_Led_01 getConfig first - invalid
[...]
2015.08.15 14:03:24.208 3: (TR) Info: Kanal HS_EG_FL_Statusanzeige_Led_16: Register löschen.
2015.08.15 14:03:24.208 3: CUL_HM set HS_EG_FL_Statusanzeige_Led_16 clear all
2015.08.15 14:03:24.209 3: (TR) Info: Kanal HS_EG_FL_Statusanzeige_Led_16: Status wieder einlesen.
2015.08.15 14:03:24.209 3: CUL_HM set HS_EG_FL_Statusanzeige_Led_16 getConfig
2015.08.15 14:03:24.209 3: (TR) Info: Kanal HS_EG_FL_Statusanzeige_Led_16: AES-Signierung einschalten.
2015.08.15 14:03:24.209 3: set HS_EG_FL_Statusanzeige_Led_16 sign on : cannot calculate value. Please issue set HS_EG_FL_Statusanzeige_Led_16 getConfig first - invalid
2015.08.15 14:03:24.209 3: (TR) Info: Gerät HS_EG_FL_Statusanzeige_Geraet: alle LEDs ansschalten.
2015.08.15 14:03:24.210 3: CUL_HM set HS_EG_FL_Statusanzeige_Geraet led FFFFFFFF
2015.08.15 14:03:24.210 3: (TR) Info: Gerät HS_EG_FL_Statusanzeige_Geraet: LEDs ganz hell schalten.
2015.08.15 14:03:24.211 3: CUL_HM set HS_EG_FL_Statusanzeige_Geraet ilum 15 0
  • (Die Fehlermeldung ist "set HS_EG_FL_Statusanzeige_Led_YY sign on : cannot calculate value. Please issue set HS_EG_FL_Statusanzeige_Led_YY getConfig first - invalid".)

  • Meine Verwirrung
    Ich bin sicher, dass vor dem fehlerhaften "set $Statusanzeige_Kanal sign on" ein "set $Statusanzeige_Kanal getConfig" im Code steht.
    In einem anderen Versuch, habe ich 10 Sekunden Zeit zwischen den beiden Befehlen gelassen. Leider ohne Erfolg...



BTW: Macht mein Ansatz, eine Initialisierungsroutine für die Statusanzeige vorrätig zu haben, überhaupt Sinn?


MfG
SolRad

SolRad

#1
Ich kann mir selbst antworten:  :D

Einige der Befehle werden nicht von alleine ausgeführt, sondern erfordern das Drücken des Anlernknopfes!

Ich glaube, es sind
  • "set $Statusanzeige_Geraet assignHmKey" und
  • "set $Statusanzeige_Kanal sign on" sowie
  • "set $Statusanzeige_Kanal sign off".
Danach bleiben nämlich weitere Kommandos hängen ("CMDs_processing...").

Es ist durchaus ok, wenn z. B. mehrere Kanäle auf z. B. sign on gesetzt werden und dann abschließend einmal der Anlernknopf gedrückt wird.

Es muss kein vollständiges Pairing durchgeführt werden. FHEM muss nicht mittels "set ZZZ hmPairForSec AA" in den Pair-Modus versetzt werden. Es reicht, die Anlerntaste an der Statusanzeige (>5 Sekunden) zu drücken.

Tipp: Aufpassen, dass eine Funkverbindung besteht.

Was habe ich gelernt?
Es ist gar kein Initialisierungsproblen, sondern eine AES-Besonderheit. Zum Übernehmen des Keys und einer Änderung des Signierungsstatusses muss der Anlernknopf gedrückt werden.
Dieses Vorgehen ist übrigens auch bei anderen Geräten (z. B. pushButton) notwendig.