Interrupteurs domotique Blyss de castorama

Mon matériel ("<désignation>" Réf:<référence produit> Trame:) :
"Micro module émetteur" Ref:599031 Trame: FE 79 5F 7 8 0 1E D8
"Télécommande programmable LCD" Ref:582883 Trame: FE 39 21 A 8 0 98 22
"Pack v&v sans fils" Ref:582869 Trame: FE 60 07 B 8 0 1E 96
"Détecteur de mouvement intérieur" Ref:582862 Trame: FE 0E CB E 8 0 DA BF
"Détecteur de mouvement extérieur" Ref:582861 Trame: FE 80 23 C 8 0 98 7D

Matériel RF :
Émetteur / Récepteur 433MHz, modulation de type ASK (-> module low-cost classique)

La trame RF :
L'encodage des bits :

T = 400ms
"1" = T:LOW 2T:HIGH
"0" = 2T:LOW T:HIGH

Découpage d'une trame :

<entête 2.4ms HIGH>
<empreinte 0xFE (8 bits)>
<canal global (4 bits)>
<adresse (16 bits)>
<sous canal (4 bits) >
<état lumiére (ToR) (4 bits)>
<rolling code MSBFIRST (8 bits)>
<timestamp incrémentiel (0 ~ 255) MSBFIRST (8 bits)>
<footer 24ms LOW>

Les canaux globaux :

canal A = 0
canal B = 1
canal C = 2
canal D = 3

Les sous canaux :

canal 1 = 8
canal 2 = 4
canal 3 = 2
canal 4 = 1
canal 5 = 3
tout les canaux = 0

Le rolling code :

0x98 -> 0xDA -> 0x1E -> 0xE6 -> 0x67

Autre :

- 4 envois minimum de la trame.
- Incrémentation de +10 pour le timestamp
- Timing en réception trés approximatif (due au matériel utilisé)

Fichiers joints :
RF_Blyss_Sniffer : Capture et décode les trames RF "à la volé" (Signal du récepteur RF sur D12 ET D2)
RF_Blyss_Spoofer : Génère un signal RF compatible Blyss (Sortie du signal RF sur D4)

Mise à jour des fichiers joints :

18/06 - 17h40 : Une petite erreur s'était glissé dans set_key(), c'est réglé (cela devait être la cause des problémes de @bidle).
19/06 - 18h15 : Sniffer : Assouplissement des fourchettes de timings, meilleurs réactivité du code avec tout types d'émetteur.
19/06 - 18h15 : Spoofer : Petite erreur dans la fonction generate_rolling_code(), bug réglé
19/06 - 16h30 : Sniffer : Ajout d'un compteur de trames identique (echo)
23/06 - 13h00 : Sniffer : Timings désormais codé en dure dans le code
15/07 - 15h40 : Spoofer : Ajustement de la durée du footer et du delta entre deux rolling code -> compatibilité avec les deux versions de modules blyss
15/07 - 16h15 : Sniffer : Ajustement des timing pour une meilleur compatibilité avec les différents modules blyss
15/07 - 16h50 : Spoofer : Modif delayMicroseconds -> delay() pour plus de précision sur la plage des 24ms

Fichiers joints :
Sniffer : https://dl.dropbox.com/u/53604363/hack_blyss/RF_Blyss_Sniffer/RF_Blyss_Sniffer.ino
Spoofer : https://dl.dropbox.com/u/53604363/hack_blyss/RF_Blyss_Spoofer/RF_Blyss_Spoofer.ino

Ancien fichiers joints :
Décodeur automatique de capture OLS :
https://dl.dropbox.com/u/53604363/hack_blyss/Blyss_trame_dump/ols2data_cli.py
Analyse statistique du champ "timestamp" :
https://dl.dropbox.com/u/53604363/hack_blyss/Blyss_trame_dump/stats_valeur.ods

Dump EEPROM avec une télécommande associé suite à un full-erase :
https://dl.dropbox.com/u/53604363/hack_blyss/Blyss_trame_dump/dump_eeprom/dump_eeprom_telecommande_apres_full_erase.txt
Dump EEPROM avec un télécommande et un interrupteur associé :
https://dl.dropbox.com/u/53604363/hack_blyss/Blyss_trame_dump/dump_eeprom/dump_eeprom_telecommande_et_interrupteur.txt

Utilitaires d'analyse :
Données brute "bus pirate" -> données brute :
https://dl.dropbox.com/u/53604363/hack_blyss/Blyss_trame_dump/trame_dump/raw2line.py
Données brute -> dump EEPROM :
https://dl.dropbox.com/u/53604363/hack_blyss/Blyss_trame_dump/trame_dump/line2dump.py
Décodeur de capture OLS (non CLI) :
https://dl.dropbox.com/u/53604363/hack_blyss/Blyss_trame_dump/trame_dump/ols2data.py

Batch d'analyse par lot :
Décodage des dump EEPROM (trame_??.dump.txt) :
https://dl.dropbox.com/u/53604363/hack_blyss/Blyss_trame_dump/trame_dump/clean_dump.bat
Décodage des captures OLS (trame_??.ols) :
https://dl.dropbox.com/u/53604363/hack_blyss/Blyss_trame_dump/trame_dump/decode_all.bat
Affichage du résultats des différents décodages OLS (trame_??.ols.txt) :
https://dl.dropbox.com/u/53604363/hack_blyss/Blyss_trame_dump/trame_dump/echo_all.bat

(Je vais faire le ménage dans les anciens fichiers joints pour garder uniquement ce post à jour ;))