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