mirror of
https://github.com/home-assistant/core.git
synced 2025-07-12 07:47:08 +00:00
Add calories to energy sensor device class (#122796)
* added calories to energy class * changes * temporarily solving the problem with conversion accuracy * add tests * added calories to energy class * changes * add tests * Update homeassistant/util/unit_conversion.py Co-authored-by: Robert Resch <robert@resch.dev> * Update homeassistant/util/unit_conversion.py Co-authored-by: Robert Resch <robert@resch.dev> * apply suggestions * Update homeassistant/util/unit_conversion.py --------- Co-authored-by: Robert Resch <robert@resch.dev> Co-authored-by: Erik Montnemery <erik@montnemery.com>
This commit is contained in:
parent
9f284c0582
commit
dcd7830a35
@ -182,7 +182,7 @@ class SensorDeviceClass(StrEnum):
|
|||||||
|
|
||||||
Use this device class for sensors measuring energy consumption, for example
|
Use this device class for sensors measuring energy consumption, for example
|
||||||
electric energy consumption.
|
electric energy consumption.
|
||||||
Unit of measurement: `Wh`, `kWh`, `MWh`, `MJ`, `GJ`
|
Unit of measurement: `J`, `kJ`, `MJ`, `GJ`, `Wh`, `kWh`, `MWh`, `cal`, `kcal`, `Mcal`, `Gcal`
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ENERGY_STORAGE = "energy_storage"
|
ENERGY_STORAGE = "energy_storage"
|
||||||
|
@ -693,11 +693,17 @@ _DEPRECATED_POWER_VOLT_AMPERE_REACTIVE: Final = DeprecatedConstantEnum(
|
|||||||
class UnitOfEnergy(StrEnum):
|
class UnitOfEnergy(StrEnum):
|
||||||
"""Energy units."""
|
"""Energy units."""
|
||||||
|
|
||||||
GIGA_JOULE = "GJ"
|
JOULE = "J"
|
||||||
KILO_WATT_HOUR = "kWh"
|
KILO_JOULE = "kJ"
|
||||||
MEGA_JOULE = "MJ"
|
MEGA_JOULE = "MJ"
|
||||||
MEGA_WATT_HOUR = "MWh"
|
GIGA_JOULE = "GJ"
|
||||||
WATT_HOUR = "Wh"
|
WATT_HOUR = "Wh"
|
||||||
|
KILO_WATT_HOUR = "kWh"
|
||||||
|
MEGA_WATT_HOUR = "MWh"
|
||||||
|
CALORIE = "cal"
|
||||||
|
KILO_CALORIE = "kcal"
|
||||||
|
MEGA_CALORIE = "Mcal"
|
||||||
|
GIGA_CALORIE = "Gcal"
|
||||||
|
|
||||||
|
|
||||||
_DEPRECATED_ENERGY_KILO_WATT_HOUR: Final = DeprecatedConstantEnum(
|
_DEPRECATED_ENERGY_KILO_WATT_HOUR: Final = DeprecatedConstantEnum(
|
||||||
|
@ -47,6 +47,10 @@ _HRS_TO_MINUTES = 60 # 1 hr = 60 minutes
|
|||||||
_HRS_TO_SECS = _HRS_TO_MINUTES * _MIN_TO_SEC # 1 hr = 60 minutes = 3600 seconds
|
_HRS_TO_SECS = _HRS_TO_MINUTES * _MIN_TO_SEC # 1 hr = 60 minutes = 3600 seconds
|
||||||
_DAYS_TO_SECS = 24 * _HRS_TO_SECS # 1 day = 24 hours = 86400 seconds
|
_DAYS_TO_SECS = 24 * _HRS_TO_SECS # 1 day = 24 hours = 86400 seconds
|
||||||
|
|
||||||
|
# Energy conversion constants
|
||||||
|
_WH_TO_J = 3600 # 1 Wh = 3600 J
|
||||||
|
_WH_TO_CAL = _WH_TO_J / 4.184 # 1 Wh = 860.42065 cal
|
||||||
|
|
||||||
# Mass conversion constants
|
# Mass conversion constants
|
||||||
_POUND_TO_G = 453.59237
|
_POUND_TO_G = 453.59237
|
||||||
_OUNCE_TO_G = _POUND_TO_G / 16 # 16 ounces to a pound
|
_OUNCE_TO_G = _POUND_TO_G / 16 # 16 ounces to a pound
|
||||||
@ -209,19 +213,19 @@ class EnergyConverter(BaseUnitConverter):
|
|||||||
|
|
||||||
UNIT_CLASS = "energy"
|
UNIT_CLASS = "energy"
|
||||||
_UNIT_CONVERSION: dict[str | None, float] = {
|
_UNIT_CONVERSION: dict[str | None, float] = {
|
||||||
UnitOfEnergy.WATT_HOUR: 1 * 1000,
|
UnitOfEnergy.JOULE: _WH_TO_J * 1e3,
|
||||||
|
UnitOfEnergy.KILO_JOULE: _WH_TO_J,
|
||||||
|
UnitOfEnergy.MEGA_JOULE: _WH_TO_J / 1e3,
|
||||||
|
UnitOfEnergy.GIGA_JOULE: _WH_TO_J / 1e6,
|
||||||
|
UnitOfEnergy.WATT_HOUR: 1e3,
|
||||||
UnitOfEnergy.KILO_WATT_HOUR: 1,
|
UnitOfEnergy.KILO_WATT_HOUR: 1,
|
||||||
UnitOfEnergy.MEGA_WATT_HOUR: 1 / 1000,
|
UnitOfEnergy.MEGA_WATT_HOUR: 1 / 1e3,
|
||||||
UnitOfEnergy.MEGA_JOULE: 3.6,
|
UnitOfEnergy.CALORIE: _WH_TO_CAL * 1e3,
|
||||||
UnitOfEnergy.GIGA_JOULE: 3.6 / 1000,
|
UnitOfEnergy.KILO_CALORIE: _WH_TO_CAL,
|
||||||
}
|
UnitOfEnergy.MEGA_CALORIE: _WH_TO_CAL / 1e3,
|
||||||
VALID_UNITS = {
|
UnitOfEnergy.GIGA_CALORIE: _WH_TO_CAL / 1e6,
|
||||||
UnitOfEnergy.WATT_HOUR,
|
|
||||||
UnitOfEnergy.KILO_WATT_HOUR,
|
|
||||||
UnitOfEnergy.MEGA_WATT_HOUR,
|
|
||||||
UnitOfEnergy.MEGA_JOULE,
|
|
||||||
UnitOfEnergy.GIGA_JOULE,
|
|
||||||
}
|
}
|
||||||
|
VALID_UNITS = set(UnitOfEnergy)
|
||||||
|
|
||||||
|
|
||||||
class InformationConverter(BaseUnitConverter):
|
class InformationConverter(BaseUnitConverter):
|
||||||
|
@ -764,7 +764,7 @@ EARLY_END_ERROR = "invalid template (TemplateSyntaxError: unexpected 'end of tem
|
|||||||
),
|
),
|
||||||
"unit_of_measurement": (
|
"unit_of_measurement": (
|
||||||
"'None' is not a valid unit for device class 'energy'; "
|
"'None' is not a valid unit for device class 'energy'; "
|
||||||
"expected one of 'GJ', 'kWh', 'MJ', 'MWh', 'Wh'"
|
"expected one of 'cal', 'Gcal', 'GJ', 'J', 'kcal', 'kJ', 'kWh', 'Mcal', 'MJ', 'MWh', 'Wh'"
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
@ -282,10 +282,22 @@ _CONVERTED_VALUE: dict[
|
|||||||
(10, UnitOfEnergy.KILO_WATT_HOUR, 0.01, UnitOfEnergy.MEGA_WATT_HOUR),
|
(10, UnitOfEnergy.KILO_WATT_HOUR, 0.01, UnitOfEnergy.MEGA_WATT_HOUR),
|
||||||
(10, UnitOfEnergy.MEGA_WATT_HOUR, 10000000, UnitOfEnergy.WATT_HOUR),
|
(10, UnitOfEnergy.MEGA_WATT_HOUR, 10000000, UnitOfEnergy.WATT_HOUR),
|
||||||
(10, UnitOfEnergy.MEGA_WATT_HOUR, 10000, UnitOfEnergy.KILO_WATT_HOUR),
|
(10, UnitOfEnergy.MEGA_WATT_HOUR, 10000, UnitOfEnergy.KILO_WATT_HOUR),
|
||||||
(10, UnitOfEnergy.GIGA_JOULE, 10000 / 3.6, UnitOfEnergy.KILO_WATT_HOUR),
|
(10, UnitOfEnergy.GIGA_JOULE, 2777.78, UnitOfEnergy.KILO_WATT_HOUR),
|
||||||
(10, UnitOfEnergy.GIGA_JOULE, 10 / 3.6, UnitOfEnergy.MEGA_WATT_HOUR),
|
(10, UnitOfEnergy.GIGA_JOULE, 2.77778, UnitOfEnergy.MEGA_WATT_HOUR),
|
||||||
(10, UnitOfEnergy.MEGA_JOULE, 10 / 3.6, UnitOfEnergy.KILO_WATT_HOUR),
|
(10, UnitOfEnergy.MEGA_JOULE, 2.77778, UnitOfEnergy.KILO_WATT_HOUR),
|
||||||
(10, UnitOfEnergy.MEGA_JOULE, 0.010 / 3.6, UnitOfEnergy.MEGA_WATT_HOUR),
|
(10, UnitOfEnergy.MEGA_JOULE, 2.77778e-3, UnitOfEnergy.MEGA_WATT_HOUR),
|
||||||
|
(10, UnitOfEnergy.KILO_JOULE, 2.77778, UnitOfEnergy.WATT_HOUR),
|
||||||
|
(10, UnitOfEnergy.KILO_JOULE, 2.77778e-6, UnitOfEnergy.MEGA_WATT_HOUR),
|
||||||
|
(10, UnitOfEnergy.JOULE, 2.77778e-3, UnitOfEnergy.WATT_HOUR),
|
||||||
|
(10, UnitOfEnergy.JOULE, 2.390057, UnitOfEnergy.CALORIE),
|
||||||
|
(10, UnitOfEnergy.CALORIE, 0.01, UnitOfEnergy.KILO_CALORIE),
|
||||||
|
(10, UnitOfEnergy.CALORIE, 0.011622222, UnitOfEnergy.WATT_HOUR),
|
||||||
|
(10, UnitOfEnergy.KILO_CALORIE, 0.01, UnitOfEnergy.MEGA_CALORIE),
|
||||||
|
(10, UnitOfEnergy.KILO_CALORIE, 0.011622222, UnitOfEnergy.KILO_WATT_HOUR),
|
||||||
|
(10, UnitOfEnergy.MEGA_CALORIE, 0.01, UnitOfEnergy.GIGA_CALORIE),
|
||||||
|
(10, UnitOfEnergy.MEGA_CALORIE, 0.011622222, UnitOfEnergy.MEGA_WATT_HOUR),
|
||||||
|
(10, UnitOfEnergy.GIGA_CALORIE, 10000, UnitOfEnergy.MEGA_CALORIE),
|
||||||
|
(10, UnitOfEnergy.GIGA_CALORIE, 11.622222, UnitOfEnergy.MEGA_WATT_HOUR),
|
||||||
],
|
],
|
||||||
InformationConverter: [
|
InformationConverter: [
|
||||||
(8e3, UnitOfInformation.BITS, 8, UnitOfInformation.KILOBITS),
|
(8e3, UnitOfInformation.BITS, 8, UnitOfInformation.KILOBITS),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user