diff --git a/homeassistant/components/number/const.py b/homeassistant/components/number/const.py index 9824d736fe9..9df044ebc8b 100644 --- a/homeassistant/components/number/const.py +++ b/homeassistant/components/number/const.py @@ -330,7 +330,7 @@ class NumberDeviceClass(StrEnum): Unit of measurement: - `mbar`, `cbar`, `bar` - - `Pa`, `hPa`, `kPa` + - `mPa`, `Pa`, `hPa`, `kPa` - `inHg` - `psi` - `inH₂O` diff --git a/homeassistant/components/sensor/const.py b/homeassistant/components/sensor/const.py index 356d2313c31..86af837e2b3 100644 --- a/homeassistant/components/sensor/const.py +++ b/homeassistant/components/sensor/const.py @@ -365,7 +365,7 @@ class SensorDeviceClass(StrEnum): Unit of measurement: - `mbar`, `cbar`, `bar` - - `Pa`, `hPa`, `kPa` + - `mPa`, `Pa`, `hPa`, `kPa` - `inHg` - `psi` - `inH₂O` diff --git a/homeassistant/const.py b/homeassistant/const.py index f5d6dd5b4a9..13f61eec6b1 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -613,6 +613,7 @@ class UnitOfFrequency(StrEnum): class UnitOfPressure(StrEnum): """Pressure units.""" + MILLIPASCAL = "mPa" PA = "Pa" HPA = "hPa" KPA = "kPa" diff --git a/homeassistant/util/unit_conversion.py b/homeassistant/util/unit_conversion.py index d57913ee397..44ea5cbdd90 100644 --- a/homeassistant/util/unit_conversion.py +++ b/homeassistant/util/unit_conversion.py @@ -464,6 +464,7 @@ class PressureConverter(BaseUnitConverter): UNIT_CLASS = "pressure" _UNIT_CONVERSION: dict[str | None, float] = { + UnitOfPressure.MILLIPASCAL: 1 * 1000, UnitOfPressure.PA: 1, UnitOfPressure.HPA: 1 / 100, UnitOfPressure.KPA: 1 / 1000, @@ -478,6 +479,7 @@ class PressureConverter(BaseUnitConverter): / (_MM_TO_M * 1000 * _STANDARD_GRAVITY * _MERCURY_DENSITY), } VALID_UNITS = { + UnitOfPressure.MILLIPASCAL, UnitOfPressure.PA, UnitOfPressure.HPA, UnitOfPressure.KPA, diff --git a/homeassistant/util/unit_system.py b/homeassistant/util/unit_system.py index 3268520e3f6..4bc79a4da22 100644 --- a/homeassistant/util/unit_system.py +++ b/homeassistant/util/unit_system.py @@ -376,6 +376,7 @@ US_CUSTOMARY_SYSTEM = UnitSystem( ("pressure", UnitOfPressure.MBAR): UnitOfPressure.PSI, ("pressure", UnitOfPressure.CBAR): UnitOfPressure.PSI, ("pressure", UnitOfPressure.BAR): UnitOfPressure.PSI, + ("pressure", UnitOfPressure.MILLIPASCAL): UnitOfPressure.PSI, ("pressure", UnitOfPressure.PA): UnitOfPressure.PSI, ("pressure", UnitOfPressure.HPA): UnitOfPressure.PSI, ("pressure", UnitOfPressure.KPA): UnitOfPressure.PSI, diff --git a/tests/components/sensor/test_recorder.py b/tests/components/sensor/test_recorder.py index 2f8e8ce0729..cfb74b563a8 100644 --- a/tests/components/sensor/test_recorder.py +++ b/tests/components/sensor/test_recorder.py @@ -263,6 +263,7 @@ async def assert_validation_result( ("distance", "mi", "mi", "mi", "distance", 13.050847, -10, 30), ("humidity", "%", "%", "%", "unitless", 13.050847, -10, 30), ("humidity", None, None, None, "unitless", 13.050847, -10, 30), + ("pressure", "mPa", "mPa", "mPa", "pressure", 13.050847, -10, 30), ("pressure", "Pa", "Pa", "Pa", "pressure", 13.050847, -10, 30), ("pressure", "hPa", "hPa", "hPa", "pressure", 13.050847, -10, 30), ("pressure", "mbar", "mbar", "mbar", "pressure", 13.050847, -10, 30), @@ -2601,6 +2602,7 @@ async def test_compile_hourly_energy_statistics_multiple( ("distance", "mi", 30), ("humidity", "%", 30), ("humidity", None, 30), + ("pressure", "mPa", 30), ("pressure", "Pa", 30), ("pressure", "hPa", 30), ("pressure", "mbar", 30), @@ -2767,6 +2769,7 @@ async def test_compile_hourly_statistics_partially_unavailable( ("distance", "mi", 30), ("humidity", "%", 30), ("humidity", None, 30), + ("pressure", "mPa", 30), ("pressure", "Pa", 30), ("pressure", "hPa", 30), ("pressure", "mbar", 30), @@ -3045,6 +3048,15 @@ async def test_compile_hourly_statistics_fails( "volume", StatisticMeanType.ARITHMETIC, ), + ( + "measurement", + "pressure", + "mPa", + "mPa", + "mPa", + "pressure", + StatisticMeanType.ARITHMETIC, + ), ( "measurement", "pressure", @@ -5125,7 +5137,7 @@ async def async_record_states( "pressure", "psi", "bar", - "Pa, bar, cbar, hPa, inHg, inH₂O, kPa, mbar, mmHg, psi", + "Pa, bar, cbar, hPa, inHg, inH₂O, kPa, mPa, mbar, mmHg, psi", ), ( METRIC_SYSTEM, @@ -5133,7 +5145,7 @@ async def async_record_states( "pressure", "Pa", "bar", - "Pa, bar, cbar, hPa, inHg, inH₂O, kPa, mbar, mmHg, psi", + "Pa, bar, cbar, hPa, inHg, inH₂O, kPa, mPa, mbar, mmHg, psi", ), ], ) @@ -5364,7 +5376,7 @@ async def test_validate_statistics_unit_ignore_device_class( "pressure", "psi", "bar", - "Pa, bar, cbar, hPa, inHg, inH₂O, kPa, mbar, mmHg, psi", + "Pa, bar, cbar, hPa, inHg, inH₂O, kPa, mPa, mbar, mmHg, psi", ), ( METRIC_SYSTEM, @@ -5372,7 +5384,7 @@ async def test_validate_statistics_unit_ignore_device_class( "pressure", "Pa", "bar", - "Pa, bar, cbar, hPa, inHg, inH₂O, kPa, mbar, mmHg, psi", + "Pa, bar, cbar, hPa, inHg, inH₂O, kPa, mPa, mbar, mmHg, psi", ), ( METRIC_SYSTEM, diff --git a/tests/util/test_unit_conversion.py b/tests/util/test_unit_conversion.py index ba4926eba6d..91a9ed08479 100644 --- a/tests/util/test_unit_conversion.py +++ b/tests/util/test_unit_conversion.py @@ -675,6 +675,7 @@ _CONVERTED_VALUE: dict[ PressureConverter: [ (1000, UnitOfPressure.HPA, 14.5037743897, UnitOfPressure.PSI), (1000, UnitOfPressure.HPA, 29.5299801647, UnitOfPressure.INHG), + (1000, UnitOfPressure.HPA, 100000000, UnitOfPressure.MILLIPASCAL), (1000, UnitOfPressure.HPA, 100000, UnitOfPressure.PA), (1000, UnitOfPressure.HPA, 100, UnitOfPressure.KPA), (1000, UnitOfPressure.HPA, 1000, UnitOfPressure.MBAR), @@ -682,6 +683,7 @@ _CONVERTED_VALUE: dict[ (1000, UnitOfPressure.HPA, 401.46307866177, UnitOfPressure.INH2O), (100, UnitOfPressure.KPA, 14.5037743897, UnitOfPressure.PSI), (100, UnitOfPressure.KPA, 29.5299801647, UnitOfPressure.INHG), + (100, UnitOfPressure.KPA, 100000000, UnitOfPressure.MILLIPASCAL), (100, UnitOfPressure.KPA, 100000, UnitOfPressure.PA), (100, UnitOfPressure.KPA, 1000, UnitOfPressure.HPA), (100, UnitOfPressure.KPA, 1000, UnitOfPressure.MBAR), @@ -689,6 +691,7 @@ _CONVERTED_VALUE: dict[ (100, UnitOfPressure.INH2O, 3.6127291827353996, UnitOfPressure.PSI), (100, UnitOfPressure.INH2O, 186.83201548767, UnitOfPressure.MMHG), (100, UnitOfPressure.INH2O, 7.3555912463681, UnitOfPressure.INHG), + (100, UnitOfPressure.INH2O, 24908890.833333, UnitOfPressure.MILLIPASCAL), (100, UnitOfPressure.INH2O, 24908.890833333, UnitOfPressure.PA), (100, UnitOfPressure.INH2O, 249.08890833333, UnitOfPressure.HPA), (100, UnitOfPressure.INH2O, 249.08890833333, UnitOfPressure.MBAR), @@ -698,6 +701,7 @@ _CONVERTED_VALUE: dict[ (30, UnitOfPressure.INHG, 101.59167, UnitOfPressure.KPA), (30, UnitOfPressure.INHG, 1015.9167, UnitOfPressure.HPA), (30, UnitOfPressure.INHG, 101591.67, UnitOfPressure.PA), + (30, UnitOfPressure.INHG, 101591670, UnitOfPressure.MILLIPASCAL), (30, UnitOfPressure.INHG, 1015.9167, UnitOfPressure.MBAR), (30, UnitOfPressure.INHG, 101.59167, UnitOfPressure.CBAR), (30, UnitOfPressure.INHG, 762, UnitOfPressure.MMHG), @@ -706,6 +710,7 @@ _CONVERTED_VALUE: dict[ (30, UnitOfPressure.MMHG, 3.99967, UnitOfPressure.KPA), (30, UnitOfPressure.MMHG, 39.9967, UnitOfPressure.HPA), (30, UnitOfPressure.MMHG, 3999.67, UnitOfPressure.PA), + (30, UnitOfPressure.MMHG, 3999670, UnitOfPressure.MILLIPASCAL), (30, UnitOfPressure.MMHG, 39.9967, UnitOfPressure.MBAR), (30, UnitOfPressure.MMHG, 3.99967, UnitOfPressure.CBAR), (30, UnitOfPressure.MMHG, 1.181102, UnitOfPressure.INHG), diff --git a/tests/util/test_unit_system.py b/tests/util/test_unit_system.py index 54e9d4080e3..c98611bd16a 100644 --- a/tests/util/test_unit_system.py +++ b/tests/util/test_unit_system.py @@ -608,6 +608,7 @@ UNCONVERTED_UNITS_METRIC_SYSTEM = { UnitOfPressure.KPA, UnitOfPressure.MBAR, UnitOfPressure.MMHG, + UnitOfPressure.MILLIPASCAL, UnitOfPressure.PA, ), SensorDeviceClass.SPEED: (