Add rules for converting speeds (#80943)
* Add rules for converting speeds * Update metoffice wind speed sensors to prefer mph * Don't convert speeds measured in knots
This commit is contained in:
parent
93d4d02aac
commit
b07e1281da
3 changed files with 30 additions and 0 deletions
|
@ -83,6 +83,7 @@ SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
|
||||||
key="wind_speed",
|
key="wind_speed",
|
||||||
name="Wind speed",
|
name="Wind speed",
|
||||||
native_unit_of_measurement=SPEED_MILES_PER_HOUR,
|
native_unit_of_measurement=SPEED_MILES_PER_HOUR,
|
||||||
|
suggested_unit_of_measurement=SPEED_MILES_PER_HOUR,
|
||||||
device_class=SensorDeviceClass.SPEED,
|
device_class=SensorDeviceClass.SPEED,
|
||||||
icon="mdi:weather-windy",
|
icon="mdi:weather-windy",
|
||||||
entity_registry_enabled_default=True,
|
entity_registry_enabled_default=True,
|
||||||
|
@ -98,6 +99,7 @@ SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
|
||||||
key="wind_gust",
|
key="wind_gust",
|
||||||
name="Wind gust",
|
name="Wind gust",
|
||||||
native_unit_of_measurement=SPEED_MILES_PER_HOUR,
|
native_unit_of_measurement=SPEED_MILES_PER_HOUR,
|
||||||
|
suggested_unit_of_measurement=SPEED_MILES_PER_HOUR,
|
||||||
device_class=SensorDeviceClass.SPEED,
|
device_class=SensorDeviceClass.SPEED,
|
||||||
icon="mdi:weather-windy",
|
icon="mdi:weather-windy",
|
||||||
entity_registry_enabled_default=False,
|
entity_registry_enabled_default=False,
|
||||||
|
|
|
@ -27,6 +27,8 @@ from homeassistant.const import (
|
||||||
PRESSURE,
|
PRESSURE,
|
||||||
PRESSURE_PA,
|
PRESSURE_PA,
|
||||||
PRESSURE_PSI,
|
PRESSURE_PSI,
|
||||||
|
SPEED_FEET_PER_SECOND,
|
||||||
|
SPEED_KILOMETERS_PER_HOUR,
|
||||||
SPEED_METERS_PER_SECOND,
|
SPEED_METERS_PER_SECOND,
|
||||||
SPEED_MILES_PER_HOUR,
|
SPEED_MILES_PER_HOUR,
|
||||||
TEMP_CELSIUS,
|
TEMP_CELSIUS,
|
||||||
|
@ -268,6 +270,9 @@ METRIC_SYSTEM = UnitSystem(
|
||||||
("distance", LENGTH_INCHES): LENGTH_MILLIMETERS,
|
("distance", LENGTH_INCHES): LENGTH_MILLIMETERS,
|
||||||
("distance", LENGTH_MILES): LENGTH_KILOMETERS,
|
("distance", LENGTH_MILES): LENGTH_KILOMETERS,
|
||||||
("distance", LENGTH_YARD): LENGTH_METERS,
|
("distance", LENGTH_YARD): LENGTH_METERS,
|
||||||
|
# Convert non-metric speeds except knots to km/h
|
||||||
|
("speed", SPEED_FEET_PER_SECOND): SPEED_KILOMETERS_PER_HOUR,
|
||||||
|
("speed", SPEED_MILES_PER_HOUR): SPEED_KILOMETERS_PER_HOUR,
|
||||||
},
|
},
|
||||||
length=LENGTH_KILOMETERS,
|
length=LENGTH_KILOMETERS,
|
||||||
mass=MASS_GRAMS,
|
mass=MASS_GRAMS,
|
||||||
|
@ -286,6 +291,9 @@ US_CUSTOMARY_SYSTEM = UnitSystem(
|
||||||
("distance", LENGTH_KILOMETERS): LENGTH_MILES,
|
("distance", LENGTH_KILOMETERS): LENGTH_MILES,
|
||||||
("distance", LENGTH_METERS): LENGTH_FEET,
|
("distance", LENGTH_METERS): LENGTH_FEET,
|
||||||
("distance", LENGTH_MILLIMETERS): LENGTH_INCHES,
|
("distance", LENGTH_MILLIMETERS): LENGTH_INCHES,
|
||||||
|
# Convert non-USCS speeds except knots to mph
|
||||||
|
("speed", SPEED_METERS_PER_SECOND): SPEED_MILES_PER_HOUR,
|
||||||
|
("speed", SPEED_KILOMETERS_PER_HOUR): SPEED_MILES_PER_HOUR,
|
||||||
},
|
},
|
||||||
length=LENGTH_MILES,
|
length=LENGTH_MILES,
|
||||||
mass=MASS_POUNDS,
|
mass=MASS_POUNDS,
|
||||||
|
|
|
@ -16,7 +16,11 @@ from homeassistant.const import (
|
||||||
MASS_GRAMS,
|
MASS_GRAMS,
|
||||||
PRESSURE,
|
PRESSURE,
|
||||||
PRESSURE_PA,
|
PRESSURE_PA,
|
||||||
|
SPEED_FEET_PER_SECOND,
|
||||||
|
SPEED_KILOMETERS_PER_HOUR,
|
||||||
|
SPEED_KNOTS,
|
||||||
SPEED_METERS_PER_SECOND,
|
SPEED_METERS_PER_SECOND,
|
||||||
|
SPEED_MILES_PER_HOUR,
|
||||||
TEMP_CELSIUS,
|
TEMP_CELSIUS,
|
||||||
TEMPERATURE,
|
TEMPERATURE,
|
||||||
VOLUME,
|
VOLUME,
|
||||||
|
@ -384,18 +388,34 @@ def test_get_unit_system_invalid(key: str) -> None:
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"unit_system, device_class, original_unit, state_unit",
|
"unit_system, device_class, original_unit, state_unit",
|
||||||
(
|
(
|
||||||
|
# Test distance conversion
|
||||||
(METRIC_SYSTEM, "distance", LENGTH_FEET, LENGTH_METERS),
|
(METRIC_SYSTEM, "distance", LENGTH_FEET, LENGTH_METERS),
|
||||||
(METRIC_SYSTEM, "distance", LENGTH_INCHES, LENGTH_MILLIMETERS),
|
(METRIC_SYSTEM, "distance", LENGTH_INCHES, LENGTH_MILLIMETERS),
|
||||||
(METRIC_SYSTEM, "distance", LENGTH_MILES, LENGTH_KILOMETERS),
|
(METRIC_SYSTEM, "distance", LENGTH_MILES, LENGTH_KILOMETERS),
|
||||||
(METRIC_SYSTEM, "distance", LENGTH_YARD, LENGTH_METERS),
|
(METRIC_SYSTEM, "distance", LENGTH_YARD, LENGTH_METERS),
|
||||||
(METRIC_SYSTEM, "distance", LENGTH_KILOMETERS, None),
|
(METRIC_SYSTEM, "distance", LENGTH_KILOMETERS, None),
|
||||||
(METRIC_SYSTEM, "distance", "very_long", None),
|
(METRIC_SYSTEM, "distance", "very_long", None),
|
||||||
|
# Test speed conversion
|
||||||
|
(METRIC_SYSTEM, "speed", SPEED_FEET_PER_SECOND, SPEED_KILOMETERS_PER_HOUR),
|
||||||
|
(METRIC_SYSTEM, "speed", SPEED_MILES_PER_HOUR, SPEED_KILOMETERS_PER_HOUR),
|
||||||
|
(METRIC_SYSTEM, "speed", SPEED_KILOMETERS_PER_HOUR, None),
|
||||||
|
(METRIC_SYSTEM, "speed", SPEED_KNOTS, None),
|
||||||
|
(METRIC_SYSTEM, "speed", SPEED_METERS_PER_SECOND, None),
|
||||||
|
(METRIC_SYSTEM, "speed", "very_fast", None),
|
||||||
|
# Test distance conversion
|
||||||
(US_CUSTOMARY_SYSTEM, "distance", LENGTH_CENTIMETERS, LENGTH_INCHES),
|
(US_CUSTOMARY_SYSTEM, "distance", LENGTH_CENTIMETERS, LENGTH_INCHES),
|
||||||
(US_CUSTOMARY_SYSTEM, "distance", LENGTH_KILOMETERS, LENGTH_MILES),
|
(US_CUSTOMARY_SYSTEM, "distance", LENGTH_KILOMETERS, LENGTH_MILES),
|
||||||
(US_CUSTOMARY_SYSTEM, "distance", LENGTH_METERS, LENGTH_FEET),
|
(US_CUSTOMARY_SYSTEM, "distance", LENGTH_METERS, LENGTH_FEET),
|
||||||
(US_CUSTOMARY_SYSTEM, "distance", LENGTH_MILLIMETERS, LENGTH_INCHES),
|
(US_CUSTOMARY_SYSTEM, "distance", LENGTH_MILLIMETERS, LENGTH_INCHES),
|
||||||
(US_CUSTOMARY_SYSTEM, "distance", LENGTH_MILES, None),
|
(US_CUSTOMARY_SYSTEM, "distance", LENGTH_MILES, None),
|
||||||
(US_CUSTOMARY_SYSTEM, "distance", "very_long", None),
|
(US_CUSTOMARY_SYSTEM, "distance", "very_long", None),
|
||||||
|
# Test speed conversion
|
||||||
|
(US_CUSTOMARY_SYSTEM, "speed", SPEED_METERS_PER_SECOND, SPEED_MILES_PER_HOUR),
|
||||||
|
(US_CUSTOMARY_SYSTEM, "speed", SPEED_KILOMETERS_PER_HOUR, SPEED_MILES_PER_HOUR),
|
||||||
|
(US_CUSTOMARY_SYSTEM, "speed", SPEED_FEET_PER_SECOND, None),
|
||||||
|
(US_CUSTOMARY_SYSTEM, "speed", SPEED_KNOTS, None),
|
||||||
|
(US_CUSTOMARY_SYSTEM, "speed", SPEED_MILES_PER_HOUR, None),
|
||||||
|
(US_CUSTOMARY_SYSTEM, "speed", "very_fast", None),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
def test_get_converted_unit(
|
def test_get_converted_unit(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue