Patch für EnOcean verschlüsselte (Eltako) Aktoren

Begonnen von nobody42, 22 Februar 2015, 18:26:21

Vorheriges Thema - Nächstes Thema

nobody42

Hallo Entwickler,

ich bin neu im Forum, und auch neu bei FHEM. Ich habe eine Erweiterung gebaut, um die verschlüsselten Eltako Aktoren FSB61 und FSSA
ansteuern zu können (funktioniert einwandfrei), der patch nutzt die vorhandenen VAES und RLC Funktionen.
Mir ist die Codestruktur der perl module noch nicht wirklich klar, daher brauche ich bitte noch Tipps wo und an welcher
Stelle ich z.B. sinnvoll ein neues "secure teach-out" Kommando einbauen würde.
(aktuell mache ich das Secure-Teach-Out noch über die Dolphin-View Software).

(Die Aktoren haben Bestätigungstelegramme aktiviert)

Teach-Out
Telegramm1:
35 25 4B 12 34 k1 k2 k3 k4 k5 FF EB xx x1 00  zusatz daten 01 FF FF FF FF 4A 00

Teach-Out
Telegramm2:
35 40 k6 xx xx xx xx xx xx xx xx xx k16 FF EB xx x1 00 zusatz daten 01 FF FF FF FF 49 00

Start RLC: 1234, key k1....k16, subDef FFEBxxx1


Update:
Da nach meinem Verständnis im Standard aktuell nur der "normale" RPS F6-xx-xx Taster z.B. PTM215
für Verschlüsselung definiert ist, integriere ich das in FHEM als Schalter-Emulation und nicht unter
dem Profil des jeweiligen Aktors. z.B. auch mein FSB61 Rolladenaktor ist in der fhem.cfg
als "switch" definiert. Tut soweit ohne Probleme, nur mit dem speichern der RollingCodes
bei Neustarts/Reboots von FHEM muss man aufpassen, dass diese aktuell sind.
Die Aktoren sind hier auch sehr restriktiv, wenn ein falscher (zu niedriger) RLC kommt, wird
der Sender disabled und man muss einen neuen Secure-Teach Out machen.

fhem.cfg


#FSSA-230V
define EnO_FSSA230V_FFDDxxxx EnOcean FFDDxxxx
attr EnO_FSSA230V_FFDDxxxx userattr room_map structexclude
attr EnO_FSSA230V_FFDDxxxx IODev TCM_ESP3_0
attr EnO_FSSA230V_FFDDxxxx alias Fernsehlicht Arbeitszimmer
attr EnO_FSSA230V_FFDDxxxx dataEnc VAES
attr EnO_FSSA230V_FFDDxxxx eep D2-03-00
attr EnO_FSSA230V_FFDDxxxx eventMap BI:off B0:on
attr EnO_FSSA230V_FFDDxxxx group Licht
attr EnO_FSSA230V_FFDDxxxx key 9Bxxxxxxxxxxxxxxxxxxxxxxxxxxxx36
attr EnO_FSSA230V_FFDDxxxx macAlgo 3
attr EnO_FSSA230V_FFDDxxxx manufID 00D
attr EnO_FSSA230V_FFDDxxxx rlc 1230
attr EnO_FSSA230V_FFDDxxxx rlcAlgo 2,++
attr EnO_FSSA230V_FFDDxxxx rlcTX false
attr EnO_FSSA230V_FFDDxxxx room EnOcean
attr EnO_FSSA230V_FFDDxxxx securemode on
attr EnO_FSSA230V_FFDDxxxx subDef FFExxxx1
attr EnO_FSSA230V_FFDDxxxx subType switch
attr EnO_FSSA230V_FFDDxxxx switchMode pushbutton
attr EnO_FSSA230V_FFDDxxxx webCmd on:off

#FSB61
define EnO_FSB61NP230V_0190xxxx EnOcean 0190xxxx
attr EnO_FSB61NP230V_0190xxxx userattr room_map structexclude
attr EnO_FSB61NP230V_0190xxxx IODev TCM_ESP3_0
attr EnO_FSB61NP230V_0190xxxx alias Rolladen Esszimmer
attr EnO_FSB61NP230V_0190xxxx dataEnc VAES
attr EnO_FSB61NP230V_0190xxxx devStateIcon hoch:shutter_open runter:shutter_closed released:shutter_halfopen .*:audio_repeat
attr EnO_FSB61NP230V_0190xxxx eep D2-03-00
attr EnO_FSB61NP230V_0190xxxx eventMap B0:hoch BI:runter
attr EnO_FSB61NP230V_0190xxxx group Rollaeden
attr EnO_FSB61NP230V_0190xxxx key 47xxxxxxxxxxxxxxxxxxxxxxxxxxxxF5
attr EnO_FSB61NP230V_0190xxxx macAlgo 3
attr EnO_FSB61NP230V_0190xxxx manufID 00D
attr EnO_FSB61NP230V_0190xxxx model FSB61
attr EnO_FSB61NP230V_0190xxxx rlc 4560
attr EnO_FSB61NP230V_0190xxxx rlcAlgo 2,++
attr EnO_FSB61NP230V_0190xxxx rlcTX false
attr EnO_FSB61NP230V_0190xxxx room EnOcean
attr EnO_FSB61NP230V_0190xxxx securemode on
attr EnO_FSB61NP230V_0190xxxx shutTime 25
attr EnO_FSB61NP230V_0190xxxx shutTimeCloses 70
attr EnO_FSB61NP230V_0190xxxx subDef FFExxxx2
attr EnO_FSB61NP230V_0190xxxx subType switch
attr EnO_FSB61NP230V_0190xxxx switchMode pushbutton
attr EnO_FSB61NP230V_0190xxxx webCmd hoch:runter






klaus.schauer

Gute Idee, die Verschlüsselungsfunktionen weiter auszubauen. Ich habe mir den Patch angesehen und finde die Grundideen gut. M. E. sollten die neuen Funktionen aber nicht in die bestehenden Sendeprofile eingearbeitet werden. Da ist universeller Ansatz notwendig.

1. Es gibt inzwischen auch Sendefunktionen für EPP D2-03-00, siehe subType "switch.00".
2. Die Verschlüsselungsfunktion und secure-teach-in sollten in Funktionen gekapselt werden:


sub EnOcean_sec_convertToNonsecure($$$) {
  my ($hash, $rorg, $data) = @_;
  my ($err, $Response);
  # $err = undef, falls Funktion fehlerfrei
  # $response kann log-Texte enthalten
  [Verschüsselungsfunktionen]
  return ($err, $rorg, $data);
}

Das secure-teach-in muss als UTE Telegramm gesendet werden. Da bin ich mir auf die Schnelle nicht klar, wie es in den vorhandenen Routinen integriert werden könnte. Die Grundidee war bisher, auch eine Routine zu erstellen, die "zufällige" key und rlc erzeugt und dann die beiden secure-teach-in-Telegramme über UTE teach-in sendet.

sub EnOcean_sec_createTeachIn($) {
  my ($hash) = @_;
  my ($err, $response;
  # $err = undef, falls Funktion fehlerfrei
  # $response kann log-Texte enthalten
  [secure-teach-in-Funktionen]
  [UTE Aufruf]
  return ($err, $response);
}

Beim secure-teach-in wäre es m. E. ein guter Ansatz, wenn erst einmal diese Grundidee umgesetzt wäre. Falls die beiden Zusatzroutinen grundsätzlich erstellt wären, würde ich mich um eine Integration in das EnOcean-Modul kümmern.

nobody42

Danke - genau solche Hinweise brauche ich, damit ich die richtigen Strukturen nutze,
ich schau es mir nochmal an.

Gruss & Danke

nobody42

Ok ich habe jetzt den ganzen Code von typ "switch" auf typ "switch.00" umgestellt also letztendlich
kein F6 mehr sondern D2. Das Teach in ist auch drin.

Funktioniert auch alles einwandfrei.

Wenn ich aber die Option "switchMode pushbutton" dazumache, dass der switch auch ein release schickt,
dann komme ich in eine "release" schleife.

D.h. es werden irgendwoher dauern releases geschickt und der FHEM loopt, das ist auch völlig unabhängig von der
Verschlüsselung.

Das passiert auch mit dem ORIGINALEN 10_EnOcean.pm !

Falls jemand einen Idee hat, ohne jetzt in den logs zu wühlen wäre ich dankbar - momentan sehe ich den
Wald vor Bäumen nicht mehr...

#FSSA-230V
define EnO_FSSA230V_FFDD4900 EnOcean FFDD4900
attr EnO_FSSA230V_FFDD4900 IODev TCM_ESP3_0
attr EnO_FSSA230V_FFDD4900 alias Fernsehlicht Arbeitszimmer
attr EnO_FSSA230V_FFDD4900 eep D2-03-00
attr EnO_FSSA230V_FFDD4900 eventMap BI:off B0:on
attr EnO_FSSA230V_FFDD4900 group Licht
attr EnO_FSSA230V_FFDD4900 room EnOcean
attr EnO_FSSA230V_FFDD4900 subDef FFExxxx1
attr EnO_FSSA230V_FFDD4900 subType switch.00
attr EnO_FSSA230V_FFDD4900 switchMode pushbutton
attr EnO_FSSA230V_FFDD4900 webCmd on:off


2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RAW: 5500010002650000
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RESPONSE: OK
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RAW: 55
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RAW: 55000707017AD20FFFExxxx10103FFFFFFFF58002C
2015.02.23 21:05:03 4: TCM TCM_ESP3_0 Telegram from FFExxxx1 blocked.
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 EnOcean_Set command: EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 3: EnOcean set EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 sent PacketType: 1 RORG: D2 DATA: 0F SenderID: FFExxxx1 STATUS: 00 ODATA:
2015.02.23 21:05:03 5: HD: 00070001, DATA: D20FFFExxxx100
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 sending ESP3: 550007000111D20FFFExxxx10064
2015.02.23 21:05:03 5: SW: 550007000111D20FFFExxxx10064
2015.02.23 21:05:03 5: Triggering EnO_FSSA230V_FFDD4900 (1 changes)
2015.02.23 21:05:03 5: Notify loop for EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 4: eventTypes: EnOcean EnO_FSSA230V_FFDD4900 released -> released
2015.02.23 21:05:03 4: eventTypes: EnOcean EnO_FSSA230V_FFDD4900 state: released -> state: released
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 EnOcean_Set command: EnO_FSSA230V_FFDD4900 ?
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RAW: 5500010002650000
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RESPONSE: OK
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RAW: 55000707017AD20FFFExxxx10102FFFFFFFF5800F3
2015.02.23 21:05:03 4: TCM TCM_ESP3_0 Telegram from FFExxxx1 blocked.
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 EnOcean_Set command: EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 3: EnOcean set EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 sent PacketType: 1 RORG: D2 DATA: 0F SenderID: FFExxxx1 STATUS: 00 ODATA:
2015.02.23 21:05:03 5: HD: 00070001, DATA: D20FFFExxxx100
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 sending ESP3: 550007000111D20FFFExxxx10064
2015.02.23 21:05:03 5: SW: 550007000111D20FFFExxxx10064
2015.02.23 21:05:03 5: Triggering EnO_FSSA230V_FFDD4900 (1 changes)
2015.02.23 21:05:03 5: Notify loop for EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 4: eventTypes: EnOcean EnO_FSSA230V_FFDD4900 released -> released
2015.02.23 21:05:03 4: eventTypes: EnOcean EnO_FSSA230V_FFDD4900 state: released -> state: released
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 EnOcean_Set command: EnO_FSSA230V_FFDD4900 ?
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RAW: 5500010002650000
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RESPONSE: OK
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RAW: 55
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RAW: 55000707017AD20FFFExxxx10103FFFFFFFF58002C
2015.02.23 21:05:03 4: TCM TCM_ESP3_0 Telegram from FFExxxx1 blocked.
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 EnOcean_Set command: EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 3: EnOcean set EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 sent PacketType: 1 RORG: D2 DATA: 0F SenderID: FFExxxx1 STATUS: 00 ODATA:
2015.02.23 21:05:03 5: HD: 00070001, DATA: D20FFFExxxx100
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 sending ESP3: 550007000111D20FFFExxxx10064
2015.02.23 21:05:03 5: SW: 550007000111D20FFFExxxx10064
2015.02.23 21:05:03 5: Triggering EnO_FSSA230V_FFDD4900 (1 changes)
2015.02.23 21:05:03 5: Notify loop for EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 4: eventTypes: EnOcean EnO_FSSA230V_FFDD4900 released -> released
2015.02.23 21:05:03 4: eventTypes: EnOcean EnO_FSSA230V_FFDD4900 state: released -> state: released
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 EnOcean_Set command: EnO_FSSA230V_FFDD4900 ?
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RAW: 5500010002650000
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RESPONSE: OK
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RAW: 55000707017AD20FFFExxxx10104FFFFFFFF58
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RAW: 55000707017AD20FFFExxxx10104FFFFFFFF58003F
2015.02.23 21:05:03 4: TCM TCM_ESP3_0 Telegram from FFExxxx1 blocked.
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 EnOcean_Set command: EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 3: EnOcean set EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 sent PacketType: 1 RORG: D2 DATA: 0F SenderID: FFExxxx1 STATUS: 00 ODATA:
2015.02.23 21:05:03 5: HD: 00070001, DATA: D20FFFExxxx100
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 sending ESP3: 550007000111D20FFFExxxx10064
2015.02.23 21:05:03 5: SW: 550007000111D20FFFExxxx10064
2015.02.23 21:05:03 5: Triggering EnO_FSSA230V_FFDD4900 (1 changes)
2015.02.23 21:05:03 5: Notify loop for EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 4: eventTypes: EnOcean EnO_FSSA230V_FFDD4900 released -> released
2015.02.23 21:05:03 4: eventTypes: EnOcean EnO_FSSA230V_FFDD4900 state: released -> state: released
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 EnOcean_Set command: EnO_FSSA230V_FFDD4900 ?
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RAW: 5500010002650000
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RESPONSE: OK
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 RAW: 55000707017AD20FFFExxxx10102FFFFFFFF5800F3
2015.02.23 21:05:03 4: TCM TCM_ESP3_0 Telegram from FFExxxx1 blocked.
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 EnOcean_Set command: EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 3: EnOcean set EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 sent PacketType: 1 RORG: D2 DATA: 0F SenderID: FFExxxx1 STATUS: 00 ODATA:
2015.02.23 21:05:03 5: HD: 00070001, DATA: D20FFFExxxx100
2015.02.23 21:05:03 5: TCM TCM_ESP3_0 sending ESP3: 550007000111D20FFFExxxx10064
2015.02.23 21:05:03 5: SW: 550007000111D20FFFExxxx10064
2015.02.23 21:05:03 5: Triggering EnO_FSSA230V_FFDD4900 (1 changes)
2015.02.23 21:05:03 5: Notify loop for EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:03 4: eventTypes: EnOcean EnO_FSSA230V_FFDD4900 released -> released
2015.02.23 21:05:03 4: eventTypes: EnOcean EnO_FSSA230V_FFDD4900 state: released -> state: released
2015.02.23 21:05:03 5: EnOcean EnO_FSSA230V_FFDD4900 EnOcean_Set command: EnO_FSSA230V_FFDD4900 ?
2015.02.23 21:05:04 5: TCM TCM_ESP3_0 RAW: 5500010002650000
2015.02.23 21:05:04 5: TCM TCM_ESP3_0 RESPONSE: OK
2015.02.23 21:05:04 5: TCM TCM_ESP3_0 RAW: 55000707017AD20FFFExxxx10103FFFFFFFF58002C
2015.02.23 21:05:04 4: TCM TCM_ESP3_0 Telegram from FFExxxx1 blocked.
2015.02.23 21:05:04 5: EnOcean EnO_FSSA230V_FFDD4900 EnOcean_Set command: EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:04 3: EnOcean set EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:04 5: EnOcean EnO_FSSA230V_FFDD4900 sent PacketType: 1 RORG: D2 DATA: 0F SenderID: FFExxxx1 STATUS: 00 ODATA:
2015.02.23 21:05:04 5: HD: 00070001, DATA: D20FFFExxxx100
2015.02.23 21:05:04 5: TCM TCM_ESP3_0 sending ESP3: 550007000111D20FFFExxxx10064
2015.02.23 21:05:04 5: SW: 550007000111D20FFFExxxx10064
2015.02.23 21:05:04 5: Triggering EnO_FSSA230V_FFDD4900 (1 changes)
2015.02.23 21:05:04 5: Notify loop for EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:04 4: eventTypes: EnOcean EnO_FSSA230V_FFDD4900 released -> released
2015.02.23 21:05:04 4: eventTypes: EnOcean EnO_FSSA230V_FFDD4900 state: released -> state: released
2015.02.23 21:05:04 5: EnOcean EnO_FSSA230V_FFDD4900 EnOcean_Set command: EnO_FSSA230V_FFDD4900 ?
2015.02.23 21:05:04 5: TCM TCM_ESP3_0 RAW: 5500010002650000
2015.02.23 21:05:04 5: TCM TCM_ESP3_0 RESPONSE: OK
2015.02.23 21:05:04 5: TCM TCM_ESP3_0 RAW: 55000707017AD20FFFExxxx10102FFFFFFFF5800F3
2015.02.23 21:05:04 4: TCM TCM_ESP3_0 Telegram from FFExxxx1 blocked.
2015.02.23 21:05:04 5: EnOcean EnO_FSSA230V_FFDD4900 EnOcean_Set command: EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:04 3: EnOcean set EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:04 5: EnOcean EnO_FSSA230V_FFDD4900 sent PacketType: 1 RORG: D2 DATA: 0F SenderID: FFExxxx1 STATUS: 00 ODATA:
2015.02.23 21:05:04 5: HD: 00070001, DATA: D20FFFExxxx100
2015.02.23 21:05:04 5: TCM TCM_ESP3_0 sending ESP3: 550007000111D20FFFExxxx10064
2015.02.23 21:05:04 5: SW: 550007000111D20FFFExxxx10064
2015.02.23 21:05:04 5: Triggering EnO_FSSA230V_FFDD4900 (1 changes)
2015.02.23 21:05:04 5: Notify loop for EnO_FSSA230V_FFDD4900 released
2015.02.23 21:05:04 4: eventTypes: EnOcean EnO_FSSA230V_FFDD4900 released -> released
2015.02.23 21:05:04 4: eventTypes: EnOcean EnO_FSSA230V_FFDD4900 state: released -> state: released
2015.02.23 21:05:04 5: EnOcean EnO_FSSA230V_FFDD4900 EnOcean_Set command: EnO_FSSA230V_FFDD4900 ?
2015.02.23 21:05:04 5: TCM TCM_ESP3_0 RAW: 5500010002650000
2015.02.23 21:05:04 5: TCM TCM_ESP3_0 RESPONSE: OK
2015.02.23 21:05:04 5: Triggering global (1 changes)
2015.02.23 21:05:04 5: Notify loop for global SHUTDOWN
2015.02.23 21:05:04 0: Server shutdown



nobody42

Hallo Hr. Schauer,

da die aktuelle EnOcean_SndRadio Funktion für Typ 1 Pakete keine
Übergabeparameter hat um "optional data" zu verschicken
und diese "optional data für die SecureSend gebraucht werden,
habe ich die Verschlüsselung sozusagen als "Hook" in die
vorhandene EnOcean_SndRadio eingebaut da an dieser Stelle
in letzter Instanz jedes Paket vorbei muss, welches auf
die Luftschnittstelle soll.

Da es noch das "release" Problem im switch.00/D2 mode gibt
habe ich parallel meine funktionierende switch/F6
Routine auch noch drin gelassen.

Secure Teach Out geht momentan nur im switch.00/D2 mode
mit dem Befehl "set EnO_FSSA230V_FFDD4900 secureteachOut"

Die Parameter müssen vorher alle in der fhem.cfg
definiert werden.

z.B. switch.00



#FSSA-230V
define EnO_FSSA230V_FFDD4900 EnOcean FFDD4900
attr EnO_FSSA230V_FFDD4900 userattr room_map structexclude
attr EnO_FSSA230V_FFDD4900 IODev TCM_ESP3_0
attr EnO_FSSA230V_FFDD4900 alias Fernsehlicht Arbeitszimmer
attr EnO_FSSA230V_FFDD4900 dataEnc VAES
attr EnO_FSSA230V_FFDD4900 eep D2-03-00
attr EnO_FSSA230V_FFDD4900 eventMap BI:off B0:on
attr EnO_FSSA230V_FFDD4900 group Licht
attr EnO_FSSA230V_FFDD4900 key 9Bxxxxxxxxxxxxxxxxxxxxxxxxxxxx36
attr EnO_FSSA230V_FFDD4900 macAlgo 3
attr EnO_FSSA230V_FFDD4900 manufID 00D
attr EnO_FSSA230V_FFDD4900 rlc 1234
attr EnO_FSSA230V_FFDD4900 rlcAlgo 2,++
attr EnO_FSSA230V_FFDD4900 rlcTX false
attr EnO_FSSA230V_FFDD4900 room EnOcean
attr EnO_FSSA230V_FFDD4900 securemode D2
attr EnO_FSSA230V_FFDD4900 subDef FFExxxx1
attr EnO_FSSA230V_FFDD4900 subType switch.00
attr EnO_FSSA230V_FFDD4900 webCmd on:off



teach in mit set EnO_FSSA230V_FFDD4900 secureteachOut
wie gesagt hier das Problem mit dem release bei "switchMode pushbutton"

oder
als switch



#FSSA-230V
define EnO_FSSA230V_FFDD4900 EnOcean FFDD4900
attr EnO_FSSA230V_FFDD4900 userattr room_map structexclude
attr EnO_FSSA230V_FFDD4900 IODev TCM_ESP3_0
attr EnO_FSSA230V_FFDD4900 alias Fernsehlicht Arbeitszimmer
attr EnO_FSSA230V_FFDD4900 dataEnc VAES
attr EnO_FSSA230V_FFDD4900 eep D2-03-00
attr EnO_FSSA230V_FFDD4900 eventMap BI:off B0:on
attr EnO_FSSA230V_FFDD4900 group Licht
attr EnO_FSSA230V_FFDD4900 key 9Bxxxxxxxxxxxxxxxxxxxxxxxxxxxx36
attr EnO_FSSA230V_FFDD4900 macAlgo 3
attr EnO_FSSA230V_FFDD4900 manufID 00D
attr EnO_FSSA230V_FFDD4900 rlc 1234
attr EnO_FSSA230V_FFDD4900 rlcAlgo 2,++
attr EnO_FSSA230V_FFDD4900 rlcTX false
attr EnO_FSSA230V_FFDD4900 room EnOcean
attr EnO_FSSA230V_FFDD4900 securemode F6
attr EnO_FSSA230V_FFDD4900 subDef FFExxxx1
attr EnO_FSSA230V_FFDD4900 subType switch
attr EnO_FSSA230V_FFDD4900 webCmd on:off
attr EnO_FSSA230V_FFDD4900 switchMode pushbutton


(in diesem mode kein teach in)


Einlernen:

1) Aktor in den Secure Einlern-Modus schalten
   set EnO_FSSA230V_FFDD4900 secureteachOut
2) Aktor in den normalen Teach In Modus schalten
   und einmal den virtuellen Schalter schalten
3) Aktor in den Betriebsmodus schalten
4) Noch die Bestätigungstelegramme aktivieren
5) sollte gehen :-)

Anbei der aktuelle Patchstand

klaus.schauer

#5
- Das "released-Problem" ist durch Zeile 3550 in der aktualisierten Entwicklerversion beseitigt, siehe Anlage.
- optional data sollte nicht fest definiert werden, sondern wird bei Bedarf in der Senderoutine generiert. Warum wird optional data hier überhaupt benötigt?
- Nach meinem Verständnis wird auch beim secure teach-in für EEP D2-03-00 zuerst ein UTE teach-in gesendet und dann die secure teach-in Sequenz. Kann natürlich sein, dass Eltako wieder etwas "vereinfacht" hat.
- Die Integration der Module finde ich grundsätzlich ok. Den Einbau der Prozedur in EnOcean_SndRadio finde ich aber auf Dauer nicht glücklich.
- Ich schlage vor, dass ich - sobald die neuen Routinen nach Deiner Vorstellung halbwegs praxistauglich sind - die aus meiner Sicht notwendigen Integrationsarbeiten übernehme.
- Seit der letzten veröffentlichten Version von 10_EnOcean habe ich zwischenzeitlich auch die eine oder andere Veränderung und Ergänzung eingearbeitet. Hier deshalb die aktuelle Entwicklerversion.
- Falls Deine Routinen soweit fertiggestellt sind, würde ich Dir die dann aktuelle Entwicklerversion als Basis geben.

nobody42

#6
Hi,

Ich habe die Secure Teach in nach dem Dokument Security_of_EnOcean_Radio_Networks.pdf implementiert.
Dort werden zwei RORG 35 Telegramme für den Secure-Teach In geschickt.
(ausserdem immer parallel wireless dumps von einem physikalischen Schalter dazu verglichen)

Bei Eltako muss das wie folgt eingelernt werden:

- Zuerst muss der Aktor in den Secure TeachIn Mode geschaltet werden, dann bekommt er diese zwei  RORG 35 Telegramme.
  (über die er die Infos zur Verschlüsselung und den key bekommt)
- Dannach wird er in den "normalen" Teach In Modus geschaltet (bei dem aber der Sender schon verschlüsselt mit RORG 30 schickt) und im Aktor
  durch das Senden eines Events wie z.B. A0 oder B0 etc. eingelernt.
- Das mit dem Optional Data habe ich aus der Analyse eines physikalischen Schalters (FT55), der verschlüsselt mit dem Aktor kommuniziert
  im dump wird vom Schalter z.B. dieses RORG 30 Telegramm geschickt: 55 00 0A 07 01 EB 30 04 91 4B 8A FE FD xx xx 00 01 FF FF FF FF 39 00 2B
  und da sind meiner Meinung nach optionale Daten dran...

Die Module sind jetzt auch noch sehr "alpha" und es fehlt noch viel Fehler/Werte Checking, von daher baust Du das vielleicht jetzt noch
nicht ein und wartest noch bis es schön ist. :-)

Ich wollte meinen Stand nur mal posten um die Entwicklung anzustoßen, weil ich mein EnOcean eben nicht ohne Security betreiben will.
Und da ich jetzt erst seit zwei Wochen in den FHEM eingestiegen bin, habe ich auch noch SEHR VIEL zu lernen,wie die interne Organisation
der Datenstrukturen und des Codes funktioniert.

Insbesondere wo, und an welchen Stellen, Dinge sinnvoll eingebaut werden und wo eben nicht.

Der Vorteil des Hooks in EnOcean_SndRadio, wäre eben, daß es transparent ist. Wenn das Device die Definition "security on" hat,
wird es crypted, egal wo das Event herkommt...

Ich werde nach und nach die Verbesserungen hier einstellen.

Gruss





nobody42

Cool, wenn das "released" Problem weg ist, kann ich meinen Code auf D2 vereinfachen :-)
Mach ich heute Abend.

Danke und Gruss !

klaus.schauer

- Das Vorgehen ist vollkommen ok.
- Beim teach-in Ablauf bin ich mir nicht sicher. Kann tatsächlich so sein, dass beide Verfahren UTE und secure teach-in für EEP D2-03-00 alternativ sind.
- In Dolphin View sieht man immer auch die optional data. Diese werden im Transceiver für die Funkschnittstelle generiert. Optional data muss aber nur bei Bedarf, insbesondere wenn nicht Multicast gesendet werden soll, über die serielle Schnittstelle gesendet werden. Die Entscheidung wird in EnOcean_SndRadio getroffen. Einfach mal ohne "handgestrickte" optional data probieren.
- Mein Angebot steht: Sobald Du mit den Erweiterungen soweit bist, sollten diese in die dann aktuelle Entwicklerversion einfließen. Dort würde ich dann entsprechende Hinweise, Anregungen und Ergänzungen einarbeiten.
- und zwischendurch bei Bedarf einfach fragen.

nobody42

Du hattest recht, optional Data werden nicht gebraucht !

Habe das jetzt rausgeschmissen und es tut immer noch.
(ich war heute etwas gehandicapt, da ich meinen FHEM auf einen raspberry 2 umgezogen habe :-)

Ich werde morgen noch meine Rolladenaktoren testen und dann werfe ich den kompletten unnötigen code raus
und die Verschlüsselung läuft dann unter dem switch.00 / D2 RORG ohne odata

Gruss

nobody42

Ok, hier mein aktueller Stand:

Es gibt jetzt eine Funktion "EnOcean_sec_createTeachIn", welche
ein secure Teach-Out (FHEM->Aktor) realisiert.

EnOcean_sec_createTeachIn ($hash)
- der Aktor muss nach der Definition unten angelegt werden, insbesondere mode "switch.00"
- legt aktuell selbst die Verschlüsselungsparameter fest (rlcAlgo,rlcTX,dataEnc,macAlgo)
  und speichert/überschreibt diese in fhem.cfg
- wird mit "set <device> secureteachOut" aufgerufen, wenn der Aktor im Secure-Teach-In Mode ist
- generiert selbst einen zufälligen RLC und speichert diesen in fhem.cfg
- der 16-Byte AES key muss momentan noch per Hand in der device config hinterlegt werden,
  da ich erst noch eine gute Idee brauche, wie ich mit den vorhandenen entropie/random Qellen in perl
  einen halbwegs brauchbaren key erzeugen kann (eventuell nutzt man den vorhandenen VAES mit genug Entropie)

Weiterhin gibt es eine neue Funktion "EnOcean_sec_convertToSecure", welche
ein Hook der Funktion EnOcean_SndRadio ist.
Sie schreibt das orginale Paket in ein secure Paket (RORG 30) um, sofern
im device "securemode on" gesetzt und RORG des Ursprungs-Pakets D2 ist

($err, $rorg, $data ) = EnOcean_sec_convertToSecure($hash, $packetType, $rorg, $data );
- verschlüsselt die Payload des Ausgangs-Pakets
- berechnet den korrekten MAC
- erhöht den RLC ensprechend um 1
- gibt die modifizierten Daten an die aufrufende Funktion zurück
 
Weiterhin habe ich noch ein paar Änderungen für mich persönlich gemacht,
damit die Events für meine FSB61 Eltako Rolladen Aktoren korrekt ausgewertet werden könnnen,
da die FSB61 ja nicht im "PC mode" sondern als "switch.00" angelernt werden.
Eltako schickt hier in den Bestätigungstelegrammen zum einen RORG A5 und zum anderen F6
mit "eigener" Interpreation der Werte

- den "release-loop-fix" habe ich auch eingebaut

Wenn Du möchtest kannst Du ja mal bei Gelegenheit die entsprechenden Teile in den Code reinmachen :-)

Einlernen:

1) Aktor in den Secure TeachIn-Modus schalten
   dann "set EnO_FSSA230V_FFDD4900 secureteachOut"
2) Aktor in den normalen Teach In Modus schalten
   und einmal den virtuellen Schalter schalten
3) Aktor in den Betriebsmodus schalten
4) Noch die Bestätigungstelegramme aktivieren
5) sollte gehen :-)


#FSSA-230V
define EnO_FSSA230V_FFDD4900 EnOcean FFDD4900
attr EnO_FSSA230V_FFDD4900 userattr room_map structexclude
attr EnO_FSSA230V_FFDD4900 IODev TCM_ESP3_0
attr EnO_FSSA230V_FFDD4900 alias Fernsehlicht Arbeitszimmer
attr EnO_FSSA230V_FFDD4900 dataEnc VAES
attr EnO_FSSA230V_FFDD4900 devStateIcon on:on off:off .*:unknown
attr EnO_FSSA230V_FFDD4900 eep D2-03-00
attr EnO_FSSA230V_FFDD4900 eventMap BI:off B0:on
attr EnO_FSSA230V_FFDD4900 group Licht
attr EnO_FSSA230V_FFDD4900 key 9Bxxxxxxxxxxxxxxxxxxxxxxxxxxxx36
attr EnO_FSSA230V_FFDD4900 macAlgo 3
attr EnO_FSSA230V_FFDD4900 manufID 00D
attr EnO_FSSA230V_FFDD4900 rlc 1234
attr EnO_FSSA230V_FFDD4900 rlcAlgo 2,++
attr EnO_FSSA230V_FFDD4900 rlcTX false
attr EnO_FSSA230V_FFDD4900 room EnOcean
attr EnO_FSSA230V_FFDD4900 securemode on
attr EnO_FSSA230V_FFDD4900 subDef FFExxxx1
attr EnO_FSSA230V_FFDD4900 subType switch.00
attr EnO_FSSA230V_FFDD4900 switchMode pushbutton
attr EnO_FSSA230V_FFDD4900 model FSSA
attr EnO_FSSA230V_FFDD4900 webCmd on:off


Gruss



klaus.schauer

- Das hört sich doch gut an. Ich werde mir das Ergebnis sobald als möglich ansehen. Dann können wir ja entscheiden, wann wir das übernehmen.
- Für ein Device können zwei unterschiedliche subType definiert werden. Für Deine spezielle Anforderung könntest Du es versuchen mit:
-- Empfang: attr <name> subType manufProfile, attr <name> manufID 00D und eventuell attr <name> model FSB61
-- Senden: attr <name> subTypeSet switch.00
- Es geht auch die Kombination subTypeReading und subType

nobody42

aah gut - hab ich nicht gesehen :-)

Das brauch ich - einen Typ zum Senden und einen zum Empfangen. Danke, schau ich an.

Gruss

klaus.schauer

#13
Die Ergänzungen sind eingearbeitet. Um die Verschlüsselungsfunktionen schrittweise ausbauen zu können, waren zusätzlich eine Vielzahl von Änderungen bei den Modulen und den Attributen notwendig. Die Änderungen an den Attributen müssen für bestehende Devices manuell nachgepflegt werden:

key >> keySnd oder keyRcv
rlc >> rlcSnd oder rlcRcv
rlcAlgo 2,++ >> rlcAlgo 2++
neu: secLevel encryption
neu: secMode snd, rcv oder biDir

Die privaten Schlüsssel und Rolling Codes werden jetzt in Fhem generiert. Falls (manuell vorgegebene) Attribute bestehen, werden diese auf Plausibilität geprüft und natürlich nicht überschrieben. Für die Erzeugung der Schlüssel und Rolling Codes muss zusätzlich die Perl-Ergänzung Crypt::Random installiert werden.

Als nächstes könnten die neuen Verschlüsselungsroutinen, insbesondere die teach-in Routine, universeller aufgebaut werden. Die notwendigen Übergabeparameter sind jetzt vorhanden.

nobody42

#14
Hi Klaus,

krasse Uhrzeit für den Post :-)

Ich schau es mir mal an. Warum die Aufteilung send/receive key/rlc ist mir noch nicht klar.

Danke fürs einbauen

Gruss

Edit: Grade bei den Aktoren müssen doch Beide (FHEM und Aktor) den gleichen RLC haben - von daher ist mir nicht klar für welchen
Fall du send/receive brauchst. Oder ist das weil man auch Schalter in FHEM einlernen kann ?
Wobei auch hier würde EINE Instanz rlc/key reichen, weil ich habe nirgendwo im EnOcean Standard gesehen, daß es für eine Paarung verschiedene rlc/keys geben kann ?