Tabla de Contenidos
LYWSD03MMC
Sensor de temperatura y humedad.
- Pantalla LCD
- Batería 2032
- Chip TLSR8258
- Conectividad Bluetooth BLE (Bluetooth Low Energy)
Los datos que publica el sensor están cifrados. Los datos de temperatura y humedad se publican cada 10 minutos y la batería una vez cada hora.
Solo permite lecturas por Bluetooth cuando un dispositivo se conecta a él, es decir, el sensor no está continuamente publicando sus datos.
Una vez conectados al sensor, no permitirá que se establezca otras conexiones.
Una vez conectados al sensor, enviará los datos cada 6 segundos (10 lecturas de temperatura y humedad por minuto).
Lectura
Hay dos formas de obtener información del sensor:
- Conectándonos a él.
- Leyendo la información que emite automáticamente.
Conexión
En Arch Linux instalamos:
python-pipbluez
Una vez instalado pip, instalamos el módulo bluepy:
pip3 install bluepy
Y ahora usamos el script:
python LYWSD03MMC.py -d AA:BB:CC:00:11:22 -r -b 3
Ejemplo de salida:
$ python LYWSD03MMC.py -d AA:BB:CC:00:11:22 -r -b 3 Trying to connect to A4:C1:38:8E:1E:AC Temperature: 24.2 Humidity: 66 Battery voltage: 3.21 Battery level: 100 Temperature: 24.2 Humidity: 65 Battery voltage: 3.21 Battery level: 100 Temperature: 24.2 Humidity: 65 Battery voltage: 3.21 Battery level: 100
r: redondear el valor de la temperatura a un decimalb: obtener nivel estimado de batería
Si solo queremos hacer 1 lectura, utilizaremos la opción c (o count):
$ python LYWSD03MMC.py -d AA:BB:CC:00:11:22 -r -b 3 -c 1 Trying to connect to AA:BB:CC:00:11:22 Temperature: 25.2 Humidity: 64 Battery voltage: 3.21 Battery level: 100 1 measurements collected. Exiting in a moment.
También podemos definir un número máximo de intentos de conexión con unreachable-count:
$ python LYWSD03MMC.py -d AA:BB:CC:00:11:22 -r -b 3 -c 1 --unreachable-count 3 Trying to connect to AA:BB:CC:00:11:22 Connection lost Waiting... Trying to connect to AA:BB:CC:00:11:22 Connection lost Waiting... Trying to connect to AA:BB:CC:00:11:22 Connection lost Maximum numbers of unsuccessful connections reaches, exiting
Varios sensores
Si tenemos más de un sensor y queremos obtener la lectura de cada uno de ellos, el script de Python solo permite obtener la lectura de una dispositivo a la vez, así que una posible solución sería llamar al script con la dirección de cada uno de los sensores en serie.
Almacenamos en un fichero las MAC de cada sensor:
AA:BB:CC:00:11:11 AA:BB:CC:00:11:22 AA:BB:CC:00:11:33 AA:BB:CC:00:11:44
Y ejecutamos:
cat addresses.txt | awk {'print $1'} | xargs -I {} python3 LYWSD03MMC.py -d {} -r -b 3 -c 1 --unreachable-count 5
Manual
$ btgatt-client -d AA:BB:CC:00:11:22 -v btgatt-client: Opening L2CAP LE connection on ATT channel: src: 00:00:00:00:00:00 dest: AA:BB:CC:00:11:22 Connecting to device... Done
Los UUID son los servicios disponibles en el dispositivo BLE
[GATT client]# Service Added - UUID: 00001800-0000-1000-8000-00805f9b34fb start: 0x0001 end: 0x0007 [GATT client]# Service Added - UUID: 00001801-0000-1000-8000-00805f9b34fb start: 0x0008 end: 0x000b [GATT client]# Service Added - UUID: 0000180a-0000-1000-8000-00805f9b34fb start: 0x000c end: 0x0018 [GATT client]# Service Added - UUID: 0000180f-0000-1000-8000-00805f9b34fb start: 0x0019 end: 0x001c [GATT client]# Service Added - UUID: 00010203-0405-0607-0809-0a0b0c0d1912 start: 0x001d end: 0x0020 [GATT client]# Service Added - UUID: ebe0ccb0-7a0a-4b0c-8a1a-6ff2997da3a6 start: 0x0021 end: 0x004b [GATT client]# Service Added - UUID: 0000fe95-0000-1000-8000-00805f9b34fb start: 0x004c end: 0x005f [GATT client]# Service Added - UUID: 00000100-0065-6c62-2e74-6f696d2e696d start: 0x0060 end: 0x0068 [GATT client]# GATT discovery procedures complete
Los handles son los puntos de conexión donde se puede leer y escribir datos. Por ejemplo, el sensor puede tener un handle para acceder al nivel de batería y otro para activar alguna opción.
Generic Attribute Protocol (GATT) determina cómo dos dispositivos BLE intercambian información utilizando los conceptos service y characteristic. Este protocolo almacena service y characteristic en una tabla utilizando IDs de 16 bits
- services: contenedor de characteristics. Cada servicio tiene un UUID (universally unique identifier). https://www.bluetooth.com/specifications/gatt/services/
- characteristics: contienen un solo punto de datos. Cada característica tiene un UUID. https://www.bluetooth.com/specifications/gatt/characteristics/
Para leer los datos de temperatura y humedad del sensor:
- Servicio:
ebe0ccb0-7a0a-4b0c-8a1a-6ff2997da3a6 - Característica:
ebe0ccc1-7a0a-4b0c-8a1a-6ff2997da3a6
Ejemplo para el valor: 89-09-41-00-0c
El tercer elemento es la humedad (41 → 65 % en decimal)
El primer elemento son los decimales de humedad y el segundo los grados, así que en lugar de leerlo como 0x8909, tendríamos que hacer 0x0989 que es lo mismo que 2441 en decimal y si lo separamos: 24,41 ºC
Leer publicación
Es necesario obtener bind key
Lo más rápido es desde un móvil Android ir a la web https://atc1441.github.io/TelinkFlasher.html
- Activar Bluetooth del móvil
- Estar cerca del sensor
- Pulsar en Connect y esperar que abajo, en el log, aparezca Connected
- Pulsar en Do activation
Si todo ha ido bien, veremos el Mi Token y la Mi Bind Key:
Status: Connected, you can now Do the Activation to either get the Token or flash a new Firmware Temp/Humi: 25.3°C / 66% Device known id: Mi Token: 69cafd4b9d563c9c36c55a6e Mi Bind Key: 68fe0308f566cf774875cc9bf703afc5 When doing an activation here the device is needed to be activated in the Mi app again when wanted to use there.
Conectividad Zigbee
El chip que integra este sensor (TLSR8258) no solo soporta Bluetooth sino también Zigbee, pero el firmware oficial de Xiaomi no lo utiliza.
Empleando un firmware personalizado (custom firmware) podemos utilizar Zigbee.
Pasos:
- Activar características experimentales en Google Chrome, Opera o Edge.
- En Google Chrome abriendo
chrome://flags/#enable-experimental-web-platform-features
- Abrir la herramienta https://devbis.github.io/telink-zigbee/
- Pulsar en “Connect” y buscar el dispositivo
LYWSD03MMC. Esperar para conexión (Connected en los registros) - Si el termómetro tiene el firmware oficial, pulsar en “Do Activation” y esperar.
- Pulsar en “Select Firmware” para elegir el firmware de transición
ATC_ota_400000. Pulsar Start Flashing. Este paso es obligatorio incluso si ya está instalado un firmware personalizado. Si no lo hacemos, es posible que el dispositivo quede inutilizado y haga falta hacer el flash mediante USB/UART.- Al terminar, veremos en los registros Update done after XX.YYY seconds
- El dispositivo se desconectará del equipo
- Conectamos el dispositivo de nuevo (con nombre
ATC_802190o similar, según sus últimos 6 dígitos de la MAC). Si no aparece, quitar la batería, volver a introducirla y actualizar la web con la herramienta de flash. - Pulsar en Select Firmware para flashear el último
z03mmc.binsobre el firmware de transición para convertirlo a Zigbee. Durante el proceso, la pantalla del sensor no mostrará información.- Al terminar, veremos en los registros Update done after XX.YYY seconds y se desconectará.
A partir de este momento, el dispositivo debería ahora mostrarse en nuestro bridge Zigbee (si tiene habilitado el joining de dispositivos). Si no, reinserta la batería y/o haz cortocircuito en los contactos RESET y GO de la placa durante 3 segundos.
Mi Token: 6296fa46f3e8dc36a5682903 Mi Bind Key: be92519d5c8e438274c55e994986fd31

