NB : Pour agrandir les images : clic droit / ouvrir l’image dans un nouvel onglet
/!\ ATTENTION /!\ en dessous de 30% de batterie affiché sur Jeedom il y a une diminution de la fiabilité des infos, vers 20% un affichage LOW BATTERIE est visible sur le LCD avec perte du Bluetooth
Quand on commence la domotique, on y rentre Ă tĂątons et nos choix sâorientent vite vers les produits les moins chers. Beaucoup dâentre nous commençons avec une marque pas (trop) chĂšre et avec une bonne rĂ©putation, Xiaomi !
Au vu du prix, beaucoup dâentre nous choisissent ce produit :
Mais comme nous commençons Ă ce moment lĂ dans la domotique, nous nâimaginons pas la galĂšre dans laquelle ce petit thermomĂštre beau et pas cher va nous mettre !
Ce qui est nécessaire :
- Un capteur
- Un Jeedom avec une antenne Bluetooth (local ou déporté)
- BLEA (plugin)
- JeeXplorer (plugin)
- Un Pc / Mobile avec Bluetooth
Il existe plusieurs sujets qui expliquent comment bidouiller BLEA avec les BindKey, le flasher et bidouiller ou encore ne rien toucher et utiliser une passerelle Xiaomi combiné à un skill Alexa et le remonter dans Jeedom grùce au plugin AlexaAPI/smarthome.
Rendons un hommage à tous ceux qui ont travaillé en les citant à travers ces sources :
https://github.com/atc1441/ATC_MiThermometer
http://atcnetz.blogspot.com/2020/09/custom-firmware-fur-das-4-xiaomi.html
https://github.com/pvvx/ATC_MiThermometer#bluetooth-advertising-formats
https://community.jeedom.com/t/refresh-xiaomi-lywsd03mmc/17216
https://community.jeedom.com/t/valeurs-non-remontees/44590/10
https://community.jeedom.com/t/refresh-xiaomi-lywsd03mmc/17216/77
Chaque méthode possÚde ses avantages et ses inconvénients :
AlexaAPI/smarthome :
Avantages :
- Aucune bidouille
- TrĂšs simple
- Pas de flashage
Inconvénients :
- NĂ©cessite une passerelle Bluetooth Xiaomi
- Avoir Alexa
- Trous dans les remontĂ©s (trĂšs rare mais embĂȘtant quand on pilote un chauffage)
- Pas CloudFree (DĂ©pendant dâinternet)
BLEA avec les BindKey :
Avantages :
- CloudFree (DĂ©pendant dâinternet)
- Pas de flashage
Inconvénients :
- Complexe (récupération @MAC, BindKey)
- Trous dans les remontĂ©s (trĂšs rare mais embĂȘtant quand on pilote un chauffage)
- Modification des BindKey si connexion sur MihHome/Autre
- Avoir une antenne Bluetooth
- Installation dâune dĂ©pendance de dĂ©cryptage de clĂ©s
BLEA avec flashage :
Avantages :
- Simple
- Capteur paramétrable
- Remonté sans trou (ou pas encore constaté à ce jour)
Inconvénients :
- Flashage
- Avoir une antenne Bluetooth
MĂȘme tout ceci nâest pas si compliquĂ©, voir trĂšs simple dans certains cas, ce nâest pas forcĂ©ment la vision quâon peut en avoir au dĂ©but. Jâai longtemps galĂ©rĂ©, tĂątonnĂ©, fait des erreurs et souvent je ne comprenais pas des choses pourtant trĂšs simples.
Câest pourquoi je rĂ©dige ce tuto concernant la derniĂšre solution, en vulgarisant au maximum pour le dĂ©butant de Jeedom.
Pourquoi choisir cette méthode ?
Je les ai toutes testĂ©es et je nâai jamais Ă©tĂ© rĂ©ellement satisfait, trop de trou dans la remontĂ©e, ou trop de contrainte de maintien. Finalement je suis restĂ© sur la plus stable Ă mon gout AlexaAPI/smarthome. Je nâavais Ă lâĂ©poque pas retenu le flashage car il nây avait pas de moyen de lâintĂ©grer Ă BLEA.
Le nouveau firmware a fini de me convaincre, car cette solution me semble la plus stable au niveau des remontĂ©s, meilleure optimisation de la batterie et les inconvĂ©nients peuvent ĂȘtre considĂ©rĂ©s comme des avantages.
Pour comparatif sur 1H avec mes sondes encore sous Alexa :
Alexa
BLEA flashé
Constat sans appel !
Rappel important :
Pour ceux qui voudraient comparer les diffĂ©rentes mĂ©thodes Ă plus longs termes, je vous rappelle que par dĂ©faut les historiques sont lissĂ©s/moyennĂ©s au-delĂ de 2h tous les jours au CRON d’archivage (environ 4h00) avec 1 valeur moyenne par heure :
Que lâon constate sous la forme de :
Donc il faudra changer ces paramĂštres pour un comparatif objectif.
- Le flashage
MĂȘme si lâancienne mĂ©thode de flashage proposĂ©e par Aaron Christophel Ă©tait dĂ©jĂ pas mal
https://atc1441.github.io/TelinkFlasher.html
https://github.com/atc1441/ATC_MiThermometer
http://atcnetz.blogspot.com/2020/09/custom-firmware-fur-das-4-xiaomi.html
Victor pvvx, lâa reprise et lâa amĂ©liorĂ©e !
https://github.com/pvvx/ATC_MiThermometer
https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html
En rĂ©sumĂ©, cette nouvelle mouture propose un chargement automatique du dernier firmware, une optimisation de la batterie, ainsi quâune multitude de paramĂ©trages supplĂ©mentaires (dont dĂ©clencheur dâaction physique sur la broche de test, bon faudra souder pour ça :p )
Rendez-vous sur la page https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html
Nota : Si vous avez un capteur déjà flashé au format T1441, il est possible que vous deviez soit passer par le flasher T1441 pour remettre le firmware Xiaomi, ou bien utiliser la page https://pvvx.github.io/ATC_MiThermometer/TelinkOTA.html et pour effectuer une mise a jour OTA de T1441 vers PVVX. Retourner ensuite sur le flasher PVVX pour modifier les paramÚtres.
- Activez le Bluetooth du Pc/Mobile avant de tenter de se connecter
- Saisissez « LYWSD03 » dans « BLE device name prefix filter »(cela permet de nâavoir que les thermomĂštres Xiaomi), « ATC » permettra mettre le filtre pour un thermomĂštre dĂ©jĂ flashĂ©
- Appuyez sur « Connecter » et sélectionnez votre thermomÚtre
- Attendez que la connexion soit Ă©tablie
- Appuyez sur « Do Activation »
- Attendez la récupération des clés Xiaomi
- Appuyez sur « Custom Firmware ver 2.x »
- Nota le bouton à coté est celui pour remettre la version Xiaomi de base
- Appuyez sur « Start Flashing »
- Le Flash prend plusieurs secondes voir plusieurs minutes
- Si cela ne se fait pas tout seul appuyez sur « Reconnect »
- Sauf besoin particulier je préconise de ne toucher que 2 valeurs :
- Advertising type est le format des trames, par dĂ©faut est sur « ALL » et envoi donc aussi des trames au format Xiaomi, qui est je pense la source de valeurs farfelue que vous verrez dans la derniĂšre vidĂ©o car jâai oubliĂ© de changer ce paramĂštre au dĂ©but.
On choisit donc « Atc1441 » car câest pour ce format quâa Ă©tĂ© dĂ©veloppĂ© le code quâon utilisera plus tard et 5000ms.
Choisir “Atc1441” au lieu de “ALL” permet d’Ă©viter d’avoir des tempĂ©ratures incohĂ©rente (ex : 3000°C), de plus garder le “ALL” va gĂącher de la batterie pour des info inutile et diviser par 4 la publication du format qui vous intĂ©resse.
- Advertising interval est la valeur de rafraichissement des trames, jâai choisi cette valeur car elle permet dâoptimiser la durĂ©e de vie de la batterie de 7 mois sans trop affecter la frĂ©quence de rafraĂźchissement.
- Une fois les paramÚtres choisis appuyez sur « Send Config »
Voilà le flashage est terminé !
- Modification du fichier lywsd03.py
Nota : il semblerait que le .Py original arrive Ă lire cette version flashĂ©e sans modification (Ă confirmer), la diffĂ©rence de code (parse) permettrait de remonter les donnĂ©es (notĂ© en entĂȘte) au moment de la vĂ©rification de la prĂ©sence sans Ă©tablir de connexion, un peu comme si vous recherchiez un rĂ©seau wifi et que derriĂšre le nom il y avait des infos en claires. Donc le code suivant peut ĂȘtre utile pour forcer indirectement le refresh sans bloquer la sonde.
Quand on est habituĂ© Ă Jeedom cela peu paraĂźtre bĂȘte, mais quand on dĂ©bute on se demande comment modifier un fichier ; Winscp ne fonctionne pas sans droit root, PuTTY nâest pas pratique si vous nâĂȘtes pas parfaitement familiarisĂ© avec linuxâŠ
La réponse est pourtant simple, JeeXplorer !
JeeXplorer est un plugin « explorateur » comme son nom lâindique, il permet, la modification, crĂ©ation, suppression de fichiers/dossiers
- Ouvrez JeeXplorer
- Naviguez dans lâarborescence jusquâĂ html/plugins/blea/resources/blead/devices/
- Sauvegardez le fichier lywsd03.py
- Clic droit
- Laissez le fichier dupliqué il servira si jamais vous voulez le restaurer
- Editez le fichier (clic droit éditer ou double clic gauche) avec le code avec le code de dudusse optimisé par DrKamp et modifié par skillix pour prendre en compte les valeurs négatives:
# 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)
- Enregistrez et quittez
- Sauvegardez votre fichier en le dupliquant et en le renommant
- BLEA :
- Relancez le démon
/ ! \ IMPORTANT : si vous utilisez une antenne dĂ©portĂ©e, penser Ă
Et
- Lancez un scan
- / ! \ Pensez a couper le Bluetooth du Pc/Mobile car il est toujours connectĂ© et c’est le cas le capteur et ne sera pas dĂ©tectable ou de vĂ©rifier que l’@ MAC n’est pas dĂ©jĂ dans les pĂ©riphĂ©riques inconnus de BLEA
- Choisissez « lywsd03 » et suivez lâinclusion classique
- Décochez le refresh forcé
- Cochez historiser si vous souhaitez avoir des graphes ou vérifier vos remontées
Voila vous avez fini !
NB : Si vous avez des tempĂ©ratures farfelues, vĂ©rifiez que vous avez bien changer l’adversering type, si c’est bien le cas vous pouvez utiliser une deuxiĂšmes sĂ©curitĂ© en appliquant une valeur maximale :
Bonus – plugin Alexa (ASH)
Pour ceux qui souhaiteraient envoyer leurs thermomÚtres dans Alexa pour y accéder vocalement voici comment les configurer :
- Trouver sont équipement dans Alexa plugin, cocher transmettre, choisir le type capteur de température
- Si vous rencontré un NOK (ce fonctionne aussi avec le OK) cliquez dessus, il vous explique ce dont il a besoin
- Reportez les sur la commande adéquate :
Puis, engrenage de la commande de température
- Sauvegarder, revenez sur le plugin Alexa, sauvegardez encore.
- Lancez un scan sur l’application ALEXA
Normalement votre thermomÚtre est découvert et OK dans le plugin.
Bonus du Bonus
Sur la derniĂšre image, j’ai configurĂ© ma commande de tempĂ©rature pour ĂȘtre averti (vocal et sms) si mon frigo passe au dessus de 11 degrĂ©s pendant plus de 10 minutes. Cela Ă©vite de crĂ©er des scĂ©nario.