Adjust precipitation units (#79780)
* Adjust precipitation units * Use PRECIPITATION_INTENSITY * Revert isy994 * Adjust SensorDeviceClass docstring * Adjust comment
This commit is contained in:
parent
a70f9b8995
commit
9afb4c6c9e
4 changed files with 83 additions and 25 deletions
|
@ -266,7 +266,7 @@ class SensorDeviceClass(StrEnum):
|
|||
SPEED = "speed"
|
||||
"""Generic speed.
|
||||
|
||||
Unit of measurement: `SPEED_*` units
|
||||
Unit of measurement: `SPEED_*` or `PRECIPITATION_INTENSITY_*` units
|
||||
- SI /metric: `mm/d`, `mm/h`, `m/s`, `km/h`
|
||||
- USCS / imperial: `in/d`, `in/h`, `ft/s`, `mph`
|
||||
- Nautical: `kn`
|
||||
|
|
|
@ -525,11 +525,15 @@ TIME_YEARS: Final = "y"
|
|||
|
||||
# Length units
|
||||
LENGTH_MILLIMETERS: Final = "mm"
|
||||
"""Note: for precipitation, please use PRECIPITATION_MILLIMETERS"""
|
||||
|
||||
LENGTH_CENTIMETERS: Final = "cm"
|
||||
LENGTH_METERS: Final = "m"
|
||||
LENGTH_KILOMETERS: Final = "km"
|
||||
|
||||
LENGTH_INCHES: Final = "in"
|
||||
"""Note: for precipitation, please use PRECIPITATION_INCHES"""
|
||||
|
||||
LENGTH_FEET: Final = "ft"
|
||||
LENGTH_YARD: Final = "yd"
|
||||
LENGTH_MILES: Final = "mi"
|
||||
|
@ -602,10 +606,25 @@ REVOLUTIONS_PER_MINUTE: Final = "rpm"
|
|||
IRRADIATION_WATTS_PER_SQUARE_METER: Final = "W/m²"
|
||||
IRRADIATION_BTUS_PER_HOUR_SQUARE_FOOT: Final = "BTU/(h×ft²)"
|
||||
|
||||
# Precipitation intensity units
|
||||
# The derivation of these units is a volume of rain amassing in a container
|
||||
# with constant cross section in a given time
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_DAY: Final = "in/d"
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_HOUR: Final = "in/h"
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_DAY: Final = "mm/d"
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_HOUR: Final = "mm/h"
|
||||
|
||||
# Precipitation units
|
||||
PRECIPITATION_MILLIMETERS_PER_HOUR: Final = "mm/h"
|
||||
# The derivation of these units is a volume of rain amassing in a container
|
||||
# with constant cross section
|
||||
PRECIPITATION_INCHES: Final = "in"
|
||||
PRECIPITATION_MILLIMETERS: Final = "mm"
|
||||
|
||||
PRECIPITATION_MILLIMETERS_PER_HOUR: Final = "mm/h"
|
||||
"""Deprecated: please use PRECIPITATION_INTENSITY_MILLIMETERS_PER_HOUR"""
|
||||
|
||||
PRECIPITATION_INCHES_PER_HOUR: Final = "in/h"
|
||||
"""Deprecated: please use PRECIPITATION_INTENSITY_INCHES_PER_HOUR"""
|
||||
|
||||
# Concentration units
|
||||
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER: Final = "µg/m³"
|
||||
|
@ -616,15 +635,22 @@ CONCENTRATION_PARTS_PER_MILLION: Final = "ppm"
|
|||
CONCENTRATION_PARTS_PER_BILLION: Final = "ppb"
|
||||
|
||||
# Speed units
|
||||
SPEED_MILLIMETERS_PER_DAY: Final = "mm/d"
|
||||
SPEED_FEET_PER_SECOND: Final = "ft/s"
|
||||
SPEED_INCHES_PER_DAY: Final = "in/d"
|
||||
SPEED_METERS_PER_SECOND: Final = "m/s"
|
||||
SPEED_INCHES_PER_HOUR: Final = "in/h"
|
||||
SPEED_KILOMETERS_PER_HOUR: Final = "km/h"
|
||||
SPEED_KNOTS: Final = "kn"
|
||||
SPEED_MILES_PER_HOUR: Final = "mph"
|
||||
|
||||
SPEED_MILLIMETERS_PER_DAY: Final = "mm/d"
|
||||
"""Deprecated: please use PRECIPITATION_INTENSITY_MILLIMETERS_PER_DAY"""
|
||||
|
||||
SPEED_INCHES_PER_DAY: Final = "in/d"
|
||||
"""Deprecated: please use PRECIPITATION_INTENSITY_INCHES_PER_DAY"""
|
||||
|
||||
SPEED_INCHES_PER_HOUR: Final = "in/h"
|
||||
"""Deprecated: please use PRECIPITATION_INTENSITY_INCHES_PER_HOUR"""
|
||||
|
||||
|
||||
# Signal_strength units
|
||||
SIGNAL_STRENGTH_DECIBELS: Final = "dB"
|
||||
SIGNAL_STRENGTH_DECIBELS_MILLIWATT: Final = "dBm"
|
||||
|
|
|
@ -21,6 +21,10 @@ from homeassistant.const import (
|
|||
MASS_POUNDS,
|
||||
POWER_KILO_WATT,
|
||||
POWER_WATT,
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_DAY,
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_HOUR,
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_DAY,
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_HOUR,
|
||||
PRESSURE_BAR,
|
||||
PRESSURE_CBAR,
|
||||
PRESSURE_HPA,
|
||||
|
@ -31,13 +35,10 @@ from homeassistant.const import (
|
|||
PRESSURE_PA,
|
||||
PRESSURE_PSI,
|
||||
SPEED_FEET_PER_SECOND,
|
||||
SPEED_INCHES_PER_DAY,
|
||||
SPEED_INCHES_PER_HOUR,
|
||||
SPEED_KILOMETERS_PER_HOUR,
|
||||
SPEED_KNOTS,
|
||||
SPEED_METERS_PER_SECOND,
|
||||
SPEED_MILES_PER_HOUR,
|
||||
SPEED_MILLIMETERS_PER_DAY,
|
||||
TEMP_CELSIUS,
|
||||
TEMP_FAHRENHEIT,
|
||||
TEMP_KELVIN,
|
||||
|
@ -238,24 +239,26 @@ class SpeedConverter(BaseUnitConverter):
|
|||
UNIT_CLASS = "speed"
|
||||
NORMALIZED_UNIT = SPEED_METERS_PER_SECOND
|
||||
_UNIT_CONVERSION: dict[str, float] = {
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_DAY: _DAYS_TO_SECS / _IN_TO_M,
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_HOUR: _HRS_TO_SECS / _IN_TO_M,
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_DAY: _DAYS_TO_SECS / _MM_TO_M,
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_HOUR: _HRS_TO_SECS / _MM_TO_M,
|
||||
SPEED_FEET_PER_SECOND: 1 / _FOOT_TO_M,
|
||||
SPEED_INCHES_PER_DAY: _DAYS_TO_SECS / _IN_TO_M,
|
||||
SPEED_INCHES_PER_HOUR: _HRS_TO_SECS / _IN_TO_M,
|
||||
SPEED_KILOMETERS_PER_HOUR: _HRS_TO_SECS / _KM_TO_M,
|
||||
SPEED_KNOTS: _HRS_TO_SECS / _NAUTICAL_MILE_TO_M,
|
||||
SPEED_METERS_PER_SECOND: 1,
|
||||
SPEED_MILES_PER_HOUR: _HRS_TO_SECS / _MILE_TO_M,
|
||||
SPEED_MILLIMETERS_PER_DAY: _DAYS_TO_SECS / _MM_TO_M,
|
||||
}
|
||||
VALID_UNITS = {
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_DAY,
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_HOUR,
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_DAY,
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_HOUR,
|
||||
SPEED_FEET_PER_SECOND,
|
||||
SPEED_INCHES_PER_DAY,
|
||||
SPEED_INCHES_PER_HOUR,
|
||||
SPEED_KILOMETERS_PER_HOUR,
|
||||
SPEED_KNOTS,
|
||||
SPEED_METERS_PER_SECOND,
|
||||
SPEED_MILES_PER_HOUR,
|
||||
SPEED_MILLIMETERS_PER_DAY,
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -21,6 +21,10 @@ from homeassistant.const import (
|
|||
MASS_POUNDS,
|
||||
POWER_KILO_WATT,
|
||||
POWER_WATT,
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_DAY,
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_HOUR,
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_DAY,
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_HOUR,
|
||||
PRESSURE_CBAR,
|
||||
PRESSURE_HPA,
|
||||
PRESSURE_INHG,
|
||||
|
@ -30,13 +34,10 @@ from homeassistant.const import (
|
|||
PRESSURE_PA,
|
||||
PRESSURE_PSI,
|
||||
SPEED_FEET_PER_SECOND,
|
||||
SPEED_INCHES_PER_DAY,
|
||||
SPEED_INCHES_PER_HOUR,
|
||||
SPEED_KILOMETERS_PER_HOUR,
|
||||
SPEED_KNOTS,
|
||||
SPEED_METERS_PER_SECOND,
|
||||
SPEED_MILES_PER_HOUR,
|
||||
SPEED_MILLIMETERS_PER_DAY,
|
||||
TEMP_CELSIUS,
|
||||
TEMP_FAHRENHEIT,
|
||||
TEMP_KELVIN,
|
||||
|
@ -93,14 +94,15 @@ INVALID_SYMBOL = "bob"
|
|||
(PressureConverter, PRESSURE_CBAR),
|
||||
(PressureConverter, PRESSURE_MMHG),
|
||||
(PressureConverter, PRESSURE_PSI),
|
||||
(SpeedConverter, PRECIPITATION_INTENSITY_INCHES_PER_DAY),
|
||||
(SpeedConverter, PRECIPITATION_INTENSITY_INCHES_PER_HOUR),
|
||||
(SpeedConverter, PRECIPITATION_INTENSITY_MILLIMETERS_PER_DAY),
|
||||
(SpeedConverter, PRECIPITATION_INTENSITY_MILLIMETERS_PER_HOUR),
|
||||
(SpeedConverter, SPEED_FEET_PER_SECOND),
|
||||
(SpeedConverter, SPEED_INCHES_PER_DAY),
|
||||
(SpeedConverter, SPEED_INCHES_PER_HOUR),
|
||||
(SpeedConverter, SPEED_KILOMETERS_PER_HOUR),
|
||||
(SpeedConverter, SPEED_KNOTS),
|
||||
(SpeedConverter, SPEED_METERS_PER_SECOND),
|
||||
(SpeedConverter, SPEED_MILES_PER_HOUR),
|
||||
(SpeedConverter, SPEED_MILLIMETERS_PER_DAY),
|
||||
(TemperatureConverter, TEMP_CELSIUS),
|
||||
(TemperatureConverter, TEMP_FAHRENHEIT),
|
||||
(TemperatureConverter, TEMP_KELVIN),
|
||||
|
@ -389,17 +391,44 @@ def test_pressure_convert(
|
|||
# 5 mi/h * 1.609 km/mi = 8.04672 km/h
|
||||
(5, SPEED_MILES_PER_HOUR, 8.04672, SPEED_KILOMETERS_PER_HOUR),
|
||||
# 5 in/day * 25.4 mm/in = 127 mm/day
|
||||
(5, SPEED_INCHES_PER_DAY, 127, SPEED_MILLIMETERS_PER_DAY),
|
||||
(
|
||||
5,
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_DAY,
|
||||
127,
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_DAY,
|
||||
),
|
||||
# 5 mm/day / 25.4 mm/in = 0.19685 in/day
|
||||
(5, SPEED_MILLIMETERS_PER_DAY, pytest.approx(0.1968504), SPEED_INCHES_PER_DAY),
|
||||
(
|
||||
5,
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_DAY,
|
||||
pytest.approx(0.1968504),
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_DAY,
|
||||
),
|
||||
# 48 mm/day = 2 mm/h
|
||||
(
|
||||
48,
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_DAY,
|
||||
pytest.approx(2),
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_HOUR,
|
||||
),
|
||||
# 5 in/hr * 24 hr/day = 3048 mm/day
|
||||
(5, SPEED_INCHES_PER_HOUR, 3048, SPEED_MILLIMETERS_PER_DAY),
|
||||
(
|
||||
5,
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_HOUR,
|
||||
3048,
|
||||
PRECIPITATION_INTENSITY_MILLIMETERS_PER_DAY,
|
||||
),
|
||||
# 5 m/s * 39.3701 in/m * 3600 s/hr = 708661
|
||||
(5, SPEED_METERS_PER_SECOND, pytest.approx(708661.42), SPEED_INCHES_PER_HOUR),
|
||||
(
|
||||
5,
|
||||
SPEED_METERS_PER_SECOND,
|
||||
pytest.approx(708661.42),
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_HOUR,
|
||||
),
|
||||
# 5000 in/h / 39.3701 in/m / 3600 s/h = 0.03528 m/s
|
||||
(
|
||||
5000,
|
||||
SPEED_INCHES_PER_HOUR,
|
||||
PRECIPITATION_INTENSITY_INCHES_PER_HOUR,
|
||||
pytest.approx(0.0352778),
|
||||
SPEED_METERS_PER_SECOND,
|
||||
),
|
||||
|
|
Loading…
Add table
Reference in a new issue