Home assistant es una herramienta open source que monitoriza y controlar dispositivos IoT en el hogar. Permite monitorizar, graficar, crear automatismos con estos dispositivos.
ESPHome es también una herramienta open source creado para controlar dispositivos ESP8266 y ESP32 de forma sencilla. Estos microprocesadores cuenta con conectividad Wifi y Bluetooth y permiten interactuar con un gran número de sensores y actuadores.
Sensores control de calidad del aire
Para el control de calidad del aire tengo configurados tres sensores, conectados a un ESP32: sensor de polvo SDS011, sensor TVOC CCS811 y un sensor de co2 MH-Z19.
Sensor SDS011
Este sensor de partículas detecta la presencia de partículas de tipo PM2.5 y PM10. En el fichero de configuración establecemos un update_interval
de 10 minutos. Es posible configurarlo para realizar una medición continua configurándolo a 0m, pero no es recomendable ya que produciría un gran desgaste en el sensor.
Lo conectamos mediante un bus UART
definido como uart2
.
Documentación ESPHome | Datasheet
Sensor CCS811
Sensor para detectar la partículas de eCO2 y TVOC, aunque solo lo utilizo para obtener el valor de TVOC, ya que pare el CO2 parece más fiable el MH-Z19. Tenemos configurado update_interval
para tomar medidas cada 60 segundos.
Este sensor se conecta al ESP32 mediante un bus i2c
definido en el fichero de comunicación en los pines GPIO33
y GPIO25
.
Documentación ESPHome | Datasheet
Calibración
También hemos establecido el valor para baseline
para calibrar el dispositivo. Este proceso de calibración es relativamente sencillo, solo hay que seguir estas instrucciones. Es importante antes de realizar la calibración que este tipo de sensores necesitan un calentamiento previo antes de obtener unas lecturas fiables.
Valores de temperatura y humedad
Este sensor necesitan acceder a los valores de temperatura y humedad de la estancia para mejorar la precisión de las lecturas. En nuestro caso hacemos uso de un sensor instalado también en este ESP32 (un sensor de tipo AM2302): sensor_temperature
y sensor_humidity
.
Sensor MH-Z19
Este sensor mide la presensia de CO2 mediante un sensor infrarrojo no disperso o NDIR. Igual que en el resto tenemos configurada la lectura cada 60 segundos.
Este sensor se conecta con un bus UART
definido como uart1
.
Documentación ESPHome | Datasheet
Calibración
La calibración en este caso se realiza de otra forma. En primer lugar desactivamos la calibración automática con automatic_baseline_calibration
a false
ya que si se usa el sensor en interiores puede provocar lecturas erróneas.
Realizaremos la calibración mediante el servicio mhz19_calibrate_zero
definido en el fichero de configuración para que sea accesible desde Home Assistant. Colocamos el sensor en una zona con una concentración baja de CO2 (en el exterior) y ejecutamos el servicio desde Home Assistant en Herramientas de desarrollo -> Servicio -> ESPHome: nodemcu4_mhz19_calibrate_zero y a continuación “Llamar servicio”
ESP32 y ESPHome
Conectamos estos sensores a nuestro ESP32 siguiendo este diagrama.
Este es el archivo de configuración.
esphome:
name: nodemcu4
platform: ESP32
board: nodemcu-32s
wifi:
ssid: ...
password: ...
fast_connect: true
uart:
- rx_pin: GPIO22
tx_pin: GPIO23
baud_rate: 9600
id: uart1
- rx_pin: GPIO15
tx_pin: GPIO2
baud_rate: 9600
id: uart2
i2c:
sda: GPIO33
scl: GPIO25
sensor:
# This sensor is defined here only for ccs811 device calibration
- platform: dht
pin: GPIO5
temperature:
name: "Sensor temperature"
id: "sensor_temperature"
humidity:
name: "Sensor humidity"
id: "sensor_humidity"
update_interval: 60s
model: AM2302
- platform: sds011
pm_2_5:
name: "Particulate Matter <2.5µm Concentration"
pm_10_0:
name: "Particulate Matter <10.0µm Concentration"
update_interval: 10min
uart_id: uart2
- platform: ccs811
eco2:
name: "eCO2 Value"
tvoc:
name: "Total Volatile Organic Compound"
update_interval: 60s
baseline: 0x0AC2
temperature : "sensor_temperature"
humidity: "sensor_humidity"
- platform: mhz19
co2:
name: "MH-Z19 CO2 Value"
temperature:
name: "MH-Z19 Temperature"
update_interval: 60s
automatic_baseline_calibration: false
id: mhz19_sensor
uart_id: uart1
ota:
logger:
# Enable Home Assistant API
api:
services:
- service: mhz19_calibrate_zero
then:
- mhz19.calibrate_zero: mhz19_sensor
Los sensores sds011 y mhz19 hacen uso de un bus UART. Este bus no puede compartirse entre varios sensores, por lo que creamos dos buses cada uno con un id: uart1
y uart2
. El sensor ccs811 usa el bus de comunicaciones i2c. Definimos este bus en los canales GPIO33
y GPIO25
.
Home Assistant
En Home Assistan podemos configurar gráficos para visualizar los datos registrados: Partículas PM2.5 y PM10, co2 y TVOC.
Además podemos crear automatismos con estos valores, como si fuera cualquier otro sensor disponible en Home Assistant.