Add mA to SensorDeviceClass.CURRENT units (#84492)

fixes undefined
This commit is contained in:
SukramJ 2022-12-30 13:55:14 +01:00 committed by GitHub
parent df2d0cd3e3
commit 005bc8994d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 46 additions and 3 deletions

View file

@ -91,7 +91,7 @@ class NumberDeviceClass(StrEnum):
CURRENT = "current" CURRENT = "current"
"""Current. """Current.
Unit of measurement: `A` Unit of measurement: `A`, `mA`
""" """
DATA_RATE = "data_rate" DATA_RATE = "data_rate"

View file

@ -88,6 +88,7 @@ from homeassistant.util.unit_conversion import (
BaseUnitConverter, BaseUnitConverter,
DataRateConverter, DataRateConverter,
DistanceConverter, DistanceConverter,
ElectricCurrentConverter,
ElectricPotentialConverter, ElectricPotentialConverter,
InformationConverter, InformationConverter,
MassConverter, MassConverter,
@ -186,7 +187,7 @@ class SensorDeviceClass(StrEnum):
CURRENT = "current" CURRENT = "current"
"""Current. """Current.
Unit of measurement: `A` Unit of measurement: `A`, `mA`
""" """
DATA_RATE = "data_rate" DATA_RATE = "data_rate"
@ -472,6 +473,7 @@ UNIT_CONVERTERS: dict[SensorDeviceClass | str | None, type[BaseUnitConverter]] =
SensorDeviceClass.DATA_RATE: DataRateConverter, SensorDeviceClass.DATA_RATE: DataRateConverter,
SensorDeviceClass.DATA_SIZE: InformationConverter, SensorDeviceClass.DATA_SIZE: InformationConverter,
SensorDeviceClass.DISTANCE: DistanceConverter, SensorDeviceClass.DISTANCE: DistanceConverter,
SensorDeviceClass.CURRENT: ElectricCurrentConverter,
SensorDeviceClass.GAS: VolumeConverter, SensorDeviceClass.GAS: VolumeConverter,
SensorDeviceClass.PRECIPITATION: DistanceConverter, SensorDeviceClass.PRECIPITATION: DistanceConverter,
SensorDeviceClass.PRESSURE: PressureConverter, SensorDeviceClass.PRESSURE: PressureConverter,
@ -491,7 +493,7 @@ DEVICE_CLASS_UNITS: dict[SensorDeviceClass, set[type[StrEnum] | str | None]] = {
SensorDeviceClass.BATTERY: {PERCENTAGE}, SensorDeviceClass.BATTERY: {PERCENTAGE},
SensorDeviceClass.CO: {CONCENTRATION_PARTS_PER_MILLION}, SensorDeviceClass.CO: {CONCENTRATION_PARTS_PER_MILLION},
SensorDeviceClass.CO2: {CONCENTRATION_PARTS_PER_MILLION}, SensorDeviceClass.CO2: {CONCENTRATION_PARTS_PER_MILLION},
SensorDeviceClass.CURRENT: {UnitOfElectricCurrent.AMPERE}, SensorDeviceClass.CURRENT: set(UnitOfElectricCurrent),
SensorDeviceClass.DATA_RATE: set(UnitOfDataRate), SensorDeviceClass.DATA_RATE: set(UnitOfDataRate),
SensorDeviceClass.DATA_SIZE: set(UnitOfInformation), SensorDeviceClass.DATA_SIZE: set(UnitOfInformation),
SensorDeviceClass.DISTANCE: set(UnitOfLength), SensorDeviceClass.DISTANCE: set(UnitOfLength),

View file

@ -4,6 +4,7 @@ from __future__ import annotations
from homeassistant.const import ( from homeassistant.const import (
UNIT_NOT_RECOGNIZED_TEMPLATE, UNIT_NOT_RECOGNIZED_TEMPLATE,
UnitOfDataRate, UnitOfDataRate,
UnitOfElectricCurrent,
UnitOfElectricPotential, UnitOfElectricPotential,
UnitOfEnergy, UnitOfEnergy,
UnitOfInformation, UnitOfInformation,
@ -138,6 +139,18 @@ class DistanceConverter(BaseUnitConverter):
} }
class ElectricCurrentConverter(BaseUnitConverter):
"""Utility to convert electric current values."""
UNIT_CLASS = "electric_current"
NORMALIZED_UNIT = UnitOfElectricCurrent.AMPERE
_UNIT_CONVERSION: dict[str, float] = {
UnitOfElectricCurrent.AMPERE: 1,
UnitOfElectricCurrent.MILLIAMPERE: 1e3,
}
VALID_UNITS = set(UnitOfElectricCurrent)
class ElectricPotentialConverter(BaseUnitConverter): class ElectricPotentialConverter(BaseUnitConverter):
"""Utility to convert electric potential values.""" """Utility to convert electric potential values."""

View file

@ -3,6 +3,7 @@ import pytest
from homeassistant.const import ( from homeassistant.const import (
UnitOfDataRate, UnitOfDataRate,
UnitOfElectricCurrent,
UnitOfEnergy, UnitOfEnergy,
UnitOfInformation, UnitOfInformation,
UnitOfLength, UnitOfLength,
@ -19,6 +20,7 @@ from homeassistant.util.unit_conversion import (
BaseUnitConverter, BaseUnitConverter,
DataRateConverter, DataRateConverter,
DistanceConverter, DistanceConverter,
ElectricCurrentConverter,
EnergyConverter, EnergyConverter,
InformationConverter, InformationConverter,
MassConverter, MassConverter,
@ -44,6 +46,8 @@ INVALID_SYMBOL = "bob"
(DistanceConverter, UnitOfLength.YARDS), (DistanceConverter, UnitOfLength.YARDS),
(DistanceConverter, UnitOfLength.FEET), (DistanceConverter, UnitOfLength.FEET),
(DistanceConverter, UnitOfLength.INCHES), (DistanceConverter, UnitOfLength.INCHES),
(ElectricCurrentConverter, UnitOfElectricCurrent.AMPERE),
(ElectricCurrentConverter, UnitOfElectricCurrent.MILLIAMPERE),
(EnergyConverter, UnitOfEnergy.WATT_HOUR), (EnergyConverter, UnitOfEnergy.WATT_HOUR),
(EnergyConverter, UnitOfEnergy.KILO_WATT_HOUR), (EnergyConverter, UnitOfEnergy.KILO_WATT_HOUR),
(EnergyConverter, UnitOfEnergy.MEGA_WATT_HOUR), (EnergyConverter, UnitOfEnergy.MEGA_WATT_HOUR),
@ -93,6 +97,7 @@ def test_convert_same_unit(converter: type[BaseUnitConverter], valid_unit: str)
[ [
(DataRateConverter, UnitOfDataRate.GIBIBYTES_PER_SECOND), (DataRateConverter, UnitOfDataRate.GIBIBYTES_PER_SECOND),
(DistanceConverter, UnitOfLength.KILOMETERS), (DistanceConverter, UnitOfLength.KILOMETERS),
(ElectricCurrentConverter, UnitOfElectricCurrent.AMPERE),
(EnergyConverter, UnitOfEnergy.KILO_WATT_HOUR), (EnergyConverter, UnitOfEnergy.KILO_WATT_HOUR),
(InformationConverter, UnitOfInformation.GIBIBYTES), (InformationConverter, UnitOfInformation.GIBIBYTES),
(MassConverter, UnitOfMass.GRAMS), (MassConverter, UnitOfMass.GRAMS),
@ -157,6 +162,12 @@ def test_convert_nonnumeric_value(
8, 8,
), ),
(DistanceConverter, UnitOfLength.KILOMETERS, UnitOfLength.METERS, 1 / 1000), (DistanceConverter, UnitOfLength.KILOMETERS, UnitOfLength.METERS, 1 / 1000),
(
ElectricCurrentConverter,
UnitOfElectricCurrent.AMPERE,
UnitOfElectricCurrent.MILLIAMPERE,
1 / 1000,
),
(EnergyConverter, UnitOfEnergy.WATT_HOUR, UnitOfEnergy.KILO_WATT_HOUR, 1000), (EnergyConverter, UnitOfEnergy.WATT_HOUR, UnitOfEnergy.KILO_WATT_HOUR, 1000),
(InformationConverter, UnitOfInformation.BITS, UnitOfInformation.BYTES, 8), (InformationConverter, UnitOfInformation.BITS, UnitOfInformation.BYTES, 8),
(PowerConverter, UnitOfPower.WATT, UnitOfPower.KILO_WATT, 1000), (PowerConverter, UnitOfPower.WATT, UnitOfPower.KILO_WATT, 1000),
@ -235,6 +246,23 @@ def test_data_rate_convert(
) )
@pytest.mark.parametrize(
"value,from_unit,expected,to_unit",
[
(5, UnitOfElectricCurrent.AMPERE, 5000, UnitOfElectricCurrent.MILLIAMPERE),
(5, UnitOfElectricCurrent.MILLIAMPERE, 0.005, UnitOfElectricCurrent.AMPERE),
],
)
def test_electric_current_convert(
value: float,
from_unit: str,
expected: float,
to_unit: str,
) -> None:
"""Test conversion to other units."""
assert ElectricCurrentConverter.convert(value, from_unit, to_unit) == expected
@pytest.mark.parametrize( @pytest.mark.parametrize(
"value,from_unit,expected,to_unit", "value,from_unit,expected,to_unit",
[ [