Bluetooth : Xiaomi température/humidité

Salut @AlexTrovato,

As-tu trouvé de nouveaux éléments ?
Maintenant que j’ai une instance Gladys qui tourne je peux faire des tests avec le module bluetooth et mes LYWSD03MMC.

Pour le moment ils sont détectés, mais sans aucunes données reçues.

Salut, non j’ai pas eu le temps de chercher. Je m’y remet dès que j’ai du temps.

Que faut il chercher ? Si j’ai un peu de temps, je voudrais essayer sachant que j’ai un Gladys de dev et les fameux capteurs de température en question.

Tu peux essayer de m’expliquer en MP, ou ici, ou en visio en soit :sweat_smile:

En gros, il faut trouver le service et characteristic sur le device qui permet de récupérer les données qui l’on souhaite.
Sur raspberry, il est question de gattool en ligne de commande. Une fois qu’on arrive à récupérer les informations par la, il faudra alors le coder en NodeJS, mais ma priorité est d’abord de trouver les bons services / characteristics à lire sur le device.

Avec tous ces mots clés, je pense que Google te donnera plein d’exemples :wink:

1 « J'aime »

J’ai trouvé un projet intéressant qui pourrait même nous aider sur certaines technologies.

@AlexTrovato avais tu vu ce qu’ils proposent ?

C’est une sorte de broker qui permet de se connecter à plusieurs équipements domotique (433mhz, Bluetooth, infrarouge, Lora, etc) et retransmet le tout via MQTT.

Salut Alex,
tu avais trouvé cet article (en Français) qui décrit ce que tu sembles chercher pour le modèle Xiaomi LYWSD03MMC.
Bonne (re)lecture

2 « J'aime »

Et l’article décrit toutes les étapes pas à pas, super trouvaille !

J’étais en train de suivre la démarche depuis un autre blog, mais j’ai eu des erreurs sur les connexions bluetooth… Tant mieux que ce soit déjà écrit sur ton lien :slight_smile:

Après un peu plus de recherche, il existe deux possiblités de lire les données des capteurs LYWSD03MMC.

  1. Se connecter en BLE et lire les données en connaissant les services et characteristics.

  2. Lire le message de broadcast envoyé toutes les minutes, qui ne nécessite pas d’établir une connexion. Évidemment, cette solution est ultra économe en énergie puisqu’elle n’interagit jamais directement avec le capteur.

Malheureusement, le point 2) nécessite de déchiffrer le message en récupérant la clé de déchiffrement au préalable.
Mais une solution alternative existe : flasher un firmware (via son téléphone) pour désactiver la partie chiffrement.
L’autre avantage, c’est que les services et characteristics sont déjà indiqués @AlexTrovato :

Je vais tester ce tuto et je vous fait un retour ici !

J’ai suivi le tuto et le flash fonctionne super bien (Chrome sous W10).

A noter quelques points cependant :

  • Aucun matériel nécessaire, autre qu’un PC ou téléphone
  • Il faut utiliser le navigateur Chrome sur PC ou Android
  • Ne fonctionne pas avec un autre navigateur (Firefox)
  • Une fois le firmware modifié, l’application Mi Home ne peut plus lire les données (les adresses de lecture sont différentes)
  • La procédure prends a peine 10 minutes en prenant son temps
  • On peut évidemment flasher l’ancien firmware si nécessaire

Deux questions me viennent à l’esprit, sachant que ce firmware custom permet de lire les données du capteur sans s’y connecter et donc économiser grandement la batterie :

  1. Est-il imaginable d’après toi @pierre-gilles et @AlexTrovato d’indiquer en prérequis pour ce capteur qu’il faut le flasher pour l’utiliser ?

  2. Peut-on proposer deux modes de fonctionnement ? Un avec une connexion régulière en BLE à l’appareil et l’autre en passif en lisant les données envoyées toutes les 1 minutes ?

Si c’est la seule façon de l’utiliser avec Gladys, oui il faut en parle à l’utilisateur ! (doc + UI)

La façon la plus simple, c’est certain.
La plus économe en énergie aussi (scan passif).

Je suis d’accord, dans ce cas le service doit afficher une ligne d’information avec un lien vers la doc pour les capteurs reconnus comme LYWSD03MMC.

1 « J'aime »

Hello @imilicent

Tu m’as mis sur la piste avec le flash des capteur avec le firmware ATC
J’ai trouvé une lib en python qui importe les données du capteur dans un MQTT

ça fonctionne plutôt bien mis a part la batterie avec de la grosse bidouille

il s’agit de la lib JsBergbau/MiTemperature2: Read the values of the Xiaomi Mi Bluetooth Temperature sensor 2 (github.com)


Intégrer cela dans gladys me parait compliqué
Cette solution me convient le temps de trouver quelque chose de mieux
Je verrais pour faire un tuto , en attendant j’ai commandé d’autre périphérique Xiaomi pour tester

1 « J'aime »

Ya plus qu’à transposer tout ça en nodejs :sweat_smile:

Par curiosité j’ai quand même rollback un capteur dans sa version du firmware original et étonament cela fonctionne aussi sans rien toucher :slight_smile:

J’ai cependant du désactiver le bluetooth sur Gladys pour que mon script derrière puisse scanner mes devices

2 « J'aime »

Hellooooooo

Je up le topic, on va bientôt rentrer en mode “hiver” et c’est là que Gladys fonctionne à fond pour moi ! ^^

Bref, quelqu’un travaille toujours sur la reconnaissance des capteurs bluetooth de Xiaomi ?

1 « J'aime »

Pas a ma connaissance @Hamtaro

Tu as le champ libre :wink:

Salut,
J’ai tenté le coup : j’ai flashé un capteur, installé la lib JsBergbau sur un pi zero ; j’arrive bien à récupérer les valeurs mais pas à les formatter correctement pour les envoyer via mqtt à gladys. Aurais-tu un tuyau sur la config correcte stp ?
Merci d’avance.

Au fait, petit retour d’expérience sur ces capteurs bluetooth.

Du fait de leur écran sûrement, la batterie tiens difficilement 1 an, contre a peine 10% utilisés sur mes capteurs Zigbee Xiaomi.

Je suis assez déçu de la durée de vie des batteries, ce qui génère pas mal de déchets pour le coup :pensive:

[Édit]
Sauf le capteur bluetooth que j’ai flashé qui me dit batterie faible depuis le jour du flash, mais qui tiens toujours !

1 « J'aime »

Bon je suis arrivé à bidouiller un nouveau script, j’arrive bien à récupérer les valeurs dans Gladys. :slight_smile:

1 « J'aime »