hack_xiaomi_mi_zigbee_sniffer

Hack Xiaomi Mi SmartHome – Zigbee Sniffer

Cet article fait suite à la découverte de la technologie utilisée dans les capteurs « SmartHome » de chez Xiaomi. Comme vous avez été nombreux à apprécier mon précédent billet sur le hack du capteur de température / humidité Xiaomi. Je me suis dit qu’il fallait que j’aille un peu plus loin. Sniffer le protocole Zigbee avec un capteur Xiaomi.

J’ai donc franchi le pas et lu le plus de documentations possibles (pour « hacker », on est obligé de bien connaître sa cible) sur le microcontrôleur JN5169

D’ailleurs en parcourant le web, à la recherche de documentations, je suis tombé sur un logiciel très intéressant, Ubiqua protocol analyzer, permettant de sniffer des trames Zigbee ! Dans ma tête, je me suis dit, c’est génial ! C’est parfait pour comprendre le fonctionnement d’un appareil et correspond à un petit projet pour commencer sans être plongé directement dans le code.

Ma note :

Votre note

Click to rate this post!
[Total: 176 Average: 3]

Voici comment j’ai procédé :

Hardware

Les différents capteurs

Pour tout vous dire, je suis tombé sur ces petits capteurs car je suis l’actualité « SmartHome » et que je suis moi même équipé d’appareils domotiques pour rendre ma maison « intelligente ».

Les capteurs ne sont pas très chers, de bonnes qualité et sont tout petits. Du coup, j’en ai commandé un jeu:

Pour le capteur de température, je vous laisse relire mon article

Voici à quoi ressemble le capteur de mouvement:

Vous pouvez vous le procurer ici :

xiaomi body sensorOriginal Xiaomi Smart Human Body Sensor

Voici la carte électronique correspondant au cœur :

xiaomi_human_body_sensor_progCœur du capteur avec le port de programmation

Ça ne vous rappelle rien ? hé bien si, je crois bien que c’est le même port de programmation que le capteur de température et humidité précédemment testé.

xiaomi_body_sensor_avantCapteur PIR de la carte fille

xiaomi_body_sensor_completCœur et carte fille assemblées

Et voici le capteur d’ouverture de porte :

Vous pouvez vous l’acheter ici :

xiaomi door sensorOriginal Xiaomi Mi Smart Temperature and Humidity Sensor

Voici côté carte électronique:

Xiaomi_Door_sensor_progPort de programmation du capteur d’ouverture de porte Xiaomi

Xiaomi_Door_sensor_JN5169Coeur de la carte électronique avec capteur ILS

Vous remarquerez que les ports de programmation se présentent toujours sous la même forme. En effet, pour la production, c’est plus facile, un seul programmateur pour tous les types de capteurs.

Et bien pour nous aussi…

J’avais déjà produit rapidement, un bout de carte électronique pour récupérer les infos du capteur mais, il n’était pas pratique car il fallait souder des petits fils pour démarrer dans le « bootloader » puis dessouder pour repasser dans le programme principal.

J’ai donc décider de développer une carte électronique un peu plus évoluée pour que ce soit plus commode pour moi.

Carte électronique pour flasher les objets

Voici le schéma de la carte :

schema_prog_jn5169Schématique de la carte de programmation

Avec pour JP1 (Série TTL du câble FTDI :

1 = GND
2 = TX
3 = RX

Pour JP2 (Connecteur côté capteur) :

1 = TX
2 = RX
3 = DO1
4 = VCC
5 = RST
6 = GND

SW1 sert à démarrer en mode UART sur le Bootloader.
SW2 sert à redémarrer le microcontrôleur.

Voici à quoi cela ressemble une fois réalisé :

Carte programmation xiaomi USB FTDICarte de programmation des Capteurs Xiaomi Mi SmartHome

Vous reconnaissez surement le convertisseur USB / Série FTDI que j’utilise dans mes projets. Vous pouvez le retrouver ici :

Convertisseur USB / Série TTL FTDI

J’aurai bien voulu faire une carte électronique avec des « pogos pins » pour que ce soit au top, comme les vrais 😉 mais j’en ai pas en stock (du coup j’en ai commandé pour les prochains projets). J’ai donc utilisé des petits connecteurs mâles et femelles adaptés au pas du port de programmation.

Carte de programmation capteurs xiami vu de dessousCarte de programmation vu de dessous avec connecteur pour Xiaomi

Carte de programmation connectée au capteur XiaomiProgrammateur Xiaomi connecté au capteur d’ouverture de porte

Voilà, cette fois-ci c’est bon, nous avons terminé la partie matérielle et nous avons tout ce dont nous avons besoin pour jouer avec les capteurs Xiaomi Mi.

Cependant, il reste encore un travail indispensable. En effet, l’un n’est rien sans l’autre. Il va falloir s’attaquer à la partie logiciel.

Logiciels

Pour pouvoir mettre en place mon sniffer, il faut deux logiciels :

  • 1 pour le capteur Xiaomi (firmware sniffer)
  • 1 pour l’ordinateur qui va analyser les trames

Voici comment ça fonctionne concrètement:

schema_hack_fonctionnement_XiaomiPrincipe de fonctionnement du « Sniffage » de Zigbee

Firmware pour sniffer

Figurez-vous que quand j’ai installé le SDK pour développer sur le JN5169, en parcourant les différents répertoires, je suis tombé sur un dossier nommé « Tools » avec dedans un fichier binaire JennicSniffer !!!

En me renseignant sur la toile je me suis aperçu que ce firmware permettait au microcontrôleur d’être en tant que coordinateur (c’est à dire récepteur) et de re-router les paquets sur le port série. Intéressant, mais pas que… en plus de cela, il existe au moins 1 logiciel (je vous expliquerai juste après pourquoi le « au moins ») capable de décoder les trames pour en extraire le type de protocole et les données.

Je me suis donc muni de mon programmateur et à l’aide du logiciel BeyondStudio for NXP et du SDK, j’ai flashé le capteur de température Xiaomi pour qu’il devienne un » Sniffer » Zigbee.

jn5169_ecriture_flashEcriture dans la flash du JN5169

J’ai simplement sélectionné le fichier binaire et j’ai cliqué sur « Program ».

PS: petite anecdote… Quand j’ai lancé la programmation du capteur, j’ai eu un message d’erreur disant encore une fois que la mémoire était protégée dû au paramétrage de l’OTP. Je suis resté au moins 2 heures à essayer de comprendre pourquoi il y avait une erreur et comment modifier l’OTP.

En fait, je n’avais pas vu 2 choses:

  • La première, c’est que j’avais coché l’option de vérifier le programme après flashage.
  • La deuxième est que la vitesse de flashage (1000000 baud/s) est tellement rapide que je n’avais pas vu le point précédent.

JN5169_CRP

Du coup, l’écriture se passe bien mais c’était la relecture qui provoquait l’erreur… Normal, on a vu sur mon premier billet que la lecture était protégée…

Bref, tout va bien, j’ai juste perdu un peu de temps avant de comprendre le problème.

Logiciel de « sniffage »

Maintenant que le capteur est en mode « Sniffer », il ne manque plus qu’à installer le programme sur Windows afin de récupérer les trames et les analyser.

En cherchant un petit peu (vraiment pas beaucoup), je suis tombé sur un logiciel d’analyse de trames Zigbee compatible avec le firmware que j’ai intégré dans le capteur Xiaomi.

Ce logiciel s’appelle : Ubiqua Protocol Analyzer.

C’est la société Ubilogix qui l’a développé et se veut être compatible avec le plus de matériels possibles destinés au protocole IEEE 802.15.4 et ces couches supérieures (dont le Zigbee).

Pour obtenir ce logiciel, il faut s’inscrire, s’authentifier et valider une licence de démonstration qui vous permet de l’utiliser pendant 21 jours et 1000 trames sniffées par sessions.

J’ai estimé que c’était largement suffisant pour mon utilisation.

Je suis notamment tombé sur de vieux « posts » sur la communauté NXP qui permettait de pouvoir rendre compatible Wireshark avec le Sniffer Jennic. Ils mettaient (et oui je ne trouve plus le ZIP) à disposition une sorte de passerelle port série / loopback ethernet permettant à Wireshark de récupérer toutes les trames provenant de la COM.

Wireshark ensuite utilise son moteur de décodage et de filtres pour récupérer les données Zigbee. Le gros avantage étant que Wireshark est opensource et gratuit. D’ailleurs, n’hésitez pas à mettre en commentaire si vous avez plus d’informations à ce sujet.

Bref voici à quoi ressemble Ubiqua Protocol Analyzer:

ubiqua_sniffer_1Logiciel ubiqua protocol analyzer

Pour commencer, il faut créer l’appareil qui va permettre de sniffer les trames.

En haut à gauche, il y a le « Device Manager » et c’est ici que ça se passe. Il suffit de cliquer sur « Add Device ».

Normalement un popup apparait avec un port COM ouvert. Il faut le sélectionner. Une fois ajouté, il apparaitra dans la fenêtre. Si vous avez tout réussi (matériellement parlant), en poussant le curseur du « device » sur la droite, votre appareil passe en vert. C’est gagné !!! les deux logiciels se comprennent !!!

Il ne manque plus qu’à faire dialoguer les appareils de Xiaomi Mi SmartHome pour voir ce qu’il se passe.

Résultats

Voici comment j’ai procédé:

  • J’ai démarré le sniffer
  • J’ai installé la passerelle Xiami Mi SmartHome
  • J’ai appairé le capteur d’ouverture de porte
  • J’ai appairé le capteur de détection de mouvement

Voici ce que j’ai obtenu :

ubiqua_sniffer_zigbee_generalTableau général du sniffage

Première chose, les capteurs Xiaomi Mi parle bien avec le protocole Zigbee. (Oui ça aurait pu être un dérivé ou du Jeninet par exemple).

Ensuite, le logiciel à bien détecté le coordinateur (en rouge) et les nœuds (en gris) avec leur identifiant respectif.

Le logiciel arrive bien à décoder les différentes séquences, que ce soit l’appairage, les acquittements, les commandes, les données, les requêtes, etc…

Je trouve que c’est de bonne augure pour apprendre et comprendre le fonctionnement des capteurs.

A droite, nous avons le décodage et la structure de chaque paquet sniffé comprenant les informations du paquets, les entêtes, les données du protocole.

Bref, j’ai désormais tout ce qu’il me faut pour analyser tous les paquets et comprendre le fonctionnement du protocole.

Cependant, j’ai pu m’apercevoir que les données utiles des capteurs restent chiffrés. Il est donc impossible (sans connaître la clef) de développer une passerelle Zigbee / port série compatible avec les capteurs Xiaomi Mi existant (avec le firmware d’origine).

Exemple :

ubiqua_sniffer_encrypted_data

Dommage mais assez logique… (cependant, c’est peut-être possible de cracker la clef en faisant du brute force … en utilisant le même principe que le crack des clefs WEP).

Conclusion

Cette partie de hack des capteurs Xiaomi Mi est en quelque sorte un intermédiaire vers l’aboutissement du projet. Intermédiaire, mais indispensable pour la suite car il permet d’appréhender de manière plus sereine la suite du projet.

L’analyse des autres capteurs de la série ainsi que le développement du capteur tienne une place essentielle. En effet, grâce à ces outils, je vais pouvoir travailler dans de meilleures conditions sans faire trop de bricolages hasardeux.

Le sniffage des trames Zigbee, elles, m’ont permis de valider plusieurs points:

  • Les fonctions d’écriture sur un capteur Xiaomi sont fiables.
  • Le protocole utilisé correspond bien à du Zigbee
  • Les données des capteurs sont chiffrés

Face à ces constats, je pense que je vais développer mes propres binaires afin d’exploiter au maximum le matériel développé par Xiaomi.

Il va falloir désormais, développer le coordinateur (passerelle Zigbee / port série) pour brancher sur une Raspberry Pi. Et Ensuite, développer le code pour chaque type de capteur et ses services.

Pour ceux qui ont déjà des passerelles Zigbee maîtrisées, cela leur permettra de détourner les capteurs Xiaomi Mi pour coller à l’existant.

 

Click to rate this post!
[Total: 176 Average: 3]

85 comments

  1. Bonjour, c’est la première fois que je tombe sur un site comme le tiens ! C’est un vrai plaisir de te lire, car tes explications sont claires et j’arrive à comprendre ce que tu fais sans avoir de grandes connaissances en électronique, je possède ces capteurs et il est clair que je vais suivre tes avancements…

  2. Super ton article.
    Pourquoi ne pas utiliser un clef USB zigbee pour déchiffrer tous ça ?
    Je suis ton article de près car je risque d’avoir le même objectif avec mes volets roulant zigbee

    1. @ Dams
      Je suis prêt à parier que tes volets roulant sont de marque Profalux , si oui j’ai le même soucis que toi… ces hacks pourrait bien nous éclaircir sur le sujet.

      1. @cyril
        En effet c’est bien des profalux.
        Je suis un autre article à ce sujet. Quelqu’un qui commande déjà les siens avec des commandes en python. Mais ce n’est pas le sujet de cette article. Si besoin d’informations fait moi signe .

    1. Merci. Très bonne remarque. Vu que je suis en tant que sniffer (hors appairage), c’est un chiffrage du protocole zigbee.

      En gros, c’est la négociation entre le capteur et la passerelle qui génère la clef de chiffrement. Du coup eux seuls peuvent se comprendre. Ton lien est en relation directe avec la suite de mes travaux.

      Un peu de patience et je vous dévoilerai mes résultats des que je peux.

  3. super , j’ai hate 🙂
    j’ai un CC2530 en usb , j’arrive a utiliser le sniffer de TI mais je cherche aussi a l’utiliser en coordinateur sur un raspi ^^

  4. Hello,

    Super ton blog, super articles !

    J’utilise la solution mi pour ma domo avec la gateway mi, mais je trouves les plugs dangereuses en particulier avec un adaptateur et j’essaye de les intégrer directement dans la prise

    Plutôt simple a démonter on trouve à l’intérieur le même JN5169 sur une carte fille indépendante de la partie 220V !

    Par contre, particulièrement quand démonté et quand une une charge meme faible est présente sur la sortie, la portée est extrêmement faible comparé aux autres éléments mi, alors que celui-ci est alimenté et devrais faire relais zigbee ?!?

    J’ai donc hâte de voir ton retour sur les prises et du hack que tu trouveras

    Je peux partager un mini tuto démontage si ta pas encore démonté la tienne

    ++
    seb

  5. Bonjour, superbe article 🙂 j’attend la suite avec impatience… j’ai deja commandé 2 capteurs.
    Il doit y avoir une erreur entre ton schema de cablage et la description du jp2, vcc et rst sont inversé mais est ce le schema qui est bon ou la description ?

    1. Non pas du tout. Ce sont des clefs pour la partie WiFi. En mettant la passerelle en mode développeur et utilisant la clef fournie, la passerelle te transmet par UDP le trafic…
      Dans ma partie, c’est les clefs de chiffrage zigbee que je recherchais, mais c’est réglé. Dans les prochains jours je vous partagerai tout ça… Un peu de patience

  6. Bonjour,
    Super ton article, très intéressant. J’ai effectué il y a quelques mois des tests similaires aux tiens de mon coté avec une clef USB Texas Instrument CC2531. En utilisant le logiciel Perytons pour sniffer les trames j’ai eu la surprise de voir qu’il avait réussi à décrypter, tout seul, l’intégralité des trames. Je voyais clairement ouverture de porte, clic interrupteur, etc… Je suis embêté car ce logiciel est sous licence et ne démarre plus chez moi après la période d’essai, va falloir que je le réinstalle sur une VM. Mais j’avais sniffer un appairage et de l’utilisation ensuite et une clé était apparue lors de l’appairage. J’ai encore une sauvegarde de mes fichiers de captures au format perytons si ça peut t’interesser.
    De mémoire j’avais noté une clé ( 1D3EABF4691AD73075B6C32C41126FE8 ) sur ma gateway v1 (celle non compatible avec le mode développeur) mais je n’ai pas réussi à l’exploiter et à aller plus loin dans ma recherche. J’avais l’impression qu’il me manquait autre chose, que c’était pas la bonne clé et est du m’occuper d’autres projets. Depuis la gateway v2 est sorti et je l’ai achetée pour le mode dev et n’ai pas fait le meme test de sniff voir si la même clé ressortait.
    En espérant que ça puisse te servir dans tes recherches car ton travail est sur une bonne voie et si il était possible d’utiliser les capteurs Xiaomi directement sans avoir à les hacker grâce à la clé ça serait super.

    1. Merci pour tes informations. Je suis en ce moment même en train de rédiger un article sur la découverte de la clef. (Dailleurs, je n’ai pas la même que toi). Je devrais publier l’article Lundi et vous annoncer de bonne nouvelles.

      1. Génial j’attends ça avec impatience alors. Je vais repartir sur mes tests je pense avec ma gateway v2 et voir si je peux extraire qqc d’intéressant et comparerait avec ton futur article.

  7. hello,

    vivement lundi 🙂 super article.
    peux tu vérifier le schéma pour flasher ou la description du connecteur jp2, je vois une inversion entre VCC et RST mais je sais pas lequel est correct.
    encore bravo.

    Michael

  8. Super travail, j’adore lire des article qui vont aussi profond dans la technique.
    J’ai une question un peu loin du sujet mais sur ton capteur, je vois un emplacement GND, DI+
    Quelqu’un serait il a quoi correspond le DI+? Je cherche à déporter l’ouverture pour tester sur ma boite aux lettres. Je n’ose pas faire un court circuit pour tester…
    J’ai vu que lunarok l’utilise pour un interrupteur mais bon.

  9. Super article.
    J’ai vraiment hate de recevoir ma Zigate.

    Mais n’aurais-tu pas inversé sur JP2 les sorties 4 et 5 (5 est Reset mais branché sur vcc).

    En tout cas bravo pour tes articles.

    1. Merci à toi… C’est possible mais l’erreur c’est surtout qu’il faut faire un pull down et pas un pullup :/ désolé…

      1. Bonjour. Super article qui donne plein d’aspiration. Par contre du coup. Le schéma est il a jour ou fautil monter le sw2 sur la pin 5 en pull down sur gnd?

        Merci pour ton retour.

  10. Grace à ton article j’ai réussi à transformer mon bouton Xiaomi en sniffer Zigbee.
    Le seul problème que j’ai eu (a part les soudures sur le bouton) était pour démarrer le sniffer :
    Impossible de se connecter au device dans Ubiqua.

    Par défaut le Flow control était à « RequestToSend ».
    Des que je l’ai passé à « None » plus de problèmes.

    Encore une fois merci.

  11. Wireshark:
    Je viens de faire un peu de code et je parviens à récupérer le traffic et à le transmettre à wireshark (sans Ubiqua). C’est alpha (par exemple je n’ai pas tous les ACK MAC) mais je dois avoir 98% des messages.

    1. Si c’était une version alpha, maintenant c’est une version alpha plus. Directement du capteur a wireshark sans manipulation intermediare et visualisation en temps réel du traffic.

      1. Bonjour,

        Je cherche à faire la même chose…
        J’ai réussi à compiler un exemple de NXP qui envoie du debug sur le port série, donc je sais que la prog se passe bien (au moins dans certains cas).
        Par contre j’ai trouvé deux binaires de sniffer (dont un qui se termine par _HP), lequel est le bon?
        Une fois programmé, le module envoie-t-il spontanément des données sur le port série ou faut-il lui envoyer une commande? Dans le cas où aucune communication Zigbee n’a lieu? Dans le cas où une lampe Tradfri fraîchement déballée est mise sous tension (à environ 15cm) ?
        KiwiHC16, comment as-tu fait le lien avec Wireshark?
        Merci d’avance,
        Jérôme.

        1. Bonjour Jérôme,
          Si tu utilises un module Xiaomi, ils sont bloqués en lecture. Tu peux écrire mais pas lire pour vérifier, d’où erreur pendant la programmation, car il cherche à lire pour vérification. Perso, la programmation marche à tous les coups. Mais pour avancer j’ai investi dans des module NXP JN5168.
          Pour sniffer, il faut le bin JennicSniffer que tu trouveras dans les sdk NXP (ex: JN-SW-4170). Ensuite tu programmes le JN516x, tu le connectes en USB sur un PC sur lequel tu installes Ubiqua.
          Pour wireshark c’est bien plus compliqué, il faut faire un bin specifique (J’ai modifié le AN1172_CustomerModuleEvalTool ), faire un script python, preconfigurer le bin avec un terminal serie et lancer le tout. Il faut que je prenne un peu de temps pour faire une doc… mais le temps manque…

          1. Salut,

            T’es un boss KiwiHC16!
            Désolé, j’ai mis du temps à répondre, mais j’étais en train de faire une réponse exprimant ma frustration et juste avant de l’envoyer, j’ai vu que tu avais partagé ton code! Way to go!

            Alors j’ai sauté dessus et j’ai un peu bossé (anecdotiquement j’ai perdu pas mal de temps à cause d’un coupleur série CH340G donc le driver n’est pas parfait sous macOS), notamment pour faire marcher les programmeurs avec les puces JN5169. Beyond Studio arrive bien à flasher le JN5169, mais tous les autres (versions graphiques ou en ligne de commande, sont prévues pour des puces plus anciennes et ne fonctionnent tout simplement pas avec le JN5169). Donc avec le programmeur, ça fonctionne bien sous Linux et macOS (jusqu’à 1MBaud sur les deux plateformes!), comme vous pourrez le constater ici: https://github.com/Jerome-PS/JennicModuleProgrammer

            Ensuite, je me suis attaqué au Firmware et à l’interface avec Wireshark. J’ai crée un plugin pour Wireshark qui permet d’interagir avec le sniffer (notamment pour changer le canal d’écoute). Sous Windows, il suffit d’appeler le script Python avec les bons paramètres, sous macOS et Linux, il suffit de trois commandes shell qui se courent après… Voyez ici pour profiter de l’outil: https://github.com/Jerome-PS/JN516xSniffer

            Au fait, KiwiHC16, je ne reçois rien de ma Tradfri sur le canal 20, mais sur le canal 25 j’ai quelques trames…

            C’est tout ce que je voulais partager. Par contre si quelqu’un peut m’envoyer un enregistrement Wireshark d’un appariement Tradfri avec une télécommande et aussi des commandes d’allumage, d’extinction et, rêvons, luminosité et température de couleur, je lui en serais reconnaissant.

          2. Salut Jérôme,
            Super ces deux projets !
            Je suis surtout intéressé par la partie Wireshark car je l’avais dans ma liste des trucs à faire. Il faut que je le teste, surtout la partie choix de channel. Je vais essayer courant de semaine prochaine.
            C’est le contrôleur qui choisi le channel au démarrage en fonction des conditions radio. Ensuite quand un équipe s’appaire avec le contrôler il se met sur le channel du contrôleur. J’ai lu à plusieurs reprise que le contrôleur peut faire changer le réseau de channel mais je ne l’ai jamais vu.

            Pour les traces, j’en est en stock et peux en faire d’autres. Comment souhaites tu que je te les envoies ?

            Je viens aussi de publier un premier plugin « Abeille » pour connecter la ZiGate sur Jeedom: https://github.com/KiwiHC16/Abeille

          3. Salut KiwiHC16,

            Je t’ai envoyé un message sur le forum Jeedom, ça ne t’a pas donné mon adresse mail?

            Jérôme.

          4. Salut les gars. Un tout grand merci pour le taf !
            J’essayais d’utiliser votre taf sur la zigate mais sans succès. J’ai flashé le sniffer fourni par le site. J’ai tenté celui de Jerôme mais visiblement ça n’est pas le même hardware.
            J’ai essayé tant avec Butineuse que le Sniffer de Jérôme, rien n’apparaît. Vous avez déjà testé avec ?
            Je travaille sous ubuntu 17.10. J’ai bien suivi les explications, wireshark démarre en mode écoute mais rien n’apparaît. J’ai mis le canal 11 car il me semble que c’est celui de Xiaomi(je teste avec les boutons et sonde température). Mon but est d’associer à terme un autre device fourni par une startup.

          5. Jerome utilise un JN5169 venant d’un capteur Xiaomi.
            Moi un JN5168 acheté spécifiquement, la zigate est basée sur le même composant.
            Je ne me souviens plus trop mais ma premiere version était sur JN5169, puis j’ai migré sur JN5168. Puis Jerome a fait une surcoupe en compilant JN5169. Et ma dernière version Butineuse est une reprise de Jerome sur JN5168 avec des motifs. Perso compile sur windows du firmware alors que Jerome le fais sous OSX si j ai bien compris. Ma premiere version marchait avec wireshark sous windows et Butineuse avec Wireshark sous debian.

          6. Merci pour l’aide. J’ai repris le bin de ton github et je l’ai flashé avec le programme de Jérôme. Ca marche nickel now. Merci pour les conseils.

          7. Bon j’arrive à sniffer le channel 11 pour le Xiaomi et le 25 pour les Hue. Par contre, le device que je soupçonne être zigbee non. J’ai testé les channel 11 à 26 mais rien n’y fait. Si jamais y a un expert des circuits électroniques je suis preneur car j’ai beau regarder je n’arrive pas à identifier clairement un module zigbee ou autre module de communication(rf 433 ?)

  12. bonjour
    petit question aurais tu testé les points alternatif TP1 tp2..?
    si oui aurais tu la correspondance avec le port de prog?
    car ceci permet de faire des soudures plus facilement quand on a pas le matos pour souder tres petit
    Merci

  13. Hello!
    I just bought the XiaoMi Sensor and follow your instructions, but I still fail connect BeyondStudio to the JN5169. I mainly have tow confusions as follow.
    1 are R1 and R2 75 ohms in your Schematic ?
    2 What is the correct order to push botton SW1 and SW2? Is push SW1 down then push SW2 down or vice versa? and did I need to keep SW1 and SW2 down when I connect ?
    3 is correct to pull up the pin 5 in JP2 (5 is reset but connected to vcc) ?

    1. I did very simple. TX to RX and RX to TX. No reset. And D0 directly to ground while plugging USB to program and not connected to ground to boot.
      I used one of these: https://www.amazon.fr/dp/B01MR4KW6H/ref=asc_df_B01MR4KW6H47416266/?tag=googshopfr-21&creative=22698&creativeASIN=B01MR4KW6H&linkCode=df0&hvdev=c&hvnetw=g&hvqmt=

      and one of those: https://www.amazon.fr/40pcs-20cm-Câbles-pour-BreadBoard/dp/B00ENSOI5I/ref=pd_sim_60_1?_encoding=UTF8&psc=1&refRID=10CB5NCC2RC4FDP2B628
      soldiered directly to the Xiaomi sensor.

      1. Tu veux dire que tu as réalisé ces montages là ?
        Schéma visible sur : https://ibb.co/eCWig6

        Est-il nécessaire d’alimenter le capteur ? J’imagine que oui s’il n’a pas la pile bouton (ce qui est le cas je suppose quand il est configuré en usine), mais avec la pile bouton je pense qu’il ne faut pas l’alimenter.

  14. Hi great work here, and congratulations on ZiGate! Please excuse me using English. My French is not so good.
    I have managed to get the Xiaomi Human Body Sensor working with an XBee Pro S2B (example payload 18 26 0A 00 00 18 01), but, after approximately 2 hours of inactivity, it loses connection, and I have to reset it. Would you be able to offer me any advice on how to overcome this?

  15. Bonjour,
    C’est en cherchant quel objet fait office de passerel dans la solution Xiaomi que je suis tombé ici.
    Malheureusement je n’ai pas trouvé la réponse..
    Ma maison est tout en long, et internet arrive à une extrémité.
    J’ai installé ma gateway a cette extrémité, mais très vite mes capteurs de températures sot offline..
    Je pensais pouvoir étendre le maillage avec une ou 2 prise version zigbee, mais cela ne semble pas fonctionner. Y a-t-il d’autres appareils qui pourrait faire cela ? (FFD)
    Les capteurs de température et interrupteurs sont bien RFD ?

    1. Je pense que c’était une réponse à mon message ? Je la voie tard.
      En fait, cela semble fonctionner à présent. Certains capteurs sont un peu plus instables que d’autres et sont régulièrement offline quand même… Mais rien à voir avec la distance.
      J’ai installé une seconde gateway le plus loin possible de la première sans changer de réseaux pour être sûr d’améliorer la réception de l’ensemble.
      J’ai pris également plusieurs prises en plus, si cela améliore le maillage.
      En plus, pour ce tarif, elles sont extraordinaire !! Calcul de consommation en plus de la commande domotique, à 10€ ! Vraiment top.
      J’ai lu plusieurs fois que l’on ne doit pas dépasser les 2500 w. Je n’ai que des radiateurs de 2000w sauf un que je compte passer en 2 fois 1500 w du coup.

  16. I am banging by head off the wall for the past few days.
    I flashed the sensor with sniffer firmware, but Ubiqua software is refusing to connect to the device with error: « Ubiqua was unable to start the sniffer, it might be in use by another application or it has been removed from the computer. »
    I used « NXP JN51XX » Application with Flow control of « None » and Baud rates from 9600 to 1000000.

    Still…unable to connect.
    Do you have any idea, what else could i try?

      1. The problem is, that i do not see any raw traffic on ttyUSB0.
        I should see something if i connect with putty on serial port directly, right?

        1. No, there is no spontaneous output in either case.
          If you use the linked GitHub project, you can send STA\n (\n is line feed) to get some answer.
          You can also uncomment the #define XIAOMI_SMART_BUTTON line and the blue LED will blink at 1Hz, which will show you that you flashed the module properly.
          Be aware that the above schematic is wrong and that both the reset and the boot loader mode selection are active low.

          Cheers,

          1. wohoo, it works! Thank you soo much!

            It actually worked according to directions on Github.
            I did not use correct baudrate of 38400 and correct channel.

            Now off to decrypting Ikea tradfri payloads!

            Thank you, and keep up the excellent work.

  17. Bonjour,

    Je suis un peu surpris des 2 développements similaires pour la partie sniffer.
    Jérôme et KiwiHC16, envisagez vous merger vos projets ?
    Je vois que Jérôme a proposé un PR à la source de son fork, ce qui est une très bonne chose, j’aurais donc tendance pour cette raison à utiliser la version de Jérôme. (en espérant qu’elle fonctionne avec le JN5168 de la zigate)

    Bonne continuation.

  18. Rien de surprenant. J’ai fait une premiere version, que Jerome a repris pour amélioration, J’ai testé et fait évoluer ma version. Lui sur JN5169 et moi sur JN5168. Lui sous OSX/Linux moi sous Windows. Et on partage nos avancées, nos difficultés. C’est la joie de l’open source. Pour l ‘instant ce n’est pas un sniffer pret à l’emploi, il faut mettre les mains dans le cambouis.
    Jerome est parti d’un composant Xiaomi (Facile a avoir, pas cher, un peu de soudure,…)
    Moi je suis parti d’un JN5168 pour d’autres raisons (Meme montage que Zigate, Composant idenpendant sans HW additionnel,…)
    Tout est dispo, faites vos courses ….

  19. bonjour,
    super article !
    en ce qui me concerne, j’utilise wireshark pour décoder mes trames avec la clef freescale KW24D512. j’ai téléchargé sur NXP le logiciel Kinetis analyser et ça marche nickel
    une vidéo sur youtube explique comment récuperer la clef apres appairage

    [youtube=http://www.youtube.com/watch?v=4vG4CVNAm_A&w=840&h=503]
    ce logiciel est un vrai couteau suisse mais il y’a aussi scapy
    https://github.com/Cognosec/SecBee/blob/master/Scapy/layers/zigbee.py

  20. Bonjour
    Je fais des essaie de sniffage de zigbee notemment mon materiel profalux.
    J’ai flashé ma zigate avec NXP et le binaire JennicSniffer présent dans le SDK.
    Ensuite je paramètre Ubiqua sur mon port com 12 et une JN51XX
    Baud rate 1000000
    Data byte 8
    Stop none
    parity none
    flow control none
    Lorsque j’appuie sur le bouton pour démarrer le sniffage
    il écrit au bout de 3 seconde no packet capture et passe rouge.
    Je ne vois pas d’où viens mon problème
    où ai-je fais une erreur?
    merci de ton aide

  21. Hi,
    I use the Sniffer and also ZigGate image as well and try to catch the packet.
    What is the best way to decrypted messages? I would like to pass only temperature value through UART0 or UART1.

    Thank you very much

  22. Je cherchais à sniffer du zigbee avec wireshark sous windows 10, et avec un dongle zigate.
    Après quelques recherches et tatonnements, je suis arrivé à mes fins en suivant cette conversation.

    Je résume mon fonctionnement :

    Le nécessaire est dispo à https://github.com/KiwiHC16/Butineuse

    – le firmware à charger sur la zigate : debug/JN516xSniffer_JN5168.bin
    – le script python qui lance wireshark : wireshark_plugin/Sniff.py
    – le script lua à mettre dans le même répertoire que Sniff.py : wireshark_plugin/zb.lua

    Et une doc est dispo à https://github.com/Jerome-PS/JN516xSniffer

    Merci à KiwiHC16 et Jerom-PS pour le partage de code et de doc.

    Je rencontre juste un petit inconvénient, mais qui est probablement ‘normal’ :
    si j’arrete la capture dans wireshark, le ‘pipe’ entre Sniff.py et wireshark se brise, et ne peut plus se recréer.

    Pour refaire une nouvelle capture, il est alors nécessaire de fermer wireskark et la fenetre de commande de lancement de Sniff.py, et de recommencer la manip.

  23. Salut vmath54,
    Perso j utilise 3 méthodes:
    – stop sniff, select interface, start again (dans 95%) cela fonctionne.
    – laissez-moi le sniff faire son boulot et analyse sous WS en même temps.
    – kill sniff et relance.
    KiwiHC16
    PS: cool de voir que le boulot fait est réutilisé !

  24. Salut KiwiHC16,

    Je comprends mieux le fonctionnement de Sniff.py, lié à zb.lua.
    Il faut jouer avec le ZB-stop et ZB-start pour arreter/relancer la capture, et ne pas utiliser les commandes classiques de whireshark.
    Mais je n’arrive pas à vider le buffer de wireshark par cette manip.
    Ce n’est pas essentiel, mais ca change les habitudes.
    C’est le pipe entre Sniff.py et wireshark qui se rompt lorsqu’on arrete une capture wireshark de facon traditionnelle.

    Est-ce que ca ne serait pas plus cool d’envoyer les trames zigbee sur l’interface loopback en udp, comme dans le projet https://github.com/Codemonkey1973/JN51xx-802.15.4-Sniffer-Server ?
    Ceci permettrait d’utiliser de manière basique wireshark.

    Ce n’est pas une critique de votre dev à tous les deux ; c’est super sympa, ca me plait bien.
    Ce blog n’est peut-être pas le meilleurs endroit pour poser cette question…

    Pour revenir sur la mise en oeuvre sur windows 10, dans le cas ou d’autres personnes soient intéressées :
    En plus de ce que j’ai indiqué dans mon post précédent (28/07/19), il faut, coté python, installer les 2 packages pyserial et pypiwin32

  25. Salut vmath54,

    Effectivement il faut piloter le JN5168 pour le mettre en mode sniff ou l’arrêté (ZB-stop et ZB-start). De ce fait on n’utilise pas les boutons classiques de WS (WS demarre automatiquement avec Sniff). Effectivement ca change les habitudes. Je l’utilise comme cela depuis plus d’un an et il sert tous mes besoins.

    Pour arriver à ce niveau cela n’a pas été une partie de plaisir. Maintenant que cela fonctionne mon focus est sur d’autres sujets donc je ne prevois pas de passer plus de temps sur ce sujet.

    « je n’arrive pas à vider le buffer de wireshark » dans ce cas kill Sniff et reset le JN5168. Relance le Sniff, et start la capture avec le menu ZB-Start.

  26. Merci KiwiHC16 pour la réponse.
    Le fonctionnement actuel me va bien ; ca change du fonctionnement standard de WS, mais rien de bloquant.
    C’est intéressant de pouvoir suivre les échanges zigbee ; ca m’aide dans la compréhension du fonctionnement.
    Super, ce développement !

  27. Bonjour,

    J’ai une erreur lors de l’effacement de la mémoire dans le processus de programmation du sniffer sur un sensor window/door Xiaomi.
    Le device est bien reconnu, mais cette erreur empêche la programmation du sniffer.
    J’ai essayé avec ou sans la ligne DO1 à la masse.

    Quelqu’un a-t-il déjà eu ce problème ?

  28. L’erreur exacte est : « Error programming flash on COM3 Communication failure erasing flash »

    Par ailleurs, j’alimente la carte du device sensor en 3,3 V par le module USB/TTL (donc pas de pile sur le device sensor).
    Ne faudrait-il pas 5V ?

  29. Bonjour Jérome,
    Je me permet de déterrer ce vieux poste pour savoir si au delà de flasher les capteurs avec un firmware de sniff, tu as envisagé (ou si tu as entendu parler de quelqu’un qui l’aurait fait) de flasher les devices xiaomi avec un firmware custom ?
    Je pense en particulier aux interrupteurs qu’il serait très interessant de reprogrammer avec un firmware qui utilise les clusters normalisés et qui supporte le binding direct avec un luminaire (ou un groupe)

  30. Habe gerade mit Interesse den Artikel gelesen. Sehr gut!
    Ich bin auf der Suche den Ember Coordinator in ioBroker zu bekommen. Ich habe einen Nortek Stick, der sowohl ZigBee (Ember 35x)als auch Z-Wave kann.
    Den Schlüssel des Mi Gateway kann man anzeigen lassen.

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.