diff --git a/homeassistant/components/number/const.py b/homeassistant/components/number/const.py index 1d82d4a5a96..83777d47322 100644 --- a/homeassistant/components/number/const.py +++ b/homeassistant/components/number/const.py @@ -290,7 +290,7 @@ class NumberDeviceClass(StrEnum): OZONE = "ozone" """Amount of O3. - Unit of measurement: `ppb` (parts per billion), `μg/m³` + Unit of measurement: `ppb` (parts per billion), `ppm` (parts per million), `μg/m³` """ PH = "ph" @@ -553,6 +553,7 @@ DEVICE_CLASS_UNITS: dict[NumberDeviceClass, set[type[StrEnum] | str | None]] = { NumberDeviceClass.NITROUS_OXIDE: {CONCENTRATION_MICROGRAMS_PER_CUBIC_METER}, NumberDeviceClass.OZONE: { CONCENTRATION_PARTS_PER_BILLION, + CONCENTRATION_PARTS_PER_MILLION, CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, }, NumberDeviceClass.PH: {None}, diff --git a/homeassistant/components/sensor/const.py b/homeassistant/components/sensor/const.py index 88fde1569c0..a1ee3e0417e 100644 --- a/homeassistant/components/sensor/const.py +++ b/homeassistant/components/sensor/const.py @@ -304,7 +304,7 @@ class SensorDeviceClass(StrEnum): OZONE = "ozone" """Amount of O3. - Unit of measurement: `ppb` (parts per billion),`μg/m³` + Unit of measurement: `ppb` (parts per billion), `ppm` (parts per million), `μg/m³` """ PH = "ph" @@ -648,6 +648,7 @@ DEVICE_CLASS_UNITS: dict[SensorDeviceClass, set[type[StrEnum] | str | None]] = { SensorDeviceClass.NITROUS_OXIDE: {CONCENTRATION_MICROGRAMS_PER_CUBIC_METER}, SensorDeviceClass.OZONE: { CONCENTRATION_PARTS_PER_BILLION, + CONCENTRATION_PARTS_PER_MILLION, CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, }, SensorDeviceClass.PH: {None}, diff --git a/homeassistant/util/unit_conversion.py b/homeassistant/util/unit_conversion.py index cad31e140fb..1f9c0c8ab90 100644 --- a/homeassistant/util/unit_conversion.py +++ b/homeassistant/util/unit_conversion.py @@ -526,12 +526,14 @@ class OzoneConcentrationConverter(BaseUnitConverter): UNIT_CLASS = "ozone" _UNIT_CONVERSION: dict[str | None, float] = { CONCENTRATION_PARTS_PER_BILLION: 1e9, + CONCENTRATION_PARTS_PER_MILLION: 1e6, CONCENTRATION_MICROGRAMS_PER_CUBIC_METER: ( _OZONE_MOLAR_MASS / _AMBIENT_IDEAL_GAS_MOLAR_VOLUME * 1e6 ), } VALID_UNITS = { CONCENTRATION_PARTS_PER_BILLION, + CONCENTRATION_PARTS_PER_MILLION, CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, } diff --git a/tests/util/test_unit_conversion.py b/tests/util/test_unit_conversion.py index 13ba4d873cf..9deeecbd604 100644 --- a/tests/util/test_unit_conversion.py +++ b/tests/util/test_unit_conversion.py @@ -776,6 +776,18 @@ _CONVERTED_VALUE: dict[ 60.1378, CONCENTRATION_PARTS_PER_BILLION, ), + ( + 1, + CONCENTRATION_PARTS_PER_MILLION, + 1995.417, + CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, + ), + ( + 120, + CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, + 0.0601378, + CONCENTRATION_PARTS_PER_MILLION, + ), ], PowerConverter: [ (10, UnitOfPower.KILO_WATT, 10000, UnitOfPower.WATT),