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.
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.
Approchez votre thermomètre (en fonctionnement) à proximité de votre PC afin de garantir une bonne connectivité en Bluetooth. Cliquez ensuite sur « Connect »
Il faut sélectionner l’équipement qui porte le nom LYWSD03MMC et cliquer sur « Associer »
Une fois l’équipement passé en statut « Connected » il faut cliquer sur Do Activation.
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.
Le site vous présente le nom du Binaire qui va être installé sur le thermomètre, dans notre exemple la version 3.8.
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.
Il se peut au moment de la reconnexion de tomber sur quelques messages d’erreurs. Mais le thermomètre finit par se connecter correctement
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
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)
Afin de valider ce paramétrage il faut cliquer sur « Send Config »
Je modifie ensuite les paramètres de confort avec des valeurs plus cohérentes. Et il faut cliquer sur « Set comfort parameters ».
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
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 :
sudo nano lywsd03.py
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 :
sudo reboot -f
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 »
Une fenêtre supplémentaire apparait, je vous conseil de laisser le champ sur « Tous ».
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_[…] » :
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 :
Adaptez les champs ci-dessus à vos besoin. Cliquez ensuite sur Paramètres :
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:
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.
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.
Par l’auteur/autrice de la publication
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 🙂