Thermomètre Xiaomi LYWSD03MMC : comment l’intégrer dans Jeedom ?

9 minutes de lecture

 

Dès l’instant où on se lance dans la domotique il y a un paramètre important à prendre en compte : le prix ! C’est en premier lieu ce qui m’a décidé de choisir ce thermomètre connecté Xiaomi LYWSD03MMC à bas prix. On le trouve actuellement à moins de 6€ (chez AliExpress), avec une connexion Bluetooth « Low Energy » (faible consommation) et une pile CR3202 incluse. En revanche, ma surprise a été de courte durée, une fois l’équipement reçu, quand il a fallu commencer à faire des relevés de température et d’humidité !

Au début tout semble OK, le thermomètre s’intègre bien avec le plugin BLEA et ma clé USB Bluetooth, il est détecté et semble bien se synchroniser avec Jeedom. Mais passé quelques heures, sans voir bouger la température ni l’humidité dans Jeedom, je me dit qu’il doit y avoir un souci. En lisant de nombreux articles, je me rends compte que nous sommes nombreux à connaitre ces péripéties et des solutions de contournement se proposent à nous.

 

Quelles solutions pour résoudre ce problème de rafraichissement ?

Il existe (d’après mes recherches) 3 solutions pour corriger ce problème :

  • L’utilisation d’Alexa / Xiaomi Home / Passerelle Xiaomi : Depuis les dernières MAJ de l’application Jeedom Alexa SmartHome, il n’est plus nécessaire d’effectuer des modification sur les thermomètres. Il faut en revanche être équipé d’Alexa, et d’une passerelle Xiaomi, ce qui n’est pas mon cas. Je ne présenterai pas cette solution ici, en revanche vous trouverez plus de détails ici.
  • L’utilisation de la BindKey du thermomètre : Cette solution évite de devoir flashé le thermomètre, elle est cependant assez technique et à le défaut de demeurer dépendante de la connexion Internet. Je ne détaillerai pas non plus cette solution, qui possède une explication assez clair sur ce blog.
  • Le flashage du thermomètre : Cette solution est celle qui s’adapte le mieux à mon installation, étant donné ma connectivité a Internet exclusivement 4G et son instabilité, elle me permet d’avoir des remontées fiables ! Elle nécessite le plugin BLEA et un PC équipé d’une carte ou d’une clé Bluetooth.

Sur son blog domotique (que je vous recommande vraiment), Sigalou, a fait une étude comparative des ces trois solutions, ainsi qu’un guide très complet sur la technique de flashage que je vous présente ci dessous.

Comment flasher le thermomètre Xiaomi LYWSD03MMC ?

L’application et l’utilisation de ces modifications entraine la perte de la garantie de l’équipement. Je ne peux en aucun cas vous assurer que votre thermomètre continuera de fonctionner après ces modifications. Une fois ces informations en votre connaissance, et si vous désirez encore flasher votre thermomètre, voici le guide détaillé :

Activer le Bluetooth sur votre PC

Si vous avez déjà la pleine maitrise de votre appareil, vous pouvez largement passer cette étape. Pour les autres, tout se passe dans Démarrer -> Paramètres Windows -> Périphériques -> Bluetooth -> Activer.

  • Save

Dans le cadre où vous devez installer une nouvelle clé ou une nouvelle carte, je n’ai pas de guide unique, referrez-vous à la documentation de votre équipement (RTFM !).

Connexion et flashage du thermomètre

Pour commencer il faut se rendre sur le site de PVVX, qui a fait un boulot énorme sur ce projet : https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html

Je vous conseil grandement d’utiliser le navigateur Google Chrome. C’est le navigateur qui a été, à mes yeux, le plus stable pour cette opération.

  • Save

Approchez votre thermomètre (en fonctionnement) à proximité de votre PC afin de garantir une bonne connectivité en Bluetooth. Cliquez ensuite sur « Connect »

  • Save

Il faut sélectionner l’équipement qui porte le nom LYWSD03MMC et cliquer sur « Associer »

  • Save

Une fois l’équipement passé en statut « Connected » il faut cliquer sur Do Activation.

  • Save

L’écran laisse apparaitre de nouveaux paramètres. Le Mi Token de votre équipement, la Bind Key (qui vous permet l’utilisation d’une autre technique de contournement de la problématique présentée ci dessus). Ce qui nous intéresse c’est l’upgrade avec le Custom Firmware.

  • Save

Le site vous présente le nom du Binaire qui va être installé sur le thermomètre, dans notre exemple la version 3.8.

  • Save

Une fois l’upgrade terminée, l’équipement va se déconnecter tout seul.

Paramétrage du Xiaomi LYWSD03MMC flashé

Le thermomètre est désormais dans une version customisée. Il faut se connecter a nouveau sur le thermomètre qui a changé de nom.

  • Save

Il se peut au moment de la reconnexion de tomber sur quelques messages d’erreurs. Mais le thermomètre finit par se connecter correctement

  • Save

Les choses sérieuses commencent désormais : le paramétrage du thermomètre. Je vous présente ici les paramètres que j’utilise pour mon installation, ils ne sont en aucun cas une référence, mais en tout cas je ne rencontre aucune erreurs avec ces réglages. Si vous souhaitez des informations supplémentaires ce site est riche d’informations : https://github.com/atc1441/ATC_MiThermometer

  • Save

Dans la première partie du paramétrage j’applique les paramètres suivants :

  • Je laisse coché le thermomètre en « LowPower Mode »
  • Je change l’Advertising Type en ATC441 (qui permet une diffusion des informations de température et d’humidité de manière non crypté)
  • Je change l’Advertising Interval à 5000ms au lieu de 2500ms, ce qui permet d’économiser un peu plus la batterie (cf schéma ci-dessous)

  • Save

Afin de valider ce paramétrage il faut cliquer sur « Send Config »

  • Save

Je modifie ensuite les paramètres de confort avec des valeurs plus cohérentes. Et il faut cliquer sur « Set comfort parameters ».

  • Save

Le flashage du thermomètre est maintenant terminée sur ce site. On peut le déconnecter.

Ajout du thermomètre Xiaomi LYWSD03MMC sur Jeedom

Notre petit thermomètre flashé est désormais prêt a être intégré dans Jeedom !

Installation et paramétrage du plugin BLEA

Il faut pour commencer l’ajout, télécharger et configurer l’application Bluetooth Advertisement disponible gratuitement. Afin de découvrir plus facilement le thermomètre, je vous conseil d’activer le paramètre suivant : Autoriser l’inclusion de devices inconnus

  • Save

Modification du fichier Python dédié au Xiaomi LYWSD03MMC

Pour se faire il faut se connecter avec un utilisateur « sudoer » en SSH sur votre serveur à l’aide d’un outil comme Putty.

Tapez ensuite la commande suivante afin de se rendre à l’emplacement du fichier à modifier :

cd /var/www/html/plugins/blea/resources/blead/devices/

Nous allons effectuer une « copie » du fichier original grâce à la commande suivante :

sudo mv lywsd03.py lywsd03.py.old

Et éditer le nouveau fichier avec la commande suivante :

Une fenêtre d’édition de texte apparait devant vous, copier/coller le code suivant :

# coding: utf-8
from bluepy import btle
import time
import logging
import globals
import struct
from multiconnect import Connector
from notification import Notification

class Lywsd03():
        def __init__(self):
                self.name = 'lywsd03'
                self.ignoreRepeat = False

        def isvalid(self,name,manuf='',data='',mac=''):
                logging.debug('LYWSD03------isvalid data=%s, mac=%s, name=%s, manuf=%s' % (data, mac, name, manuf))
                if name.lower() in [self.name]:
                        return True
                if data.lower().startswith("1a18") and (mac.lower().startswith("a4:c1:38")):
                        #broadcasted advertising data
                        return True

        def parse(self,data,mac,name,manuf):
                logging.info('LYWSD03------adv data=%s, mac=%s, name=%s, manuf=%s' % (data, mac, name, manuf))
                action={}
                action['present'] = 1

                bd = bytes.fromhex(data)

                (temp,) = struct.unpack('>H', bd[8:10])


                if temp > 60000 :
                        temp = 0 - ( 65530 - temp )

                temp = temp / 10
                humi =  bd[10]
                batt = bd[11]

                action["temperature"] = temp
                action["moisture"] = humi
                action["battery"] = batt

                logging.info('LYWSD03------mac=%s, temp=%s, humi=%s, batt=%s' % (mac, temp,humi,batt))

                return action

        def read(self,mac):
                result={}
                try:
                        conn = Connector(mac)
                        conn.connect()
                        if not conn.isconnected:
                                conn.connect()
                                if not conn.isconnected:
                                        return
                        batt = bytearray(conn.readCharacteristic('0x3a'))
                        battery = batt[0]
                        notification = Notification(conn,Lywsd03)
                        notification.subscribe(10)
                        result['battery'] = battery
                        result['id'] = mac
                        logging.debug('LYWSD03------'+str(result))
                        return result
                except Exception as e:
                        logging.error(str(e))
                return result

        def handlenotification(self,conn,handle,data,action={}):
                result={}
                if hex(handle) == '0x36':
                        received = bytearray(data)
                        temperature = float(received[1] * 256 + received[0]) / 100
                        moisture = received[2]
                        result['moisture'] = moisture
                        result['temperature'] = temperature
                        result['id'] = conn.mac
                        result['source'] = globals.daemonname
                        globals.JEEDOM_COM.add_changes('devices::'+conn.mac,result)

globals.COMPATIBILITY.append(Lywsd03)

Afin de quitter l’interface d’édition du fichier et d’effectuer une sauvegarde, faites Ctrl + X puis tapez O (ou Y si votre Linux est en anglais) puis Entrer.

Redémarrez ensuite votre serveur avec la commande :

Attention ! la modification de ce fichier Python devra être effectué à chaque upgrade du plugin BLEA !

Inclusion du thermomètre dans Jeedom avec BLEA

Rendez-vous dans Plugins -> Protocole Domotique -> Bluetooth Advertissement. Cliquez simplement sur « Lancer Scan »

  • Save

Une fenêtre supplémentaire apparait, je vous conseil de laisser le champ sur « Tous ».

  • Save

Il risque d’il y avoir de nombreux équipements qui s’ajoutent à l’interface. Ceux qui apparaissent avec le simple logo Bluetooth Bleu sont des devices « non reconnus » par BLEA. Notre équipement devrait apparaitre comme un équipement reconnu avec un nom commençant par « BLE ATC_[…] » :

  • Save

Vous pouvez supprimez en un clic les devices Blea Inconnus en cliquant sur la poubelle.

Cliquez sur le thermomètre afin de pouvoir éditer ses paramètres :

  • Save

Adaptez les champs ci-dessus à vos besoin. Cliquez ensuite sur Paramètres :

  • Save

Pensez à décocher l’option « Refresh Forcé » qui permet d’économiser de l’énergie en interrogeant pas le thermomètre mais en laissant le thermomètre avertir lui-même Jeedom des changements de température et d’humidité. Passez ensuite à l’onglet Commandes:

  • Save

Il faut simplement historiser les données de température et d’humidité, permettant ainsi un suivi du refresh du thermomètre.

Pour conclure…

Après plusieurs jours d’utilisation, l’historisation va pouvoir démontrer le bon fonctionnement des thermomètres, il n’y plus de problèmes de refresh désormais.

  • Save

Pour finir, n’hésitez pas à partager cet article autour de vous, d’utilisez les boutons de partage sociaux, et de commander vos articles en utilisant mes liens sponsorisés : ça ne vous coute rien de plus mais ça permet de gagner quelques euros pour faire vivre le site. Merci à tous !

4 commentaires

Bonjour,
Merci pour ce tutoriel que j’ai suivi avec précision. Tout est ok pour arriver à ajouter les thermomètres. En revanche, aucune données ne remonte… Tout est à 0. Des pistes ?

Bonjour,
Merci pour votre commentaire, êtes-vous sûr du flashing ?
Auriez-vous des informations sur votre Jeedom, lors d’une de mes précédente installation j’étais en Debian 11, et les valeurs ne remontaient effectivement pas. Je suis passé sur Debian 10, les valeurs remontent.

Bonjour,
Oui je suis sûr du flashing. La version est Debian 10.13
J’ai refait il y a quelques jours, j’ai une température qui remonte à l’ajout, mais qui ne se met jamais à jour.

Bonjour,
Merci pour ce tuto sans lequel j’aurais sûrement abandonné…
Voici quelques infos qui m’ont servi :
– Dans la version actuelle de Jeedom, il y a un éditeur de fichiers très pratique : Menu réglages/>OS/DB
– Après avoir modifié le fichier, j’ai dû relancer les dépendances pour inclure les sondes
– Après avoir inclus les sondes, j’ai dû relancer le démon pour avoir les remontées d’infos
J’espère que ça aidera d’autres utilisateurs 🙂

Laisser un commentaire