Herramientas de usuario

Herramientas del sitio


informatica:domotica:lywsd03mmc

¡Esta es una revisión vieja del documento!


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-pip
  • bluez

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 decimal
  • b: 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

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

  1. Activar Bluetooth del móvil
  2. Estar cerca del sensor
  3. Pulsar en Connect y esperar que abajo, en el log, aparezca Connected
  4. 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.

Recursos

informatica/domotica/lywsd03mmc.1599492145.txt.gz · Última modificación: por tempwin