Como flashear sensor de temperatura Xiaomi?

La idea de esta guía es mostrar y documentar el proceso de actualización de firmware para uno de los sensores mas económicos y accesibles que podemos encontrar en el mercado, al menos en Argentina.

La actualización del firmware nos va a permitir conectar el sensor a nuestro {{Home Assistant}} usando {{ESPHome}}.

En esta ocasión vamos a ver como flashear un firmware custom ATC🡭 en el sensor de Xiaomi Mi Temperature and Humidity Monitor 2, modelo LYWSD03MMC.

Antes que nada voy a compartir mi opinion de por que compre estos sensores y la diferencia con el sensor de Sonoff SNZB-02.

Materiales / Componentes

  • Sensor Xiaomi Mi Temperature and Humidity Monitor 2, modelo LYWSD03MMC.
  • Dongle bluetooth o notebook con bluetooth integrado.
  • Batería CR2032.
  • Navegador Chrome / Chromium / Opera (no vamos a poder utilizar Firefox)
  • Firmware ATC🡭

Por qué elegí este sensor?

thermostat sensor

thermostat sensor (113.2 KB)

Dentro de lo que es el movimiento de Home Automation, los sensores son una de las partes fundamentales y más económicas que hay. Conocer la temperatura de los distintas ambientes de tu casa, puede servir para generar automatizaciones como por ejemplo: encender un aire, enviar una notificación para regar las plantas en caso de que la humedad sea baja, etc.

En mi caso, el sensor de Xiaomi es uno de los más baratos que se pueden conseguir en Argentina. Al mes de Septiembre pagué $2500 cada sensor.

Lo bueno de este sensor es que viene con Bluetooth incluido, eso quiere decir que podemos usar la aplicación de Xioami llamada Mi Home en el celular para ver la temperatura y humedad, o también podemos cambiarle el firmware y conectarlo a nuestro {{Home Assistant}} (que es lo que vamos a ver hoy).

El firmware que vamos a instalar funciona no con todos los modelos de sensores de Xiaomi, por eso es importante asegurarse de comprar el modelo LYWSD03MMC.

Es importante saber que el sensor no viene con pila, tenemos que comprarla por separado. Acá voy a dejar una recomendación, de comprar pilas que sean de marcas “conocidas” porque las pilas chinas (que hay un montón) no soportan los picos de energía que genera el sensor, sobretodo al momento de actualizar el firmware.

El sensor tiene la capacidad de guardar 4 meses de información en la memoria interna, desde este link🡭 vamos a poder conectarnos al sensor y poder visualizar esa data con la posibilidad de poder exportarla.

thermostat sensor inside

thermostat sensor inside (113.2 KB)

Por que flashear el firmware?

Para mi, unas de las principales ventajas en poder cambiarle el firmware, es no estar obligado a usar una cuenta en la nube (Xiaomi) para poder integrar el sensor en {{Home Assistant}}.

Por otro lado el firmware custom, nos permite configurar varios parámetros como por ejemplo: distintos threshold de temperaturas, mostrar la hora en pantalla y el porcentaje de batería, poder manejar los GPIO que trae el sensor, etc.

Por ultimo la mejora en performance en cuanto al uso de la batería, haciendo que una misma pila CR2032 dure más, es otra muy buena ventaja.

El firmware lo vamos a flashear directamente utilizando bluetooth mediante OTA, esto quiere decir que no tenemos que hacer ninguna conexión serial, no tenemos que soldar ningún pin, ni siquiera descargar el firmware en nuestra PC.

OTA significa Over The Air, hoy en día la mayoría de los dispositivos bluetooth pueden ser flasheados de esta manera, lo que nos da una ventaja gigante en cuanto a actualizaciones.

Preparación

Como comente arriba, el flash lo vamos a hacer mediante OTA, para eso vamos a acceder a la siguiente web🡭 en la cual vamos a ver una interfaz que nos va a permitir conectarnos a nuestro sensor.

Antes de eso, es obligatorio configurar nuestro navegador para que acepte funcionalidades experimentales. No todos los navegadores permiten esta funcionalidad, por ejemplo Firefox es bastante cerrado en estas cosas, en mi caso utilice Chromium. Para activar las funcionalidades experimentales desde Chrome, podemos ir al siguiente link🡭 y buscar la opción “Experimental Web Platform features” y activarla.

Dentro de la web vamos a ver los distintos links para activar las funciones experimentales. Una vez hecha la activación, el navegador se va a reiniciar.

Con eso listo, podemos empezar el proceso de flasheo.

Flash de firmware

Al abrir la web vamos a ver la siguiente pantalla, donde vamos a tener que conectarnos a nuestro sensor a través del botón Connect

thermostat-screen-0-connect

thermostat-screen-0-connect (42.94KB)

Apretando el botón, se va abrir una pantalla que nos va a permitir elegir el sensor de un listado de dispositivos Bluetooth.

La primera vez que nos conectemos a nuestro sensor, vamos a distinguirlo por el modelo LYWSD03MMC.

En caso de tener que flashear varios sensores, es mejor hacerlo de a uno, por que todos van a tener el mismo nombre y se complica identificarlos.

Una vez conectado, nos van a aparecer las siguientes opciones:

thermostat-screen-1

thermostat-screen-1 (99.36KB)

Donde vamos a tener que hacer clic en el botón Do Activation que va a ejecutar un proceso para des-encriptar la key del sensor. Una vez que el proceso de des-encriptacion haya terminado, nos va a permitir instalar en nuevo firmware.

thermostat-screen-2-activation

thermostat-screen-2-activation (42.06KB)

La web nos permite instalar un firmware Custom, que al momento de escribir este blog es el ATC_v38.bin o instalar el firmware original de Xiaomi en caso de que queramos volver a la configuración de stock.

Al presionar Custom Firmware ver 3.8 y luego Start Flashing va a comenzar el proceso de instalación, que no va a durar mas de 1 minuto.

Una vez terminada la instalación, el sensor se va a desconectar. Y acá viene la parte importante que no esta explicada en la documentación. Para que el nuevo firmware quede funcional, tenemos que reiniciar el sensor sacandole la pila, dejarlo unos segundos sin pila y volver a ponersela. De esta forma el sensor va a iniciar con el nuevo firmware.

Configuración

Para comenzar la configuración del dispositivo, vamos a tener que volvernos a conectar al sensor desde la misma página.

Una vez conectado para saber que el firmware fue correctamente instalado debemos ver la siguiente información.

thermostat-screen-3-firmware-success

thermostat-screen-3-firmware-success (91.62KB)

Una vez que vemos la pantalla con las distintas opciones de configuración estamos seguros de que el firmware custom esta funcionando.

En mi caso, la primer configuración que realice es cambiarle el nombre para poder identificarlo. Yo elegí la nomenclatura TH_00X donde la X es el número del sensor.

Como segundo paso, configuré el Advertising Type que es la forma
de anunciar / comunicar los paquetes de datos el sensor. El firmware custom nos permite elegir varios tipos de “paquetes”, como lo pienso usar desde {{Home Assistant}}, en mi caso elegí BTHome v1. Tengo entendido que todos los formatos son soportados por Home Assistant, pero como {{BTHome}} es de lo mas conocidos fui por ese.

Una de las ventajas de BTHome es que soporta paquetes encriptados. Pero por el momento no es algo que estuve revisando para configurar.

thermostat-screen-4-advertising-type

thermostat-screen-4-advertising-type (98.59KB)

El firmware nos permite configurar un montón de cosas, como por ejemplo offsets para temperatura y humedad, latencia de los mensajes, si queremos que la pantalla este prendida o apagada, si queremos mostrar el porcentaje de batería restante, etc.

Por cada cambio o grupo de cambio que realizamos, tenemos que apretar el botón “Send Config” para actualizar la configuración del sensor.

Una vez que terminamos de realizar las configuraciones que queramos, podemos desconectarnos y pasar a la configuración dentro de Home Assistant, pero eso queda fuera de este documento.