Flash XIAOMI Mijia Bluetooth lywsd03 Sensor para Jeedom

Nota: : Para ampliar las imágenes: Haga clic con el botón derecho / abra la imagen en una nueva pestaña

/!\ ATENCIÓN /!\ menos de 30% batería mostrada en Jeedom hay una disminución en la fiabilidad de la información, alrededor de 20% Una pantalla de BATERÍA BAJA es visible en la pantalla LCD con pérdida de Bluetooth

Cuando comenzamos la automatización del hogar, comenzamos a buscar a tientas y nuestras opciones recurren rápidamente a los productos más baratos. Muchos de nosotros comenzamos con una marca que no es (demasiado) cara y con una buena reputación, Xiaomi!

Dado el precio, muchos de nosotros elegimos este producto:

Pero como comenzamos en ese momento en la domótica, ¡no imaginamos la cocina en la que nos pondrá este pequeño, hermoso y barato termómetro!

Lo que se necesita:

  • Un sensor
  • Un Jeedom con una antena Bluetooth (local o deportado)
  • BLEA (plugin)
  • JeeXplorer (plugin)
  • Un PC / móvil con Bluetooth

Hay varios temas que explican cómo hackear BLEA con BindKey, flash y hackear o no tocar nada y usar una puerta de enlace Xiaomi combinada con una habilidad de Alexa y traerla a Jeedom gracias al plugin AlexaAPI / Smarthome.

Rindamos homenaje a todos los que han trabajado citándolos de estas fuentes:

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

Cada método tiene sus ventajas y desventajas:

AlexaAPI/smarthome:

Ventajas:

  • Sin hacks
  • Muy simple
  • Sin parpadeo

Desventajas:

  • Requiere Xiaomi Bluetooth Gateway
  • Tener Alexa
  • Agujeros en los ascensores (muy raros pero molestos al conducir un calentador)
  • No CloudFree (dependiente de Internet)

BLEA con las BindKeys:

Ventajas:

  • CloudFree (dependiente de Internet)
  • Sin parpadeo

Desventajas:

  • Complejo (recuperación @MAC, BindKey)
  • Agujeros en los ascensores (muy raros pero molestos al conducir un calentador)
  • Cambiar BindKey si se conecta a MihHome/Otro
  • Tener una antena Bluetooth
  • Instalación de una dependencia de descifrado de claves

BLEA con flash:

Ventajas:

  • Sencillo
  • Sensor ajustable
  • Reensamblado sin agujero (o aún no visto hasta la fecha)

Desventajas:

  • Intermitente
  • Tener una antena Bluetooth

Incluso todo esto no es tan complicado, incluso muy simple en algunos casos, no es necesariamente la visión que uno puede tener al principio. He luchado, manoseado, cometido errores durante mucho tiempo y a menudo no entendía cosas muy simples.

Es por eso que estoy escribiendo este tutorial sobre la última solución, haciéndolo lo más popular posible para el principiante de Jeedom.

¿Por qué elegir este método?

Los probé todos y nunca estuve realmente satisfecho, demasiado agujero en el ascensor o demasiada restricción de sujeción. Finalmente me quedé en el más estable a mi gusto AlexaAPI/smarthome. No retuve el flasheo en ese momento porque no había forma de integrarlo en BLEA.

El nuevo firmware finalmente me ha convencido, porque esta solución me parece la más estable en términos de ascensores, una mejor optimización de la batería y las desventajas pueden considerarse ventajas.

Para la comparación en 1H con mis sondas todavía bajo Alexa:

Alexa

BLEA brilló

¡Encuentro inapelable!

Recordatorio importante:

Para aquellos que deseen comparar los diferentes métodos a largo plazo, les recuerdo que, por defecto, los registros se suavizan / promedian más de 2 horas todos los días en el CRON para archivar (aproximadamente 4 horas) con un valor promedio por hora:

El archivo tiene lugar una vez al día por la noche las 2 horas se aplican desde allí

Esto se puede ver en la forma de:

Antes de las 3 a.m., no era solo un ascensor cada hora, sino que todos los ascensores se agrupaban en un promedio por hora.

Por lo tanto, será necesario cambiar estos parámetros para una comparación objetiva.

  1. Intermitente

Incluso si el viejo método de flasheo propuesto por Aaron Christophel ya era bastante bueno

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

¡Víctor pvvx se hizo cargo y lo mejoró!

https://github.com/pvvx/ATC_MiThermometer

https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html

En resumen, esta nueva versión ofrece la carga automática del último firmware, la optimización de la batería, así como una multitud de ajustes adicionales (incluido el gatillo de acción física en el husillo de prueba, será necesario soldar para esto:p )

Ir a la página https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html

Nota: Si tiene un sensor ya parpadeado en el formato T1441, es posible que tenga que pasar por el parpadeo T1441 para devolver el firmware de Xiaomi o usar la página https://pvvx.github.io/ATC_MiThermometer/TelinkOTA.html y para realizar una actualización OTA de T1441 a PVVX. A continuación, vuelva al flasher PVVX para cambiar la configuración.

  • Activar el Bluetooth de PC/Móvil antes de intentar conectarse 
  • Ingrese "LYWSD03" en "BLE device name prefix filter" (esto permite tener solo termómetros Xiaomi), "ATC" permitirá colocar el filtro para un termómetro ya parpadeado
  • Toca "Conectar" y selecciona tu termómetro
  • Espere hasta que se establezca la conexión
  • Presione "Hacer Activación"
  • Espere la recuperación de las claves de Xiaomi
  • Presione "Firmeware personalizado ver 2.x"
    • Tenga en cuenta que el botón al lado es el que devuelve la versión básica de Xiaomi
  • Presione "Iniciar parpadeo"
    • Flash tarda varios segundos para ver varios minutos
  • Si esto no se hace por sí solo, presione "Reconectar"
  • A menos que haya una necesidad particular, recomiendo que solo se vean afectados dos valores:
  • El tipo de publicidad es el formato de los fotogramas, por defecto está en «ALL» y por lo tanto también envía fotogramas en formato Xiaomi, que creo que es la loca fuente de valores que verás en el último video porque olvidé cambiar este parámetro al principio.

Así que elegimos Atc1441 porque es para este formato que se ha desarrollado el código que se utilizará más adelante y 5000ms.

Elegir «Atc1441» en lugar de «ALL» evita temperaturas incoherentes (p. ej. 3000°C), además de mantener el "TODO" desperdiciará batería para información innecesaria y dividirá por 4 la publicación del formato que le interese.

Usando estos ajustes encontramos que tenemos 2 veces más datos utilizables (5s Vs 10s) con casi 2 veces menos batería (ver el siguiente diagrama)
  • El intervalo publicitario es el valor de actualización de los fotogramas, elegí este valor porque permite optimizar la duración de la batería de 7 meses sin afectar demasiado la frecuencia de actualización.
  • Una vez seleccionada la configuración, pulse "Enviar configuración"

¡Aquí está el flasheo!

  • Edición del archivo lywsd03.py

Nota: Parece que el .Py original logra leer esta versión flasheada sin modificación (por confirmar), la diferencia de código (parse) permitiría retroceder los datos (notados en el encabezado) en el momento de la verificación de la presencia sin establecer una conexión, un poco como si estuviera buscando una red wifi y que detrás del nombre había información clara. Por lo tanto, el siguiente código puede ser útil para forzar indirectamente la actualización sin bloquear la sonda.

Cuando estás acostumbrado a Jeedom puede parecer una tontería, pero cuando empiezas te preguntas cómo modificar un archivo; Winscp no funciona sin root right, PuTTY no es práctico si no estás completamente familiarizado con linux…

¡La respuesta es simple, JeeXplorer!

JeeXplorer es un plugin «explorer» como su nombre indica, permite, modifica, crea, elimina archivos/carpetas

  • Abrir JeeXplorer
  • Navega por el árbol hasta html/plugins/blea/recursos/blead/dispositivos/
  • Guarde el archivo lywsd03.py
    • Haga clic con el botón derecho
  • Deja el archivo duplicado que servirá si alguna vez quieres restaurarlo
  • Edite el archivo (haga clic con el botón derecho o haga doble clic con el botón izquierdo) con el código de Dudusse optimizado por DrKamp  y modificado por skillix tener en cuenta los valores negativos:
# codificación: utf-8 de bluepy import btle import time import logging import globals import struct from multiconnect import Connector from notification import Clase de notificación Lywsd03(): def __init __(self): self.name = 'lywsd03' self.ignoreRepeat = False def isvalid(self,name,manuf='',data='',mac=''): logging.debug('LYWSD03-----datos no válidos=%s, mac=%s, nombre=%s, manuf=%s' % (datos, mac, nombre, manuf)) si name.lower() en [self.name]: devolver True si data.lower().startswith("1a18") y (mac.lower().startswith("a4:c1:38")): #Retorno de datos publicitarios transmitidos True def parse(self,data,mac,name,manuf): logging.info('LYWSD03-----adv data=%s, mac=%s, nombre=%s, manuf=%s' % (data, mac, name, manuf)) action={} action['present'] = 1 bd = bytes.fromhex(data) (temp,) = struct.unpack('>H', bd[8:10]) si temp > 60000: temp = 0 - ( 65530 - temp ) temp = temp / 10 humi = bd[10] batt = bd[11] action["temperature"] = temp action["month"] = humi action["battery"] = batt logging.info('LYWSD03-----mac=%s, temp=%s, humi=%s, bate=%s' % (mac, temp,humi,batt)) acción de retorno def read(self,mac): result={} intentar: conn = Connector(mac) conn.connect() si no es conn.isconnected: conn.connect() si no es 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 exception as e: logging.error(str(e) return result def handlenotification(self,conn,handle,data,action={}): result={} if hex(handle) == '0x36': ha = bytearray(datos) temperatura = float(recibido[1] * 256 + recibido[0]) / 100 humedad = recibido[2] resultado['humedad'] = humedad resultado['temperatura'] = temperatura resultado['id'] = conn.mac resultado['fuente'] = globals.daemonname globals.JEEDOM_COM.add _changes('dispositivos:'+conn.mac,resultado) globals.COMPATIBILITY.append(Lywsd03)
  • Guardar y dejar de fumar
  • Haga una copia de seguridad de su archivo duplicando y renombrándolo
  • BLEA:
  • Relanzar el demonio
La versión antigua del código requería buscar monedas desconocidas, ¡no la nueva!

/ ! IMPORTANTE \: Si usas una antena deportada, piensa en

Y

  • Ejecutar un escaneo
    • / ! \ Recuerda cortar el Bluetooth del PC/Mobile ya que todavía está conectado y este es el caso del sensor y no será detectable o comprobar que el @ MAC no está ya en los dispositivos desconocidos de BLEA
  • Elija lywsd03 y siga la inclusión clásica
  • Desmarque Actualización forzada
  • Verifique el historizador si desea tener gráficos o verifique sus ascensores

Eso es todo, ¡ya terminaste!

Nota: Si tiene temperaturas salvajes, verifique que haya cambiado el tipo adverso, si este es el caso, puede usar una segunda seguridad aplicando un valor máximo:

Bonus - Alexa plugin (ASH)

Para aquellos que deseen enviar sus termómetros a Alexa para acceso de voz, aquí está cómo configurarlos:

  • Buscar son equipos en Alexa plugin, comprobar transmitir, elija el tipo Sensor de temperatura
Incluso si no tengo que aconsejarle que elija un no, de lo contrario lo nombrará «[Objeto]+[equipo]« 
  • Si conociste a un NOK (También funciona con el vale) haga clic en él, le dice lo que necesita
tenga en cuenta los tipos genéricos previstos
  • Infórmeles sobre el orden apropiado:
Engranaje de equipos

Luego, control de temperatura del engranaje

Finalmente elegimos el tipo genérico de nuestro pedido, ya sea, ambiente/temperatura
  • Haga una copia de seguridad, vuelva al plugin de Alexa, haga una copia de seguridad de nuevo.
  • Ejecutar un escaneo en la aplicación ALEXA

Normalmente su termómetro se descubre y está bien en el plugin.

Bonificación de bonificación

En la última imagen, establezco mi control de temperatura para ser notificado (voz y sms) si mi refrigerador supera los 11 grados durante más de 10 minutos. Esto evita la creación de escenarios.

Ya una respuesta