Valeurs non remontées

J’ai aussi ce type de capteur, avec blea et une smart en 3.3.53.
J’avais mis en place la procédure qui consistait à modifier le fichier lywsd03.py avec les bindkey, et cela fonctionnait. Mais la mise à jour du plugin a remis à zéro ces modifications.
Du coup, j’ai discuté avec sarakha et des personnes de son groupe d’entraide qui m’ont indiqué que cela fonctionne sans les fichiers modifiés. Du coup, je suis reparti de zéro avec réinstall plugin , réinstall antennes déportées, modif des refresh forcé, etc, mais ce n’est pas trop concluant car les modules ne remontent pas régulièrement la température : par exemple plus rien sur mes 4 capteurs depuis plus de 02h30 :

Et parfois les capteurs se bloquent carrément (voyant BT allumé en permanence sur l’écran du capteur), RSSI =-200 sur les antennes et pas de remontée :
Capture1

Malheureusement, ça fonctionne chez certains, mais ça dysfonctionne chez d’autres :frowning:
Perso, je pense les sortir de jeedom et acheter des aqara en zigbee qui sont plus stable.

Il y a un bug ouvert (et non résolu) à ce sujet sur la lib bluepy (la lib python qui gère le bluetooth).
Si vous n’avez pas le problème, alors vous avez de la chance :slight_smile:

Donc non, je vais rester sur l’optique de l’antenne déportée, surtout qu’elle me permet d’optimiser mon réseau.

Le problème c’est que maintenant je tombe sur un autre problème visiblement connu lui aussi. C’est pour cela que j’ai ouvert ce sujet sur ce forum.

Oui j’ai vu cette bidouille.
Elle ne me satisfait pas car elle oblige à modifier le plugin pour y stocker en dur des clés. Donc en effet, la modif peut sauter à tout instant, et c’est ce qui vous est arrivé malheureusement.

A noter : j’ai aussi les capteurs zigbee, ils sont vraiment chouettes et fonctionnent du tonnerre. Par contre ils n’ont pas d’écran.
Mais j’ai là aussi un soucis d’intégration dans jeedom, cf un autre sujet que j’ai ouvert par ailleurs.

tu peux mettre l’url de l’autre post stp?

C’est ici

Bon, pour finir, j’ai adapté le « driver » LYWSD03" du plugin blea pour qu’il fonctionne avec le firmware custom développé par atc1441 (rappel : ça se passe ici)

Comme ça, plus aucun problème.
Grace au firmware custom, les trames passent en clair et non plus en crypté. De plus les données de température, humidité et batterie figurent toutes en même temps directement dans la trame transmsie par le module LYWSD03.

Les données sont remontées toutes les minutes (paramétrable facilement dans le firmware).
Donc vraiment c’est top.

Précisions : les modules ne sont plus reconnus comme LYWSD03. Pour les ajouter dans jeedom Il faut donc lancer un scan avec l’option « tous les produits », puis il faut affecter manuellement le type « lywsd03 » dans la config du module.

Voici mon fichier lywsd03.py.
La modif est dans la fonction parse.
C’est la première fois de ma vie que je code en python, donc c’est peut-être pas optimal.
Mais y a pas plus simple comme code, et ça fonctionne.

Je m’étonne d’ailleurs que personne ne s’y soit plongé avant moi :slight_smile:

# 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])
                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)

3 « J'aime »

Après quelques jours de recul : ma solution marche nickel.
Fini les coupures :slight_smile:

Comme je reçois beaucoup de demandes en MP, je tiens à préciser ma solution au problème des LYWSD03

  1. il faut flasher les sondes avec un firmware, qui n’est pas le mien, dont je ne suis pas responsable, et pour lequel j’ai donné un lien où on peut trouver toutes les infos nécessaires
  2. il faut ensuite remplacer le fichier python lywsd03.py, par celui que j’ai donné. L’emplacement de ce fichier dépend de votre système, et dépend de s’il s’agit d’une antenne déportée ou locale.

A+

@dudusse, j ai flashé le module à partir du lien fourni puis ensuite copié le contenu de ton fichier en lieu et place de celui d’origine.
Par contre impossible de le faire détecter par BLEA . même en activant détection des inconnus.

Pourrais tu me donner plus d infos sur ta méthode pour le faire détecter par BLEA

C’est bon en réinstallant les dépendances j ai pu faire détecter le module flashé/
C’est réactif et bien plus simple

1 « J'aime »

Merci pour la modif. Peux etre créé un autre équipement dans BLEA du genre Atc1441 serait plus pratique que de modifier l’existant ?

Bonjour,
Y’a peut-être qq chose que j’ai pas compris, mais vous faites comment pour flasher ? J’ai suivi la procédure avec mon maigre anglais. Mais l’outil atc1441.github.io/TelinkFlash ne trouve pas le thermomètre lorsque je clique sur connect.
Merci

la vois tu dans ta conf bluetooh ?
si oui utilise chrome

il faut un pc avant un dongle bluetooth pour faire ça?

1 « J'aime »

non tu peux le faire de ton téléphone

je le vois bien dans nrf connect, j’arrive bien a me connecter dessus.


Par contre dans l’outil de flashage, quand je clique sur connect il reste en searching for devices en bas dans les logs.
J’ai essayé sur mon iphone, sur le mac et aussi sur une tablette android.

1 « J'aime »

au début je n arrivait pas à me connecter.
En utilisant Chrome j’ai pu le connecter

Ok avec de la persévérance j’ai réussi à flasher. Pas avec l’iphone, pas avec la tablette bien qu’ayant essayé Chrome sur les 2. Ca a fini par fonctionner sur mon Mac avec Chrome et le flash s’est bien passé.
Là je viens donc de copier ton driver en lieu et place de celui d’origine du plugin. J’ai relancé les dépendances et détecté le Thermomètre sans pb, Je lui ai attribué le modèle mais je n’ai rien qui remonte pour l’instant, tout est à zéro. As tu eu besoin d’attendre avant de recevoir des données ?

Edit : C’est bon ça marche. En fait j’avais fait copier coller du fichier alors qu’il faut enlever ou mettre en commentaire la première ligne.

Salut à tous,

J’ai aussi réussi à inclure mes 4 LYWSD03, avec ces actions :
-Flashage des modules depuis mon mobile android avec navigateur Chrome
-Remplacement du fichier lywsd03.py sous le répertoire de jeedom ( html/plugins/blea/resources/blead/devices/) et dans les répertoires de mes antennes déportées (pensez à faire un backup du fichier origine au cas où) par le fichier de @dudusse
-Activation de « Autoriser l’inclusion de devices inconnus » dans le plugin BLEA
-Relance des dépendances
-Relance du démon
-Scan pour inclure les modules en laissant l’option « tous »
-Remplacement du type des modules, par lywsd03, une fois qu’ils ont été inclus
-J’ai laissé le Refresh Forcé à 900s , je verrais plus tard si je le laisse où si je l’enlève pour n’avoir un refresh des températures uniquement en cas de changement de température.
-Au bout d’une heure, cela remonte bien :slight_smile: je vais surveiller.
-ATTENTION à bien conserver le fichier lywsd03.py de dudusse car il sera écrasé à chaque mise à jour du plugin BLEA.

Merci à @dudusse et aux autres pour cette combine et l’aide !

Je te conseille de décoché la case forcé