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.

SDS011

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.

CCS811

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.

MH-Z19

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”

Calibrate Zero

ESP32 y ESPHome

Conectamos estos sensores a nuestro ESP32 siguiendo este diagrama.

Diagrama conexión sensores a ESP32

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.

Home Assistant Graphs

Además podemos crear automatismos con estos valores, como si fuera cualquier otro sensor disponible en Home Assistant.