Skip to content

HC8 CO₂ Sensor

The hc8 sensor platform allows you to use HC8 CO₂ sensors.

HC8 CO₂ Sensor
HC8 CO₂ Sensor.

As the communication with the HC8 sensor 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 HC8 and the tx_pin connected to the RX Pin of the HC8 (it’s switched because the TX/RX labels are from the perspective of the HC8). Additionally, you need to set the baud rate to 9600.

# Example configuration entry
sensor:
- platform: hc8
co2:
name: HC8 CO2 Value
  • co2 (Optional): The CO₂ data from the sensor in parts per million (ppm). 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.

  • warmup_time (Optional, Time): The sensor has a warmup period during which it returns inaccurate readings (e.g., 500ppm, 505ppm). This setting discards readings until the warmup time has elapsed (returning NaN during warmup). The datasheet specifies a 10-minute preheating time for full accuracy, with 90% accuracy achieved after 3 minutes. Empirical evidence shows that reasonable values are usually returned after about 1 minute. Defaults to 75s.

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

Before executing baseline calibration, ensure the HC8 sensor has been operating in a stable gas environment (with known CO₂ concentration) for at least 2 minutes.

Warning: Only calibrate the sensor in a known stable environment (e.g., outdoors or in a well-ventilated room). Incorrect calibration will result in inaccurate readings.

on_...:
then:
- hc8.calibrate:
id: my_hc8_id
baseline: 420 # Current outdoor CO₂ level

You can provide an action to perform from Home Assistant

api:
actions:
- action: hc8_calibrate
variables:
my_baseline: int
then:
- hc8.calibrate:
id: my_hc8_id
baseline: !lambda 'return my_baseline;'