Skyduino:~#
Articles
Corrigé, projet

[Hack – partie 1] Reverse engineering des interrupteurs domotique Blyss

Bonjour tout le monde !

Aujourd’hui je ne vais pas vous faire un article « simple » et « user friendly » comme j’ai l’habitude de le faire.

Non, l’article d’aujourd’hui (ainsi que le prochain article) sera pour ainsi dire un compte rendu (certes très superficiel) du travail réalisé avec l’aide de plusieurs membres du forum arduino.
Dans ce premier article je vais vous parler de la partie hardware, dans le suivant je parlerai plutôt de la partie software.

j’espère que vous aurez autant de plaisir à découvrir le résultat de nos recherches, que nous à décortiquer le problème 😉

Introduction :

Avant toute chose je tient à préciser que ce « reverse engineering » est le fruit des efforts de 6 membres du forum arduino.cc ainsi que de moi même, à savoir :
– Artouste (http://arduino.cc/forum/index.php?action=profile;u=49110)
– Al1fch (http://arduino.cc/forum/index.php?action=profile;u=46688)
– Barbudor (http://arduino.cc/forum/index.php?action=profile;u=70207)
– Bunyman (http://arduino.cc/forum/index.php?action=profile;u=131410)
– Trigger (http://arduino.cc/forum/index.php?action=profile;u=56754)
– Bidle (http://arduino.cc/forum/index.php?action=profile;u=123020)

Disclaimer :
Je tiens aussi à préciser que la rétro-ingénierie est autorisée par la loi Française à des fins d’interopérabilité tel que garanti par l’article L122-6-1 du code de la propriété intellectuelle.
Il est ici question de comprendre le fonctionnement d’un système et d’en tirer des connaissances, en aucun cas il n’as été question de concevoir un clone du produit d’origine.

La petite histoire derrière ce hack :

Il m’a été « offert » un lot de prise murale télécommandé de la marque « Blyss » (en provenance de castorama) par un membre de ma famille.

Son idée était simple : profiter de la refonte du câblage électrique de notre maison pour ajouter un peu de domotique à celle ci.
Problème : pour le moment, aucun système de domotique réellement universel n’existe.

Ma famille connaissant ma passion pour l’arduino et l’électronique a alors trouvé la solution idéale (pour eux) :
me fournir un lot émetteur / récepteur sur lequel travailler, afin d’en comprendre le fonctionnement et par la suite permettre son intégration dans un système plus grand, à base … (suspense) d’arduino.

C’est ainsi que je me suis retrouvé avec ce lot interrupteur + prise domotique sur mon bureau :

Bien sur afin de contrôler cet interrupteur il m’a été fourni un module émetteur pour bouton « va et viens ».

J’ai aussi pu utiliser la télécommande normalement associée aux volets roulants de mon domicile :

Les règles du jeu était simple :
je pouvais bricoler à souhait l’interrupteur et le module « va et viens », cependant il m’était formellement interdit de toucher à la télécommande (en cas de fausse manipulation : plus de volets roulants. Cela aurait était un énorme problème !) …

Le module émetteur :

Celui ci est composé d’un circuit électronique et de deux câbles normalement reliés à un interrupteur de type « va et viens ».

La partie électronique est composé d’un microcontrôleur de la marque SONIC, un SN8P2501BSG pour être précis.

Ce micro-contrôleur comporte 1Ko de mémoire flash et seulement 48 octets de mémoire ram …
Un datasheet est disponible sur le site du fabricant : http://www.sonix.com.tw/sonix/product.do?p=SN8P2501B

Après quelques instants d’inspection et de tests au multimètre, j’ai pu renverser le câblage du micro-contrôleur :
– Le bouton externe est câblé sur P1.0,
– Le bouton interne quand a lui est câblé sur P1.2,
(Ce bouton n’a du reste pas grand intérêt)
– La led de statut (led bleu) se trouve sur P2.1, celle ci semble de toute évidence clignoter au même rythme que la sortie RF (abréviation de radio fréquence).
Sortie RF qui ce trouve justement sur P2.2, directement connectée au modulateur 433MHz (l’espèce de quartz à trois broches à coté de l’emplacement pour la pile CR2032).

Le récepteur mural :

Celui ci est composé d’un micro-contrôleur de même type que dans la télécommande.
Il possède aussi un relais permettant de contrôler l’alimentation du luminaire auquel il est relié.
Ainsi que tout une partie réceptrice RF 433MHz à base de bobine, transistor et autre joyeuseté analogique.

Une grosse différence cependant par rapport au module émetteur « va et viens », l’interrupteur possède une EEPROM !
Une EEPROM 24C02 pour être précis, soit une mémoire de 256 octets, qui contient les adresses des modules associés au récepteur.

Concernant la partie RF 433MHz, un rapide test m’a permis de conclure qu’il s’agissait d’un bête système 433MHz low-cost en modulation d’amplitude ASK.
Il est donc possible d’utiliser des modules 433MHz du commerce !

Let’s Hack !

La 1er étape consiste à souder des câbles sur les divers points clés des modules (sortie RF, entrée RF, bus I2C, …)

Pour ce faire j’ai utilisé deux outils indispensables à tout bon hacker qui se respecte :
– un analyseur logique : « Open Logic Sniffer » (abrégé en OLS dans cet article)
– une sonde « in situ » multi-protocolaire : « BusPirate »

Le module émetteur :

Le module récepteur :

J’ai tout d’abord commencé par « sniffer » de manière non intrusive (sans couper aucune pistes donc) les communications entre l’EEPROM et le microcontrôleur embarqué du récepteur.
Ce fut un échec cuisant …

En réalité le sniffer intégré dans la carte BusPirate ne donne des résultats correctes qu’en dessous de 100KHz (voir même 70KHz en pratique) , or la vitesse du bus I2C entre l’EEPROM et le microcontrôleur était justement de 100KHz …

Du coup je suis passé à une méthode un peu plus intrusive.

Histoire de rendre les choses un peu plus simples j’ai aussi ajouté un interrupteur permettant (au choix) : de dump l’eeprom ou de laisser le système fonctionner normalement.

J’ai fait de même sur le module émetteur pour pouvoir le mettre en position On ou Off sans avoir de pinces croco de tous les côtés :

Après analyse du contenu de l’eeprom suite à divers actions (eeprom vierge, association, dé-association, on, off, ..) j’ai pu remarquer qu’a chaque appui sur le bouton l’EEPROM est mise à jour !
Étant donnée la faible durée de vie d’une EEPROM (en écriture) il semble évident que celle-ci ne résistera pas plus d’une ou deux années, une fois HS il faudra changer l’interrupteur.

Je détaillerai l’organisation interne de l’eeprom dans le prochain article 😉

Au passage vous vous rappelez, j’ai aussi une télécommande universelle sous la main 😉
Ne pouvant pas l’ouvrir j’ai du faire preuve d’intelligence …

Faire une cage de faraday (pour éviter les interférences), câbler un récepteur 433MHz sur l’analyseur logique, écrire un script python d’analyse du signal, … oui j’ai osé.

Les codes sources seront fournis dans le prochaine article 😉

Pour ceux que ça intéresse mon bureau ressemblait à ça durant les test :

Dans le prochain article je vous parlerai de la partie software à savoir :
– le décodage de la trame RF,
– les scripts de décodage réalisé pour l’occasion (1er version en python, 2eme version en « arduino »),
– le protocole « Blyss » + quelques remarques,
– le code arduino conçu pour émuler un émetteur blyss,
– l’organisation interne de l’eeprom des récepteurs pour les curieux + les scripts commandes « bus pirate » pour réaliser le dump.

Pour ceux qui voudraient suivre l’intégralité du hack depuis le début, vous pouvez faire un tour sur le topic dédié (attention 20 pages actuellement ) :
http://arduino.cc/forum/index.php/topic,109892.0.html

Discussion

23 réflexions sur “[Hack – partie 1] Reverse engineering des interrupteurs domotique Blyss

  1. Article super intéressant ! J’aimerai avoir le temps de lire tous tes articles, te poser des questions, participer plus… Je le ferai probablement un jour. Je prendrai ce temps. Je suis vraiment nul en électronique pour l’instant…

    Aussi, petit reproche : c’est réellement dommage que tu fasses des fautes énormes par moments, mais j’essai de passer outre.^^

    Un grand merci de la part d’un lecteur régulier mais souvent silencieux. 🙂

    Publié par Nicolas Fritz | 17 juillet 2012, 15 h 44 min
    • >> J’aimerai avoir le temps de lire tous tes articles, te poser des questions, participer plus… Je le ferai probablement un jour. Je prendrai ce temps. Je suis vraiment nul en électronique pour l’instant…

      Tu sait j’ai des dizaines et des dizaines d’articles en attente d’écriture, j’ai des projets en suspend depuis plusieurs mois, …
      On manque tous de quelque chose, moi c’est le temps 😉

      >> Aussi, petit reproche : c’est réellement dommage que tu fasses des fautes énormes par moments, mais j’essai de passer outre.^^

      Et pourtant je fait des efforts … de gros efforts même …
      Mon correcteur est en vacance (@jordan: sale féniasse =P) donc c’est un peu le massacre en ce moment.

      Publié par skywodd | 17 juillet 2012, 15 h 55 min
    • Pour passer outre, il faudrait savoir conjuguer le verbe essayer !

      Publié par rakham | 27 avril 2015, 18 h 53 min
  2. T’es mon idole skywodd!! Tu détail bien tes mise en œuvre et autre tests… C ‘est un régale a lire et regarder les photos.
    Continue ton site!
    Ps : T’es fautes ne me pique pas les yeux a moi je suis une quiche en orthographe.Ce qui compte c’est l’ensemble.

    Publié par cutprod | 17 juillet 2012, 22 h 53 min
  3. Salut,

    Article extrêmement intéressant, perso je m’intéresse à la marque Otio également vendue chez castorama. La telecommande est extérieurement semblable position des boutons etc… Les modules sont fabriqués chez Rising Sun en Chine comme on peut le voir sur une de tes photos. Comment pourrais je m’assurer que le protocole utilise est identique facilement ? Et pouvoir continuer ton travail mais sur Otio…

    Publié par Alex | 20 janvier 2013, 13 h 12 min
  4. Thanks a lot, very interesting. It would be good if you had a little detail on how you connected the BP and OLS and what modes you used, what pins on each device etc.

    Publié par HaQue | 10 février 2013, 6 h 41 min
  5. Salut à toi Skywodd,
    J’arrive un peu tard, mais j’ai une question concernant le module récepteur Blyss :
    Il ne dispose pas de pile, et fonctionne donc à partir du 230v AC. A côté de ça, je suppose que le microcontrôleur fonctionne lui en DC basse-tension. Aurais-tu souvenir de comment est réalisé la conversion sans transformateur? Ou une alimentation capacitive?
    Merci d’avance 😉

    Publié par Zescientist | 5 novembre 2013, 13 h 39 min
    • C’est un système complétement passif (pas de transfo) comme tu peut le voir sur les 1er photos.
      C’est basé sur une série de diode et un gros condensateur secteur. Je penche donc pour une alim capacitive un petit peu modifié.

      Publié par skywodd | 6 novembre 2013, 13 h 40 min
      • Bien boostée alors, car il faut plus que les (au mieux) 50mA d’une alim capacitive pour coller le relais.
        Je vais peut être investir dedans pour essayer de comprendre comment ça fonctionne.

        Publié par Zescientist | 6 novembre 2013, 20 h 06 min
  6. Pour information, les téléphones Android, comme le Galaxy S4 possède un émetteur IR.
    Il serait intéréssant de pouvoir retransmettre le signal à partir de son téléphone. Et plus simple que de programmer sa télécommande universelle.
    Il doit y avoir des applications pour ca, je pense.
    A creuser.

    Publié par lucien | 1 février 2014, 15 h 21 min
  7. Bonjour,

    Super article ! Depuis le temps que j’attends que des personnes se penchent sur le sujet !
    Magnifique reportage,et belle détermination.!

    Hate de pouvoir un jour sauter la box blyss pour pouvoir travailler directement avec une autre box, avec la tablette archos ou pourquoi pas la future freebox v7

    Publié par Spicandroid | 5 janvier 2015, 20 h 00 min
  8. Sonix SN8P2501 8 bits ,1k de ROM, 48 octets de RAM, ça renseigne sur ce que ça contient, des automates pas plus évolués que le protocole RF employé. On ne va pas loin avec ça, sauf en assembleur.

    Pour ce processeur susceptible de fonctionner à 16Mhz, on peut lire « run mode, 5V 4MHz, 5mA » seulement. 4MHz en assembleur, c’est confortable. Et le classique ou bien connu circuit à capa et zener peut suffire. Pour le relais, c’est moins évident. Un relais 5V est un gouffre. Mais je constate que Blys utilise un relais 24V STM S3 24HA, Rated current is 15mA, je comprend mieux comment l’ensemble tient dans une prise:
    http://www.shori.com.tw/upload/20130513183938.pdf

    Je viens pour ma part de hacker/réverser la solution MCE07 et des prises de Maclean Energy, une solution éco (30€ les 4 prises RF433 avec apprentissage des télécommandes) que je voulais piloter depuis un PC, puis idéalement, via la WiFi. La prise de j’ai démonté affichait une tension de service de 48V, je n’avais pas encore approfondi le sujet de l’alim. Un relais S3 dans une version 48V ne consommerait plus que 7,5mA. Nous sommes loin des 80 à 150mA sous 5V (puissance en mW similaire) qui seraient incompatibles avec le montage d’alim à capa.

    Sinon, il existe bien des chips 8 pins transformer less (à 1€) pour remplacer le montage à capa par un circuit à transistor et régulateur. Mais ce serait plus onéreux et compliqué que 3 composants. Aussi dangereux également, notamment au moment de vérifier son fonctionnement. Sous 240V, ça peut secouer très fort 🙂

    PS: pour étudier la prise de Maclean Energy, j’en avais désoudé un morceau pour le monter sur une plaque d’essai, avec une alim 5V indépendante du secteur. C’est plus prudent. Ca évide de bricoler sous ces tensions élevées et ça épargne aussi les outils (PC, OLogicSnifer, ….) qui peuvent fumer assez vite en cas de problèmes tels que de masse.

    Publié par Bruno | 19 septembre 2015, 15 h 30 min
    • Bonjour,

      Peux-tu donner des details sur le hacking du système Maclean Energy ? J’ai un pack de 4 prise que j’aimerais piloter depuis un ordinateur.

      Publié par Sylvain | 2 décembre 2015, 23 h 48 min
      • Bonjour,

        Depuis l’année dernière, j’ai pas eu le temps de revoir le code et de séparer la librairie Maclean. L’essentiel est par là: http://justice.cloppy.net/index.php/justice/2016/08/11/nop

        Il suffit de raccorder un émetteur et récepteur RF à l’arduino. Les détails et les spécificités Maclean (très basique) sont dans le sketch Arduino. Les quelques fonctions peuvent lire le code de la télécommande, les codes peuvent être stocké en flash, puis rejoués à partir de la flash.

        Ensuite, en l’état, il me suffisait d’envoyer 2 on, 3 off, all on depuis un PC… l’arduino s’occupait du reste.

        Publié par impaire | 11 août 2016, 22 h 55 min

Rétroliens/Pings

  1. Pingback: La Zibase devient compatible avec la BlyssBox - 22 août 2012

  2. Pingback: domotique | Pearltrees - 16 septembre 2012

  3. Pingback: Domotiqe Protocole | Pearltrees - 2 février 2013

  4. Pingback: Domotique | Pearltrees - 26 octobre 2014

  5. Pingback: RF 433Mhz | Pearltrees - 25 août 2015

  6. Pingback: Arduino | Pearltrees - 12 janvier 2016

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.