Skip to content

Commit

Permalink
update unit conversions to utilise distance constants
Browse files Browse the repository at this point in the history
  • Loading branch information
mikey0000 committed Oct 23, 2024
1 parent 33f324a commit 242b84a
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 11 deletions.
11 changes: 11 additions & 0 deletions homeassistant/components/sensor/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
SIGNAL_STRENGTH_DECIBELS,
SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
UnitOfApparentPower,
UnitOfArea,
UnitOfConductivity,
UnitOfDataRate,
UnitOfElectricCurrent,
Expand Down Expand Up @@ -46,6 +47,7 @@
dir_with_deprecated_constants,
)
from homeassistant.util.unit_conversion import (
AreaConverter,
BaseUnitConverter,
ConductivityConverter,
DataRateConverter,
Expand Down Expand Up @@ -121,6 +123,12 @@ class SensorDeviceClass(StrEnum):
Unit of measurement: `UnitOfPressure` units
"""

AREA = "area"
"""Area
Unit of measurement: `UnitOfArea` units
"""

BATTERY = "battery"
"""Percentage of battery that is left.
Expand Down Expand Up @@ -493,6 +501,7 @@ class SensorStateClass(StrEnum):

UNIT_CONVERTERS: dict[SensorDeviceClass | str | None, type[BaseUnitConverter]] = {
SensorDeviceClass.ATMOSPHERIC_PRESSURE: PressureConverter,
SensorDeviceClass.AREA: AreaConverter,
SensorDeviceClass.CONDUCTIVITY: ConductivityConverter,
SensorDeviceClass.CURRENT: ElectricCurrentConverter,
SensorDeviceClass.DATA_RATE: DataRateConverter,
Expand Down Expand Up @@ -523,6 +532,7 @@ class SensorStateClass(StrEnum):
SensorDeviceClass.APPARENT_POWER: set(UnitOfApparentPower),
SensorDeviceClass.AQI: {None},
SensorDeviceClass.ATMOSPHERIC_PRESSURE: set(UnitOfPressure),
SensorDeviceClass.AREA: set(UnitOfArea),
SensorDeviceClass.BATTERY: {PERCENTAGE},
SensorDeviceClass.CO: {CONCENTRATION_PARTS_PER_MILLION},
SensorDeviceClass.CO2: {CONCENTRATION_PARTS_PER_MILLION},
Expand Down Expand Up @@ -598,6 +608,7 @@ class SensorStateClass(StrEnum):
SensorDeviceClass.APPARENT_POWER: {SensorStateClass.MEASUREMENT},
SensorDeviceClass.AQI: {SensorStateClass.MEASUREMENT},
SensorDeviceClass.ATMOSPHERIC_PRESSURE: {SensorStateClass.MEASUREMENT},
SensorDeviceClass.AREA: {SensorStateClass.MEASUREMENT},
SensorDeviceClass.BATTERY: {SensorStateClass.MEASUREMENT},
SensorDeviceClass.CO: {SensorStateClass.MEASUREMENT},
SensorDeviceClass.CO2: {SensorStateClass.MEASUREMENT},
Expand Down
24 changes: 13 additions & 11 deletions homeassistant/util/unit_conversion.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,6 @@
)
from homeassistant.exceptions import HomeAssistantError

# Area constants to square meters
_CM2_TO_M2 = 1e-4 # 1 cm² = 0.0001 m²
_MM2_TO_M2 = 1e-6 # 1 mm² = 0.000001 m²
_KM2_TO_M2 = 1e6 # 1 km² = 1,000,000 m²
_IN2_TO_M2 = 0.00064516 # 1 in² = 0.00064516 m²
_FT2_TO_M2 = 0.092903 # 1 ft² = 0.092903 m²
_YD2_TO_M2 = 0.836127 # 1 yd² = 0.836127 m²
_MI2_TO_M2 = 2.59e6 # 1 mi² = 2,590,000 m²
_ACRE_TO_M2 = 4046.86 # 1 acre = 4,046.86 m²
_HECTARE_TO_M2 = 10000 # 1 hectare = 10,000 m²

# Distance conversion constants
_MM_TO_M = 0.001 # 1 mm = 0.001 m
_CM_TO_M = 0.01 # 1 cm = 0.01 m
Expand All @@ -53,6 +42,19 @@

_NAUTICAL_MILE_TO_M = 1852 # 1 nautical mile = 1852 m

# Area constants to square meters
_CM2_TO_M2 = _CM_TO_M**2 # 1 cm² = 0.0001 m²
_MM2_TO_M2 = _MM_TO_M**2 # 1 mm² = 0.000001 m²
_KM2_TO_M2 = _KM_TO_M**2 # 1 km² = 1,000,000 m²

_IN2_TO_M2 = _IN_TO_M**2 # 1 in² = 0.00064516 m²
_FT2_TO_M2 = _FOOT_TO_M**2 # 1 ft² = 0.092903 m²
_YD2_TO_M2 = _YARD_TO_M**2 # 1 yd² = 0.836127 m²
_MI2_TO_M2 = _MILE_TO_M**2 # 1 mi² = 2,590,000 m²

_ACRE_TO_M2 = 66 * _FOOT_TO_M * 660 * _FOOT_TO_M # 1 acre = 4,046.86 m²
_HECTARE_TO_M2 = 100 * 100 # 1 hectare = 10,000 m²

# Duration conversion constants
_MIN_TO_SEC = 60 # 1 min = 60 seconds
_HRS_TO_MINUTES = 60 # 1 hr = 60 minutes
Expand Down

0 comments on commit 242b84a

Please sign in to comment.