diff --git a/homeassistant/components/number/const.py b/homeassistant/components/number/const.py index f29206df7c5..9824d736fe9 100644 --- a/homeassistant/components/number/const.py +++ b/homeassistant/components/number/const.py @@ -124,7 +124,7 @@ class NumberDeviceClass(StrEnum): CO = "carbon_monoxide" """Carbon Monoxide gas concentration. - Unit of measurement: `ppm` (parts per million), `mg/m³` + Unit of measurement: `ppm` (parts per million), `mg/m³`, `μg/m³` """ CO2 = "carbon_dioxide" @@ -478,6 +478,7 @@ DEVICE_CLASS_UNITS: dict[NumberDeviceClass, set[type[StrEnum] | str | None]] = { NumberDeviceClass.CO: { CONCENTRATION_PARTS_PER_MILLION, CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER, + CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, }, NumberDeviceClass.CO2: {CONCENTRATION_PARTS_PER_MILLION}, NumberDeviceClass.CONDUCTIVITY: set(UnitOfConductivity), diff --git a/homeassistant/components/sensor/const.py b/homeassistant/components/sensor/const.py index b91bd26d410..356d2313c31 100644 --- a/homeassistant/components/sensor/const.py +++ b/homeassistant/components/sensor/const.py @@ -157,7 +157,7 @@ class SensorDeviceClass(StrEnum): CO = "carbon_monoxide" """Carbon Monoxide gas concentration. - Unit of measurement: `ppm` (parts per million), `mg/m³` + Unit of measurement: `ppm` (parts per million), `mg/m³`, `μg/m³` """ CO2 = "carbon_dioxide" @@ -589,6 +589,7 @@ DEVICE_CLASS_UNITS: dict[SensorDeviceClass, set[type[StrEnum] | str | None]] = { SensorDeviceClass.CO: { CONCENTRATION_PARTS_PER_MILLION, CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER, + CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, }, SensorDeviceClass.CO2: {CONCENTRATION_PARTS_PER_MILLION}, SensorDeviceClass.CONDUCTIVITY: set(UnitOfConductivity), diff --git a/homeassistant/util/unit_conversion.py b/homeassistant/util/unit_conversion.py index 322410f61ec..d57913ee397 100644 --- a/homeassistant/util/unit_conversion.py +++ b/homeassistant/util/unit_conversion.py @@ -191,10 +191,14 @@ class CarbonMonoxideConcentrationConverter(BaseUnitConverter): CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER: ( _CARBON_MONOXIDE_MOLAR_MASS / _AMBIENT_IDEAL_GAS_MOLAR_VOLUME * 1e3 ), + CONCENTRATION_MICROGRAMS_PER_CUBIC_METER: ( + _CARBON_MONOXIDE_MOLAR_MASS / _AMBIENT_IDEAL_GAS_MOLAR_VOLUME * 1e6 + ), } VALID_UNITS = { CONCENTRATION_PARTS_PER_MILLION, CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER, + CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, } diff --git a/tests/util/test_unit_conversion.py b/tests/util/test_unit_conversion.py index 824d9708f7f..ba4926eba6d 100644 --- a/tests/util/test_unit_conversion.py +++ b/tests/util/test_unit_conversion.py @@ -288,18 +288,45 @@ _CONVERTED_VALUE: dict[ ), ], CarbonMonoxideConcentrationConverter: [ + # PPM to other units ( 1, CONCENTRATION_PARTS_PER_MILLION, 1.16441, CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER, ), + ( + 1, + CONCENTRATION_PARTS_PER_MILLION, + 1164.41, + CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, + ), + # MILLIGRAMS_PER_CUBIC_METER to other units ( 120, CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER, 103.05655, CONCENTRATION_PARTS_PER_MILLION, ), + ( + 120, + CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER, + 120000, + CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, + ), + # MICROGRAMS_PER_CUBIC_METER to other units + ( + 120000, + CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, + 103.05655, + CONCENTRATION_PARTS_PER_MILLION, + ), + ( + 120000, + CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, + 120, + CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER, + ), ], ConductivityConverter: [ (