Temperatura y Humedad con Xiaomi LYWSD03MMC en Grafana

Continuando con la domótica de casa, algo a tener en cuenta, para una futura climatización automática o simplemente por saber el estado de tu hogar, es la temperatura y humedad de cada una de las estancias. Para ello aunque existen opciones wifi o DYI que nosotros podamos construirnos, pero en este caso, vamos a usar los sensores Xiaomi Mijia LYWSD03MMC el cual podemos encontrar en AliExpress por menos de 3 euros.

Para conectarnos y obtener los datos usaremos una raspberry / orange pi o cualquier otra placa que nos de la posibilidad de tener un linux.

Xiaomi Mijia LYWSD03MMC

Es un sensor de bajo coste con pantalla y conexión bluetooth de bajo coste de la mano de Xiaomi que se integra dentro del ecosistema Mijia Xiaomi Home.

Xiaomi Mijia Termometro Humedad
Temperatura y Humedad con Xiaomi LYWSD03MMC en Grafana 7
ModeloXiaomi Mijia LYWSD03MMC
Peso78g
Dimensiones4,30 x 4,30 x 1,25 cm
Pantalla1.78 "
Temperatura-9.9 a 60 ºC
Humedad0 a 99%
ConectividadBluetooth
BateríaCR2032

Como hemos hablado este dispositivo bluetooth se integra dentro del ecosistema Mi Home a través del gateway bluetooth, pero en nuestro caso, vamos a usarlo con conexión directa.

Firmware alternativo ATC MiThermometer

Al igual que ya hiciésemos con los Firmware Sonoff, a este dispositivo LYWSD03MMC vamos a cambiar el firmware para hacerlo más fácil y compatible.

El firmware original, se enlaza mediante una key la cual es posible obtener, pero para no necesitarlo, vamos a actualizarlo de forma muy fácil y simple.

El firmware alternativo es de Hoverboard1 y posteriormente ha sido actualizado por Pvvx.

Flashear Xiaomi MiThermometer LYWSD03MMC

Lo primero que tenemos que hacer es descargar el fichero del firmware desde GitHub:

https://github.com/pvvx/ATC_MiThermometer

Xiaomi Mijia Firmware alternativo

Desde un teléfono móvil, recomendablemente, entramos en la url que nos indica en la documentación:

https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html

Flash Over The Air
  • Primero: Nos conectaremos al dispositivo
  • Segundo: Seleccionaremos el Firmware
  • Tercero: Empezamos el flasheo
  • Cuarto: Nos fijamos hasta que llegue al 100% y reinicie.

Con esto, ya tendremos el nuevo firmware ATC.

Obtener datos BLE con Raspbery Pi

Vamos a usar una Raspberry Pi, aunque también podríamos usar una Orange Pi sin problemas, abaratando el sistema.

Podemos usar el módulo bluetooth que trae la RPi 4 o si tenemos una versión anterior que no dispone de módulo bluetooth, podemos poner un módulo USB y el resultado será el mismo.

Antes te comenzar, tenemos que instalar una serie de paquetes y librerías necesarios.

apt install git curl mosquitto-clients libglib2.0-dev python3-dev bluetooth libbluetooth-dev python3 bluez python3-pip
pip3 install bluepy pybluez

En nuestro caso, vamos a hacerlo sobre la carpeta /data, pero podemos usar cualquiera que se adecue a nuestro sistema.

Vamos a usar la aplicación de JsBergbau MiTemperature2 diseñada para leer estos LYWSD03MMC, la cual a título de comentario está en el repositorio que GitHub tiene almacenado en el Ártico.

git clone https://github.com/JsBergbau/MiTemperature2.git

Ya tenemos la aplicación que vamos a necesitar, pero tendremos que crear 2 ficheros para hacerlos funcionar.

Fichero de configuración de Sensores

Vamos a crear un fichero de configuración de Sensores, el cual será usado para que la aplicación sólo lea esos sensores y le asignemos un nombre. En nuestro caso lo llamaremos Sensores.ini

[A4:C1:38:68:00:01]
sensorname=Despacho

[A4:C1:38:68:00:02]
sensorname=Salon

Fichero de acciones

Ya que tenemos la aplicación y los sensores LYWSD03MMC que queremos controlar, vamos a decidir que vamos a hacer con esos datos.

Al igual que ya hicimos con el consumo eléctrico integrado en Grafana mediante InfluxDB, vamos a integrarlo igual.

Ya sabemos como montar con Docker InfluxDB, por lo que no vamos a volver a explicarlo. Tan sólo creamos la base de datos, que queramos. Yo la he llamado sensores.

Vamos a aprovechar y a volcar los datos también a MQTT, por si queremos recuperarlos desde Home Assistant, Node Red o cualquier otro sistema.

En mi caso, he llamado al fichero influx_mqtt_sensores:

#!/bin/bash

# Configuramos Parametros

RUTA="/data/MiTemperature2"

MQTT_IP="192.168.0.210"
MQTT_USER="MiUsuario"
MQTT_PASS="NuestraPassword"
MQTT_TOPIC="Alferez/Datos/Sensores"

INFLUX_IP="192.168.0.201"
INFLUX_PUERTO="8086"
INFLUX_DB="sensores"

# Obtenemos variables

LUGAR="$2"
TEMPERATURA="$3"
HUMEDAD="$4"
BATVOLT="$5"
BATLEV="$6"

# Integramos datos en MQTT

mosquitto_pub -h $MQTT_IP -t "$MQTT_TOPIC/$LUGAR/temp" -u $MQTT_USER -P $MQTT_PASS  -m "$TEMPERATURA"
mosquitto_pub -h $MQTT_IP -t "$MQTT_TOPIC/$LUGAR/humidity" -u $MQTT_USER -P $MQTT_PASS  -m "$HUMEDAD"
mosquitto_pub -h $MQTT_IP -t "$MQTT_TOPIC/$LUGAR/batteryvoltage" -u $MQTT_USER -P $MQTT_PASS  -m "$BATVOLT"
mosquitto_pub -h $MQTT_IP -t "$MQTT_TOPIC/$LUGAR/batterylevel" -u $MQTT_USER -P $MQTT_PASS  -m "$BATLEV"

# Integramos datos en InfluxDB

/usr/bin/curl  -s -i -XPOST "http://${INFLUX_IP}:${INFLUX_PUERTO}/write?db=${INFLUX_DB}" --data-binary "temp,sensor=$LUGAR value=$TEMPERATURA"
/usr/bin/curl  -s -i -XPOST "http://${INFLUX_IP}:${INFLUX_PUERTO}/write?db=${INFLUX_DB}" --data-binary "hum,sensor=$LUGAR value=$HUMEDAD"
/usr/bin/curl  -s -i -XPOST "http://${INFLUX_IP}:${INFLUX_PUERTO}/write?db=${INFLUX_DB}" --data-binary "bat,sensor=$LUGAR value=$BATLEV"

Lógicamente tendremos que hacer este fichero ejecutable (chmod +x) y poner los datos perteneciente a nuestros sistemas. Si no queremos meterlo en MQTT por ejemplo, podemos quitar esa parte.

Ejecución de la aplicación

Para ejecutar nuestra aplicación y que empiece a introducir los datos en InfluxDB, tenemos que ejecutarlo:

/data/MiTemperature2/LYWSD03MMC.py -a -b 1000 -r --debounce --skipidentical 50 --name Alferez --callback influx_mqtt_sensores -df /data/MiTemperature2/sensores.ini -odl

Podemos lanzarlo en un screen, en background o ponerlo para que cuando el sistema se arranque la aplicación se ejecute de nuevo.

Datos en Grafana

Ya tenemos nuestros datos, ahora sólo nos queda recuperar esos datos que hemos guardado de los LYWSD03MMC y mostrarlos.

Debemos añadir un panel para temperatura y otro para humedad e ir introduciendo los sensores para que los muestre:

Grafana Xiaomi MIjia LYWSD03MMC
Configuración de datos en Grafana

Y esto es lo que obtendremos:

Representación Grafana Mijia
Representación de datos en Grafana

Integración en sistema Domótico

Teniendo ya los datos en el servidor Mosquitto, es fácil recuperar esos datos de los LYWSD03MMC en nuestro sistema. Aquí podemos ver nuestros datos en Home Assitant:

Integracion Xiaomi en HomeAssistant

Con estos datos integrados, podemos empezar a realizar automatizaciones como encender un aire acondicionado o un alentador en base a la temperatura o activar un deshumidificador en base a la humedad que tengamos en una habitación.