Add support for `inH₂O` pressure unit (#148289)

Co-authored-by: Erik Montnemery <erik@montnemery.com>
pull/152158/head
ekobres 2025-09-12 05:24:45 -04:00 committed by GitHub
parent baf4382724
commit 4c22264b13
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 23 additions and 4 deletions

View File

@ -328,6 +328,7 @@ class NumberDeviceClass(StrEnum):
- `Pa`, `hPa`, `kPa`
- `inHg`
- `psi`
- `inH₂O`
"""
REACTIVE_ENERGY = "reactive_energy"

View File

@ -361,6 +361,7 @@ class SensorDeviceClass(StrEnum):
- `Pa`, `hPa`, `kPa`
- `inHg`
- `psi`
- `inH₂O`
"""
REACTIVE_ENERGY = "reactive_energy"

View File

@ -749,6 +749,7 @@ class UnitOfPressure(StrEnum):
MBAR = "mbar"
MMHG = "mmHg"
INHG = "inHg"
INH2O = "inH₂O"
PSI = "psi"

View File

@ -82,6 +82,7 @@ _STONE_TO_G = _POUND_TO_G * 14 # 14 pounds to a stone
# Pressure conversion constants
_STANDARD_GRAVITY = 9.80665
_MERCURY_DENSITY = 13.5951
_INH2O_TO_PA = 249.0889083333348 # 1 inH₂O = 249.0889083333348 Pa at 4°C
# Volume conversion constants
_L_TO_CUBIC_METER = 0.001 # 1 L = 0.001 m³
@ -435,6 +436,7 @@ class PressureConverter(BaseUnitConverter):
UnitOfPressure.MBAR: 1 / 100,
UnitOfPressure.INHG: 1
/ (_IN_TO_M * 1000 * _STANDARD_GRAVITY * _MERCURY_DENSITY),
UnitOfPressure.INH2O: 1 / _INH2O_TO_PA,
UnitOfPressure.PSI: 1 / 6894.757,
UnitOfPressure.MMHG: 1
/ (_MM_TO_M * 1000 * _STANDARD_GRAVITY * _MERCURY_DENSITY),
@ -447,6 +449,7 @@ class PressureConverter(BaseUnitConverter):
UnitOfPressure.CBAR,
UnitOfPressure.MBAR,
UnitOfPressure.INHG,
UnitOfPressure.INH2O,
UnitOfPressure.PSI,
UnitOfPressure.MMHG,
}

View File

@ -296,6 +296,7 @@ METRIC_SYSTEM = UnitSystem(
# Convert non-metric pressure
("pressure", UnitOfPressure.PSI): UnitOfPressure.KPA,
("pressure", UnitOfPressure.INHG): UnitOfPressure.HPA,
("pressure", UnitOfPressure.INH2O): UnitOfPressure.KPA,
# Convert non-metric speeds except knots to km/h
("speed", UnitOfSpeed.FEET_PER_SECOND): UnitOfSpeed.KILOMETERS_PER_HOUR,
("speed", UnitOfSpeed.INCHES_PER_SECOND): UnitOfSpeed.MILLIMETERS_PER_SECOND,
@ -379,6 +380,7 @@ US_CUSTOMARY_SYSTEM = UnitSystem(
("pressure", UnitOfPressure.HPA): UnitOfPressure.PSI,
("pressure", UnitOfPressure.KPA): UnitOfPressure.PSI,
("pressure", UnitOfPressure.MMHG): UnitOfPressure.INHG,
("pressure", UnitOfPressure.INH2O): UnitOfPressure.PSI,
# Convert non-USCS speeds, except knots, to mph
("speed", UnitOfSpeed.METERS_PER_SECOND): UnitOfSpeed.MILES_PER_HOUR,
("speed", UnitOfSpeed.MILLIMETERS_PER_SECOND): UnitOfSpeed.INCHES_PER_SECOND,

View File

@ -4957,14 +4957,14 @@ async def async_record_states(
PRESSURE_SENSOR_ATTRIBUTES,
"psi",
"bar",
"Pa, bar, cbar, hPa, inHg, kPa, mbar, mmHg, psi",
"Pa, bar, cbar, hPa, inHg, inH₂O, kPa, mbar, mmHg, psi",
),
(
METRIC_SYSTEM,
PRESSURE_SENSOR_ATTRIBUTES,
"Pa",
"bar",
"Pa, bar, cbar, hPa, inHg, kPa, mbar, mmHg, psi",
"Pa, bar, cbar, hPa, inHg, inH₂O, kPa, mbar, mmHg, psi",
),
],
)
@ -5175,14 +5175,14 @@ async def test_validate_statistics_unit_ignore_device_class(
PRESSURE_SENSOR_ATTRIBUTES,
"psi",
"bar",
"Pa, bar, cbar, hPa, inHg, kPa, mbar, mmHg, psi",
"Pa, bar, cbar, hPa, inHg, inH₂O, kPa, mbar, mmHg, psi",
),
(
METRIC_SYSTEM,
PRESSURE_SENSOR_ATTRIBUTES,
"Pa",
"bar",
"Pa, bar, cbar, hPa, inHg, kPa, mbar, mmHg, psi",
"Pa, bar, cbar, hPa, inHg, inH₂O, kPa, mbar, mmHg, psi",
),
(
METRIC_SYSTEM,

View File

@ -672,12 +672,21 @@ _CONVERTED_VALUE: dict[
(1000, UnitOfPressure.HPA, 100, UnitOfPressure.KPA),
(1000, UnitOfPressure.HPA, 1000, UnitOfPressure.MBAR),
(1000, UnitOfPressure.HPA, 100, UnitOfPressure.CBAR),
(1000, UnitOfPressure.HPA, 401.46307866177, UnitOfPressure.INH2O),
(100, UnitOfPressure.KPA, 14.5037743897, UnitOfPressure.PSI),
(100, UnitOfPressure.KPA, 29.5299801647, UnitOfPressure.INHG),
(100, UnitOfPressure.KPA, 100000, UnitOfPressure.PA),
(100, UnitOfPressure.KPA, 1000, UnitOfPressure.HPA),
(100, UnitOfPressure.KPA, 1000, UnitOfPressure.MBAR),
(100, UnitOfPressure.KPA, 100, UnitOfPressure.CBAR),
(100, UnitOfPressure.INH2O, 3.6127291827353996, UnitOfPressure.PSI),
(100, UnitOfPressure.INH2O, 186.83201548767, UnitOfPressure.MMHG),
(100, UnitOfPressure.INH2O, 7.3555912463681, UnitOfPressure.INHG),
(100, UnitOfPressure.INH2O, 24908.890833333, UnitOfPressure.PA),
(100, UnitOfPressure.INH2O, 249.08890833333, UnitOfPressure.HPA),
(100, UnitOfPressure.INH2O, 249.08890833333, UnitOfPressure.MBAR),
(100, UnitOfPressure.INH2O, 24.908890833333, UnitOfPressure.KPA),
(100, UnitOfPressure.INH2O, 24.908890833333, UnitOfPressure.CBAR),
(30, UnitOfPressure.INHG, 14.7346266155, UnitOfPressure.PSI),
(30, UnitOfPressure.INHG, 101.59167, UnitOfPressure.KPA),
(30, UnitOfPressure.INHG, 1015.9167, UnitOfPressure.HPA),
@ -685,6 +694,7 @@ _CONVERTED_VALUE: dict[
(30, UnitOfPressure.INHG, 1015.9167, UnitOfPressure.MBAR),
(30, UnitOfPressure.INHG, 101.59167, UnitOfPressure.CBAR),
(30, UnitOfPressure.INHG, 762, UnitOfPressure.MMHG),
(30, UnitOfPressure.INHG, 407.85300589959, UnitOfPressure.INH2O),
(30, UnitOfPressure.MMHG, 0.580103, UnitOfPressure.PSI),
(30, UnitOfPressure.MMHG, 3.99967, UnitOfPressure.KPA),
(30, UnitOfPressure.MMHG, 39.9967, UnitOfPressure.HPA),
@ -692,6 +702,7 @@ _CONVERTED_VALUE: dict[
(30, UnitOfPressure.MMHG, 39.9967, UnitOfPressure.MBAR),
(30, UnitOfPressure.MMHG, 3.99967, UnitOfPressure.CBAR),
(30, UnitOfPressure.MMHG, 1.181102, UnitOfPressure.INHG),
(30, UnitOfPressure.MMHG, 16.0572051431838, UnitOfPressure.INH2O),
(5, UnitOfPressure.BAR, 72.51887, UnitOfPressure.PSI),
],
ReactiveEnergyConverter: [