¡Esta es una revisión vieja del documento!
Tabla de Contenidos
LYWSD03MMC
Sensor de temperatura y humedad.
- Pantalla LCD
- Batería 2032
- 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
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
Mensajes cifrados
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.

