Allow liter for gas sensor device class (#141518)

This commit is contained in:
Arnie97 2025-05-06 16:59:09 +08:00 committed by GitHub
parent f3371bcf39
commit babc183834
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 16 additions and 6 deletions

View File

@ -52,6 +52,7 @@ VALID_ENERGY_UNITS_GAS = {
UnitOfVolume.CENTUM_CUBIC_FEET, UnitOfVolume.CENTUM_CUBIC_FEET,
UnitOfVolume.CUBIC_FEET, UnitOfVolume.CUBIC_FEET,
UnitOfVolume.CUBIC_METERS, UnitOfVolume.CUBIC_METERS,
UnitOfVolume.LITERS,
*VALID_ENERGY_UNITS, *VALID_ENERGY_UNITS,
} }
VALID_VOLUME_UNITS_WATER: set[str] = { VALID_VOLUME_UNITS_WATER: set[str] = {

View File

@ -50,6 +50,7 @@ GAS_USAGE_UNITS: dict[str, tuple[UnitOfEnergy | UnitOfVolume, ...]] = {
UnitOfVolume.CENTUM_CUBIC_FEET, UnitOfVolume.CENTUM_CUBIC_FEET,
UnitOfVolume.CUBIC_FEET, UnitOfVolume.CUBIC_FEET,
UnitOfVolume.CUBIC_METERS, UnitOfVolume.CUBIC_METERS,
UnitOfVolume.LITERS,
), ),
} }
GAS_PRICE_UNITS = tuple( GAS_PRICE_UNITS = tuple(

View File

@ -196,7 +196,7 @@ class NumberDeviceClass(StrEnum):
"""Gas. """Gas.
Unit of measurement: Unit of measurement:
- SI / metric: `` - SI / metric: `L`, ``
- USCS / imperial: `ft³`, `CCF` - USCS / imperial: `ft³`, `CCF`
""" """
@ -472,6 +472,7 @@ DEVICE_CLASS_UNITS: dict[NumberDeviceClass, set[type[StrEnum] | str | None]] = {
UnitOfVolume.CENTUM_CUBIC_FEET, UnitOfVolume.CENTUM_CUBIC_FEET,
UnitOfVolume.CUBIC_FEET, UnitOfVolume.CUBIC_FEET,
UnitOfVolume.CUBIC_METERS, UnitOfVolume.CUBIC_METERS,
UnitOfVolume.LITERS,
}, },
NumberDeviceClass.HUMIDITY: {PERCENTAGE}, NumberDeviceClass.HUMIDITY: {PERCENTAGE},
NumberDeviceClass.ILLUMINANCE: {LIGHT_LUX}, NumberDeviceClass.ILLUMINANCE: {LIGHT_LUX},

View File

@ -225,7 +225,7 @@ class SensorDeviceClass(StrEnum):
"""Gas. """Gas.
Unit of measurement: Unit of measurement:
- SI / metric: `` - SI / metric: `L`, ``
- USCS / imperial: `ft³`, `CCF` - USCS / imperial: `ft³`, `CCF`
""" """
@ -571,6 +571,7 @@ DEVICE_CLASS_UNITS: dict[SensorDeviceClass, set[type[StrEnum] | str | None]] = {
UnitOfVolume.CENTUM_CUBIC_FEET, UnitOfVolume.CENTUM_CUBIC_FEET,
UnitOfVolume.CUBIC_FEET, UnitOfVolume.CUBIC_FEET,
UnitOfVolume.CUBIC_METERS, UnitOfVolume.CUBIC_METERS,
UnitOfVolume.LITERS,
}, },
SensorDeviceClass.HUMIDITY: {PERCENTAGE}, SensorDeviceClass.HUMIDITY: {PERCENTAGE},
SensorDeviceClass.ILLUMINANCE: {LIGHT_LUX}, SensorDeviceClass.ILLUMINANCE: {LIGHT_LUX},

View File

@ -355,6 +355,7 @@ US_CUSTOMARY_SYSTEM = UnitSystem(
("distance", UnitOfLength.MILLIMETERS): UnitOfLength.INCHES, ("distance", UnitOfLength.MILLIMETERS): UnitOfLength.INCHES,
# Convert non-USCS volumes of gas meters # Convert non-USCS volumes of gas meters
("gas", UnitOfVolume.CUBIC_METERS): UnitOfVolume.CUBIC_FEET, ("gas", UnitOfVolume.CUBIC_METERS): UnitOfVolume.CUBIC_FEET,
("gas", UnitOfVolume.LITERS): UnitOfVolume.CUBIC_FEET,
# Convert non-USCS precipitation # Convert non-USCS precipitation
("precipitation", UnitOfLength.CENTIMETERS): UnitOfLength.INCHES, ("precipitation", UnitOfLength.CENTIMETERS): UnitOfLength.INCHES,
("precipitation", UnitOfLength.MILLIMETERS): UnitOfLength.INCHES, ("precipitation", UnitOfLength.MILLIMETERS): UnitOfLength.INCHES,

View File

@ -994,7 +994,7 @@ async def test_cost_sensor_handle_late_price_sensor(
@pytest.mark.parametrize( @pytest.mark.parametrize(
"unit", "unit",
[UnitOfVolume.CUBIC_FEET, UnitOfVolume.CUBIC_METERS], [UnitOfVolume.CUBIC_FEET, UnitOfVolume.CUBIC_METERS, UnitOfVolume.LITERS],
) )
async def test_cost_sensor_handle_gas( async def test_cost_sensor_handle_gas(
setup_integration, hass: HomeAssistant, hass_storage: dict[str, Any], unit setup_integration, hass: HomeAssistant, hass_storage: dict[str, Any], unit

View File

@ -856,7 +856,7 @@ async def test_validation_gas(
"affected_entities": {("sensor.gas_consumption_1", "beers")}, "affected_entities": {("sensor.gas_consumption_1", "beers")},
"translation_placeholders": { "translation_placeholders": {
"energy_units": "GJ, kWh, MJ, MWh, Wh", "energy_units": "GJ, kWh, MJ, MWh, Wh",
"gas_units": "CCF, ft³, m³", "gas_units": "CCF, ft³, m³, L",
}, },
}, },
{ {
@ -885,7 +885,7 @@ async def test_validation_gas(
"affected_entities": {("sensor.gas_price_2", "EUR/invalid")}, "affected_entities": {("sensor.gas_price_2", "EUR/invalid")},
"translation_placeholders": { "translation_placeholders": {
"price_units": ( "price_units": (
"EUR/GJ, EUR/kWh, EUR/MJ, EUR/MWh, EUR/Wh, EUR/CCF, EUR/ft³, EUR/m³" "EUR/GJ, EUR/kWh, EUR/MJ, EUR/MWh, EUR/Wh, EUR/CCF, EUR/ft³, EUR/m³, EUR/L"
) )
}, },
}, },

View File

@ -434,6 +434,7 @@ def test_get_unit_system_invalid(key: str) -> None:
UnitOfVolume.CUBIC_METERS, UnitOfVolume.CUBIC_METERS,
), ),
(SensorDeviceClass.GAS, UnitOfVolume.CUBIC_FEET, UnitOfVolume.CUBIC_METERS), (SensorDeviceClass.GAS, UnitOfVolume.CUBIC_FEET, UnitOfVolume.CUBIC_METERS),
(SensorDeviceClass.GAS, UnitOfVolume.LITERS, None),
(SensorDeviceClass.GAS, UnitOfVolume.CUBIC_METERS, None), (SensorDeviceClass.GAS, UnitOfVolume.CUBIC_METERS, None),
(SensorDeviceClass.GAS, "very_much", None), (SensorDeviceClass.GAS, "very_much", None),
# Test precipitation conversion # Test precipitation conversion
@ -573,7 +574,10 @@ UNCONVERTED_UNITS_METRIC_SYSTEM = {
UnitOfLength.METERS, UnitOfLength.METERS,
UnitOfLength.MILLIMETERS, UnitOfLength.MILLIMETERS,
), ),
SensorDeviceClass.GAS: (UnitOfVolume.CUBIC_METERS,), SensorDeviceClass.GAS: (
UnitOfVolume.CUBIC_METERS,
UnitOfVolume.LITERS,
),
SensorDeviceClass.PRECIPITATION: ( SensorDeviceClass.PRECIPITATION: (
UnitOfLength.CENTIMETERS, UnitOfLength.CENTIMETERS,
UnitOfLength.MILLIMETERS, UnitOfLength.MILLIMETERS,
@ -687,6 +691,7 @@ def test_metric_converted_units(device_class: SensorDeviceClass) -> None:
# Test gas meter conversion # Test gas meter conversion
(SensorDeviceClass.GAS, UnitOfVolume.CENTUM_CUBIC_FEET, None), (SensorDeviceClass.GAS, UnitOfVolume.CENTUM_CUBIC_FEET, None),
(SensorDeviceClass.GAS, UnitOfVolume.CUBIC_METERS, UnitOfVolume.CUBIC_FEET), (SensorDeviceClass.GAS, UnitOfVolume.CUBIC_METERS, UnitOfVolume.CUBIC_FEET),
(SensorDeviceClass.GAS, UnitOfVolume.LITERS, UnitOfVolume.CUBIC_FEET),
(SensorDeviceClass.GAS, UnitOfVolume.CUBIC_FEET, None), (SensorDeviceClass.GAS, UnitOfVolume.CUBIC_FEET, None),
(SensorDeviceClass.GAS, "very_much", None), (SensorDeviceClass.GAS, "very_much", None),
# Test precipitation conversion # Test precipitation conversion