MH-Z19 CO_2 and Temperature Sensor

The mhz19 sensor platform allows you to use MH-Z19 CO_2 and temperature sensors (Revspace) with ESPHome. The CO_2 measurement also works with the MH-Z16 and MH-Z14 sensors.


MH-Z19 CO_2 and Temperature Sensor.

As the communication with the MH-Z19 is done using UART, you need to have an UART bus in your configuration with the rx_pin connected to the TX pin of the MH-Z19 and the tx_pin connected to the RX Pin of the MH-Z19 (it’s switched because the TX/RX labels are from the perspective of the MH-Z19). Additionally, you need to set the baud rate to 9600.

# Example configuration entry
  - platform: mhz19
      name: MH-Z19 CO2 Value
      name: MH-Z19 Temperature

Configuration variables:

  • co2 (Required): The CO_2 data from the sensor in parts per million (ppm). All options from Sensor.

  • temperature (Required): The information for the temperature sensor. Please note that this is not officially documented in the datasheet and seems to be quite inaccurate. All options from Sensor.

  • update_interval (Optional, Time): The interval to check the sensor. Defaults to 60s.

  • uart_id (Optional, ID): Manually specify the ID of the UART Component if you want to use multiple UART buses.

  • id (Optional, ID): Manually specify the ID used for actions.

  • automatic_baseline_calibration (Optional, boolean): MH-Z19 has automatic calibration procedure. The automatic calibration cycle is every 24 hours after powered on. Set this value to false to disable ABC on boot (it’s better if you use sensor indoor). Set this value to true to enable ABC on boot. Doesn’t send calibration command if not set (default sensor logic will be used).

  • warmup_time (Optional, Time): The sensor has a warmup time and before that, it returns bougus readings (eg: 500ppm, 505ppm…). This setting discards readings until the warmup time happened (NAN is returned). The datasheet says preheating takes 1min, but empirical tests have shown it often takes more, so the 75s default should be enough to accomodate for that.


Pins on the MH-Z19. Only the ones marked with a red circle need to be connected.

mhz19.calibrate_zero Action

This action executes zero point calibration command on the sensor with the given ID.

If you want to execute zero point calibration, the MH-Z19 sensor must work in stable gas environment (400ppm) for over 20 minutes and you execute this function.

    - mhz19.calibrate_zero: my_mhz19_id

You can provide service to call it from Home Assistant

    - service: mhz19_calibrate_zero
        - mhz19.calibrate_zero: my_mhz19_id

mhz19.abc_enable Action

This action enables automatic baseline calibration on the sensor with the given ID.

    - mhz19.abc_enable: my_mhz19_id

mhz19.abc_disable Action

This action disables automatic baseline calibration on the sensor with the given ID.

    - mhz19.abc_disable: my_mhz19_id

You can provide switch and control ABC from Home Assistant

  - platform: template
    name: "MH-Z19 ABC"
    optimistic: true
      mhz19.abc_enable: my_mhz19_id
      mhz19.abc_disable: my_mhz19_id

See Also