Support knots and ft/s in weather wind speed (#74175)

This commit is contained in:
Erik Montnemery 2022-06-29 16:34:41 +02:00 committed by GitHub
parent e6d115e765
commit d3f4108a91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 1 deletions

View File

@ -22,7 +22,9 @@ from homeassistant.const import (
PRESSURE_INHG,
PRESSURE_MBAR,
PRESSURE_MMHG,
SPEED_FEET_PER_SECOND,
SPEED_KILOMETERS_PER_HOUR,
SPEED_KNOTS,
SPEED_METERS_PER_SECOND,
SPEED_MILES_PER_HOUR,
TEMP_CELSIUS,
@ -118,8 +120,10 @@ VALID_UNITS_VISIBILITY: tuple[str, ...] = (
LENGTH_MILES,
)
VALID_UNITS_WIND_SPEED: tuple[str, ...] = (
SPEED_METERS_PER_SECOND,
SPEED_FEET_PER_SECOND,
SPEED_KILOMETERS_PER_HOUR,
SPEED_KNOTS,
SPEED_METERS_PER_SECOND,
SPEED_MILES_PER_HOUR,
)

View File

@ -608,10 +608,12 @@ 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"
# Signal_strength units

View File

@ -5,9 +5,11 @@ from numbers import Number
from homeassistant.const import (
SPEED,
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,
@ -15,24 +17,30 @@ from homeassistant.const import (
)
VALID_UNITS: tuple[str, ...] = (
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,
)
FOOT_TO_M = 0.3048
HRS_TO_SECS = 60 * 60 # 1 hr = 3600 seconds
IN_TO_M = 0.0254
KM_TO_M = 1000 # 1 km = 1000 m
MILE_TO_M = 1609.344
NAUTICAL_MILE_TO_M = 1852 # 1 nautical mile = 1852 m
# Units in terms of m/s
UNIT_CONVERSION: dict[str, float] = {
SPEED_FEET_PER_SECOND: 1 / FOOT_TO_M,
SPEED_INCHES_PER_DAY: (24 * HRS_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: (24 * HRS_TO_SECS) * 1000,

View File

@ -2,9 +2,11 @@
import pytest
from homeassistant.const import (
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,
@ -61,6 +63,10 @@ def test_convert_nonnumeric_value():
(5, SPEED_METERS_PER_SECOND, 708661, SPEED_INCHES_PER_HOUR),
# 5000 in/h / 39.3701 in/m / 3600 s/h = 0.03528 m/s
(5000, SPEED_INCHES_PER_HOUR, 0.03528, SPEED_METERS_PER_SECOND),
# 5 kt * 1852 m/nmi / 3600 s/h = 2.5722 m/s
(5, SPEED_KNOTS, 2.5722, SPEED_METERS_PER_SECOND),
# 5 ft/s * 0.3048 m/ft = 1.524 m/s
(5, SPEED_FEET_PER_SECOND, 1.524, SPEED_METERS_PER_SECOND),
],
)
def test_convert_different_units(from_value, from_unit, expected, to_unit):