Source code for pi_weather.core.sensors.stcc4.co2_ranges
"""Definition of CO2 ranges"""
from pi_weather.utils.logs import get_logger
logger = get_logger(__name__)
# The STCC4 sensor has accuracy in this range: 400 - 5000 ppm
SENSOR_CO2_LIMIT_MIN: float = 400.0
SENSOR_CO2_LIMIT_MAX: float = 5000.0
# Air quality ranges
THRESHOLD_1: float = 400.0
THRESHOLD_2: float = 600.0
THRESHOLD_3: float = 800.0
THRESHOLD_4: float = 1000.0
THRESHOLD_5: float = 1500.0
THRESHOLD_6: float = 2000.0
THRESHOLD_7: float = 3000.0
THRESHOLD_8: float = 5000.0
[docs]
def get_air_quality_index(
co2_concentration: float | int | None = None,
) -> int:
"""
Function to get an air quality index from the input CO2 concentration
:param co2_concentration: CO2 concentration
:type co2_concentration: float | int | None
:return: Air quality index
:rtype: int
"""
if co2_concentration is None:
logger.error("No CO2 concentration provided")
return -1
if (
co2_concentration <= SENSOR_CO2_LIMIT_MIN
or co2_concentration >= SENSOR_CO2_LIMIT_MAX
):
logger.error("Input CO2 concentration out of sensor's range")
return -1
if co2_concentration < THRESHOLD_2:
return 1 # 400-600 :=> EXCELLENT
elif co2_concentration < THRESHOLD_3:
return 2 # 600-800 :=> VERY GOOD
elif co2_concentration < THRESHOLD_4:
return 3 # 800-1000 :=> GOOD
elif co2_concentration < THRESHOLD_5:
return 4 # 1000-1500 :=> ACCEPTABLE
elif co2_concentration < THRESHOLD_6:
return 5 # 1500-2000 :=> BAD
elif co2_concentration < THRESHOLD_7:
return 6 # 2000-3000 :=> VERY BAD
elif co2_concentration < THRESHOLD_8:
return 7 # 3000-5000 :=> CRITICAL
return -1