El Xiaomi LYWSD03MMC es un pequeño monitor de temperatura y humedad con display que se vende a unos precios muy asequibles:

La integración en Home Assistant de dispositivos que implementan el protocolo Xiaomi Mijia BLE MiBeacon se realiza mediante Xiaomi BLE que, a su vez, usa la integración de Bluetooth.

La idea es escuchar las transmisiones Bluetooth que los dispositivos hacen por sí mismos, lo cual permite obtener los últimos valores del sensor sin necesidad de despertarlo del modo de suspensión profunda y conservar así su batería.

Bluetooth

La integración Bluetooth, que se carga por defecto en Home Assistant, permite detectar dispositivos cercanos que usen este protocolo.

Para disponer de Bluetooth en Linux es necesario que:

  • El socket D-Bus debe ser accesible para Home Assistant
  • El adaptador Bluetooth debe ser accesible para D-Bus y ejecutar BlueZ >= 5.43
  • La implementación de D-Bus debe ser dbus-broker
  • El sistema host debe ejecutar el kernel de Linux 5.15.62 o posterior

Nota: En una Raspberry Pi 4 hay que comprobar que no se haya desactivado el Bluetooth en el fichero /boot/config.txt mediante la directiva dtoverlay=disable-bt.

Para comprobar que todo está correcto, se puede ejecutar el comando bluetoothctl:

pi@pi4nas:~ $ bluetoothctl
Agent registered

Y también comprobar el estado del servicio hciuart.service mediante el comando systemctl:

pi@pi4nas:~ $ sudo systemctl status hciuart.service
● hciuart.service - Configure Bluetooth Modems connected by UART
   Loaded: loaded (/lib/systemd/system/hciuart.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2023-06-23 19:44:50 CEST; 4min 47s ago
  Process: 377 ExecStart=/usr/bin/btuart (code=exited, status=0/SUCCESS)
 Main PID: 487 (hciattach)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/hciuart.service
           └─487 /usr/bin/hciattach /dev/serial1 bcm43xx 3000000 flow -

Jun 23 19:44:43 pi4nas systemd[1]: Starting Configure Bluetooth Modems connected by UART...
Jun 23 19:44:50 pi4nas btuart[377]: bcm43xx_init
Jun 23 19:44:50 pi4nas btuart[377]: Flash firmware /lib/firmware/brcm/BCM4345C0.hcd
Jun 23 19:44:50 pi4nas btuart[377]: Set Controller UART speed to 3000000 bit/s
Jun 23 19:44:50 pi4nas btuart[377]: Device setup complete
Jun 23 19:44:50 pi4nas systemd[1]: Started Configure Bluetooth Modems connected by UART.

A continuación, en Home Assistant, se puede acceder a las integraciones para configurarla:

  • Settings
  • Devices and Services
  • Add Integration
  • Seleccionar Bluetooth
  • Seleccionar el dispositivo hci0 (xx:xx:xx:xx:xx:xx)
    • Do you want to set up the Bluetooth adapter hci0 (xx:xx:xx:xx:xx:xx)?
  • Pulsar el botón Submit
  • HA indicará que:
    • ha creado la configuración para xx:xx:xx:xx:xx:xx
    • ha encontrado el dispositivo hci0 (xx:xx:xx:xx:xx:xx)
  • Seleccionar el área donde esté ubicado
  • Pulsar el botón Finish

Xiaomi BLE

La integración Xiaomi BLE permite integrar dispositivos que utilizan el protocolo Xiaomi Mijia BLE MiBeacon.

Una vez activada, si tenemos dispositivos compatibles, puede que se hayan descubierto en:

  • Settings
  • Devices and Services
  • Discovered
    • Temperature/Humidity Sensor XXXX (LYWSD03MMC) Xiaomi BLE
      • Pulsar el botón Add

Si aparece el siguiente mensaje informativo, se puede hacer clic en Submit para añadirlo:

There hasn’t been a broadcast from this device in the last minute so we aren’t sure if this device uses encryption or not. This may be because the device uses a slow broadcast interval. Confirm to add this device anyway, then the next time a broadcast is received you will be prompted to enter its bindkey if it’s needed.

  • Do you want to set up Temperature/Humidity Sensor XXXX (LYWSD03MMC)?
    • Hacer clic en Submit
    • Escoger el área en la que se ubica el dispositivo
    • Hacer clic en Finish
Success!
Created configuration for Temperature/Humidity Sensor XXX (LYWSD03MMC).
We found the following devices:
Temperature/Humidity Sensor XXX
LYWSD03MMC (Xiaomi)
Area: xxxx

Podría ser que los dispositivos se hubiesen descubierto mediante la integración BTHome si no se ha cambiado el tipo de anuncio de BTHome v2 a MIJIA (Mi Home) al cambiar el firmware de los mismos.

Flash atc1441 o pvvx

Existen dos proyectos en GitHub que permiten grabar un firmware alternativo en estos termómetros de Xiaomi:

  • ATC MiThermometer @atc1441, es el proyecto original de Aaron Christophel
  • ATC MiThermometer @pvvx, es un fork del anterior realizado por un ruso llamado Victor que incorpora bastantes mejoras (por ejemplo, una mejor gestión del consumo de energía)

Los dos proyectos tienen una página web que permite realizar esta grabación usando un simple navegador (Google Chrome o Microsoft Edge) desde un dispositivo con Bluetooth:

Aunque el procedimiento para flashear un firmware alternativo es bastante similar en los dos proyectos, es recomendable utilizar la herramienta de pvvx:

Si el dispositivo ya tenía un firmware alternativo, se llamará ATC_XXXXX en lugar de LYWSD03MMC.

Si el emparejamiento funciona correctamente, en la pantalla del dispositivo aparecerá el símbolo de Bluetooth para indicarlo.

  • Pulsar el botón Custom Firmware: ATC_vXX.bin para seleccionar la última versión del firmware
  • Pulsar el botón Start Flashing

Comenzará el proceso de envío de los bloques del firmware a través de BT y, si todo va bien, en unos 30 segundos estará actualizado y listo para configurar sus parámetros.

PVVX Flash

Si hubiese problemas para configurar el dispositivo en Home Assistant, se puede revisar la issueXiaomi BLE not asking for bindkey” donde se explica cómo reconfigurar el dispositivo a los 10 minutos usando bindkey obtenida mediante el botón Do Activation.

Configuración

Una vez se ha cambiado el firmware, se podrá conectar de nuevo con el dispositivo y configurarlo:

  • Pulsar el botón Get Config para mostrar la configuración actual
  • Pulsar el botón Get Time para mostrar la fecha y hora del dispositivo (si se ha quitado la batería suele ser 1970)
  • Pulsar el botón Set Time para enviar la fecha y hora actual al dispositivo
  • Cambiar los siguientes parámetros de la configuración:
    • Activar Show batt [x]
    • Activar Sensor in “LowPower mode” [x]
    • Cambiar el Advertising type de BTHome v2 a MIJIA (MiHome)
    • Cambiar el Advertising interval de 2500.0 ms a 5000.0 ms
    • Cambiar el Measure interval de 4 a 12 (es decir, de 20 sec a 60 sec)
    • Cambiar el Minimum LCD refresh rate de 2.45 a 10.00
  • Pulsar el botón Set Config para enviar la configuración
  • Pulsar el botón Disconnect para desconectarse del dispositivo

Esta configuración envia el siguiente custom string en hexadecimal: 55a6100000500ca931c80ab400

PVVX Configuration

Zigbee

También existe un proyecto en GitHub del usuario devbis para convertir un LYWSD03MMC de BT a Zigbee:

Este proyecto también tiene una página web https://devbis.github.io/telink-zigbee/ que permite grabar el custom firmware usando un simple navegador (Google Chrome o Microsoft Edge) desde un dispositivo con Bluetooth.

Habrá que investigar esta opción para ver si el consumo de batería es menor que usando BT.

Referencias

Historial de cambios

  • 2023-06-22: Notas iniciales
  • 2025-01-12: Revisión y publicación del documento