Hoy tenemos un post que nos ha enviado José V. y que ha querido compartir con todos vosotros. Os dejo el tutorial, tal cual me lo ha pasado para que podáis usar los datos de este sensor para tener una buena referencia de la calidad del aire en casa.
Lista de la compra
Para el tutorial, tan solo necesitaréis el sensor JQ-300 que podéis encontrar aquí.
Tutorial para integrar el sensor JQ-300
Hoy voy a hablaros de la calidad del aire. Si habéis trabajado con Home Assistant seguramente habréis visto que desde las primeras versiones tienen integración con WAQI, la red mundial de medidores de calidad del aire, en el que a partir de mediciones de distintos componentes obtienen valores de calidad del aire y nos indican en una escala cuán perjudicial para la salud puede ser el aire que respiramos.
No pretendo que nos hagamos con un sensor homologado ni grandes expertos en la materia, pero con el sensor JQ-300, que podemos encontrar en XXXXX, podremos tener una medición sencilla de la Calidad del aire en interiores.0…
Este sensor es el hermano mayor de una serie de sensores que miden las siguientes características:
- JQ-100: TVOC, HCHO, eCO2.
- JQ-200: TVOC, HCHO, eCO2, Temperatura, Humedad.
- JQ-300: TVOC, HCHO, eCO2, PM2.5, Temperatura, Humedad.
Muy bien pero, ¿qué significan todas estas siglas? Resumiendo, y probablemente cometiendo algún fallo o incorrección, son:
TVOC es el total de Compuestos Orgánicos Volátiles (Volatile Organic Compounds en inglés), es decir, sustancias químicas que proceden principalmente de disolventes y pinturas o de la quema de combustibles.
HCHO se refiere a los Formaldehídos, otro tipo de gases volátiles e inflamables muy importantes en la industria química y que por ejemplo contienen algunos productos de limpieza del hogar.
eCO2 se refiere al CO2 equivalente, y es una medida por la que se calcula el “equivalente” en CO2 que suponen todos los gases de efecto invernadero.
El funcionamiento del dispositivo es muy simple. Una vez recibido, lo sacamos y lo conectamos a un puerto USB, bien con el cable que trae o bien con otro que tengamos nosotros.
Para la configuración inicial tendremos que descargar la aplicación “Perthings”, de la que tenemos un QR con el enlace en la propia caja y el manual (versión de Android e iOS según los QR que venían en la mía).
Tras la configuración inicial podremos ver en la aplicación que ya empezamos a recibir los datos:
Hay que recordar que, según te dice en las propias instrucciones, hay que dejarlo al menos 15 minutos para que se calibre y pueda ofrecer buenas mediciones.
A primera vista, y tras esperar el tiempo de calibración, medición de temperatura es un par de grados más alta que la que indica otro sensor de temperatura que tengo al lado, pero entiendo que el dato relevante para este medidor no es ese.
Y ahora viene lo interesante: tratar de obtener las mediciones sin tener que utilizar la aplicación. Según podéis ver en este hilo de GitHub, el medidor lleva un ESP8266 que recibe por un puerto las mediciones de los sensores y a través del ESP8266 se envían a la nube. Si bien aún no ha conseguido nadie darle buen soporte para Tasmota o ESPurna o ninguno de los otros firmware alternativos, si que hay avances en lo que respecta a poder obtener las mediciones sin necesidad de la APP, debido a la forma que el sensor se comunica con la nube del proveedor.
Obtención de datos del JQ-300
En el hilo de GitHub explican en mucho detalle todo el protocolo de comunicación, pero básicamente consta de 2 partes:
- El sensor se conecta a un servidor MQTT en la nube del proveedor, y se suscribe a una cola, en la que publica las mediciones de forma codificada.
- La aplicación móvil se conecta al mismo servidor MQTT en la nube del proveedor y se suscribe a otra cola, en la que recibe las mediciones en claro, en forma de JSON.
Y, ¿cómo obtenemos las colas a las que nos tenemos que suscribir? Por suerte la comunicación la hacen en claro por lo que tan solo necesitamos capturar el tráfico entre el móvil y la nube del proveedor para averiguarlo.
El puerto que usa el servidor MQTT no es el estándar, por lo que es posible que tengáis que decirle a Wireshark, con la opción “Decode As …” disponible al hacer click derecho en algún paquete, que el puerto 55450 debe decodificarlo como MQTT. Os dejo una captura de como se ve en mi Wireshark.
Y un ejemplo de un paquete JSON completo reconstruido:
{ "type": "V", "content": [ {"content":"0","dptId":1,"seq":1,"deviceToken":"2780****************"}, {"content":null,"dptId":1,"seq":2,"deviceToken":""}, {"content":null,"dptId":1,"seq":3,"deviceToken":""}, {"content":"24","dptId":1,"seq":4,"deviceToken":""}, {"content":"67","dptId":1,"seq":5,"deviceToken":""}, {"content":"32","dptId":1,"seq":6,"deviceToken":""}, {"content":"0.016","dptId":1,"seq":7,"deviceToken":""}, {"content":"0.328","dptId":1,"seq":8,"deviceToken":""}, {"content":"654","dptId":1,"seq":9,"deviceToken":""}, {"content":null,"dptId":1,"seq":10,"deviceToken":""} ], "deviceToken": "2780****************" }
Las mediciones están en los campos “content” de las líneas con el siguiente número de secuencia “seq”:
- 4: Temperatura
- 5: Humedad
- 6: PM2.5
- 7: HCHO
- 8: TVOC
- 9: eCO2
Capturar el tráfico e ir decodificando los paquetes no es práctico para obtener las mediciones así que, como ya conocemos la cola MQTT a la que hay que suscribirse, podemos suscribirnos nosotros mismos y obtener la información. Para ello podemos utilizar, por ejemplo, este script, (requiere instalar la librería paho-mqtt de python) que pasándole como parámetro la cola MQTT que corresponde con nuestro dispositivo, nos mostrará los datos en pantalla cada pocos segundos:
Si además tienes un Grafana montado, con unas ligeras modificaciones al script anterior te puedes montar un bonito dashboard con todos los datos, como por ejemplo el siguiente:
Espero que os haya gustado el artículo y si tenéis comentarios los hagáis llegar por aquí o al grupo de Telegram.
¡Muchas gracias a José V. por el tutorial!
La entrada Tutorial: Integración del sensor JQ-300 se publicó primero en Domótica en Casa.