Skip to content

Commit afeaf24

Browse files
authored
Add TEMPERATURE_DELTA device class to Number and Sensor entities (home-assistant#147358)
1 parent 69f9c0a commit afeaf24

22 files changed

+274
-6
lines changed

homeassistant/components/number/const.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
BaseUnitConverter,
5151
ReactiveEnergyConverter,
5252
TemperatureConverter,
53+
TemperatureDeltaConverter,
5354
VolumeFlowRateConverter,
5455
)
5556

@@ -381,6 +382,12 @@ class NumberDeviceClass(StrEnum):
381382
Unit of measurement: `°C`, `°F`, `K`
382383
"""
383384

385+
TEMPERATURE_DELTA = "temperature_delta"
386+
"""Difference of temperatures - Temperature range.
387+
388+
Unit of measurement: `°C`, `°F`, `K`
389+
"""
390+
384391
VOLATILE_ORGANIC_COMPOUNDS = "volatile_organic_compounds"
385392
"""Amount of VOC.
386393
@@ -540,6 +547,7 @@ class NumberDeviceClass(StrEnum):
540547
NumberDeviceClass.SPEED: {*UnitOfSpeed, *UnitOfVolumetricFlux},
541548
NumberDeviceClass.SULPHUR_DIOXIDE: {CONCENTRATION_MICROGRAMS_PER_CUBIC_METER},
542549
NumberDeviceClass.TEMPERATURE: set(UnitOfTemperature),
550+
NumberDeviceClass.TEMPERATURE_DELTA: set(UnitOfTemperature),
543551
NumberDeviceClass.VOLATILE_ORGANIC_COMPOUNDS: {
544552
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
545553
CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER,
@@ -568,6 +576,7 @@ class NumberDeviceClass(StrEnum):
568576
UNIT_CONVERTERS: dict[NumberDeviceClass, type[BaseUnitConverter]] = {
569577
NumberDeviceClass.REACTIVE_ENERGY: ReactiveEnergyConverter,
570578
NumberDeviceClass.TEMPERATURE: TemperatureConverter,
579+
NumberDeviceClass.TEMPERATURE_DELTA: TemperatureDeltaConverter,
571580
NumberDeviceClass.VOLUME_FLOW_RATE: VolumeFlowRateConverter,
572581
}
573582

homeassistant/components/number/icons.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@
135135
"temperature": {
136136
"default": "mdi:thermometer"
137137
},
138+
"temperature_delta": {
139+
"default": "mdi:thermometer"
140+
},
138141
"volatile_organic_compounds": {
139142
"default": "mdi:molecule"
140143
},

homeassistant/components/number/significant_change.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ def async_check_significant_change(
4747
percentage_change: float | None = None
4848

4949
# special for temperature
50-
if device_class == NumberDeviceClass.TEMPERATURE:
50+
if device_class in (
51+
NumberDeviceClass.TEMPERATURE,
52+
NumberDeviceClass.TEMPERATURE_DELTA,
53+
):
5154
if new_attrs.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfTemperature.FAHRENHEIT:
5255
absolute_change = 1.0
5356
else:

homeassistant/components/number/strings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,9 @@
157157
"temperature": {
158158
"name": "[%key:component::sensor::entity_component::temperature::name%]"
159159
},
160+
"temperature_delta": {
161+
"name": "[%key:component::sensor::entity_component::temperature_delta::name%]"
162+
},
160163
"volatile_organic_compounds": {
161164
"name": "[%key:component::sensor::entity_component::volatile_organic_compounds::name%]"
162165
},

homeassistant/components/recorder/statistics.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
ReactivePowerConverter,
6666
SpeedConverter,
6767
TemperatureConverter,
68+
TemperatureDeltaConverter,
6869
UnitlessRatioConverter,
6970
VolumeConverter,
7071
VolumeFlowRateConverter,
@@ -223,6 +224,7 @@ def query_circular_mean(table: type[StatisticsBase]) -> tuple[Label, Label]:
223224

224225
_SECONDARY_UNIT_CONVERTERS: list[type[BaseUnitConverter]] = [
225226
CarbonMonoxideConcentrationConverter,
227+
TemperatureDeltaConverter,
226228
]
227229

228230
STATISTIC_UNIT_TO_UNIT_CONVERTER: dict[str | None, type[BaseUnitConverter]] = {

homeassistant/components/recorder/websocket_api.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
ReactivePowerConverter,
4040
SpeedConverter,
4141
TemperatureConverter,
42+
TemperatureDeltaConverter,
4243
UnitlessRatioConverter,
4344
VolumeConverter,
4445
VolumeFlowRateConverter,
@@ -94,6 +95,9 @@
9495
vol.Optional("reactive_power"): vol.In(ReactivePowerConverter.VALID_UNITS),
9596
vol.Optional("speed"): vol.In(SpeedConverter.VALID_UNITS),
9697
vol.Optional("temperature"): vol.In(TemperatureConverter.VALID_UNITS),
98+
vol.Optional("temperature_delta"): vol.In(
99+
TemperatureDeltaConverter.VALID_UNITS
100+
),
97101
vol.Optional("unitless"): vol.In(UnitlessRatioConverter.VALID_UNITS),
98102
vol.Optional("volume"): vol.In(VolumeConverter.VALID_UNITS),
99103
vol.Optional("volume_flow_rate"): vol.In(VolumeFlowRateConverter.VALID_UNITS),

homeassistant/components/sensor/const.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
ReactivePowerConverter,
7070
SpeedConverter,
7171
TemperatureConverter,
72+
TemperatureDeltaConverter,
7273
UnitlessRatioConverter,
7374
VolumeConverter,
7475
VolumeFlowRateConverter,
@@ -417,6 +418,12 @@ class SensorDeviceClass(StrEnum):
417418
Unit of measurement: `°C`, `°F`, `K`
418419
"""
419420

421+
TEMPERATURE_DELTA = "temperature_delta"
422+
"""Difference of temperatures - Temperature range.
423+
424+
Unit of measurement: `°C`, `°F`, `K`
425+
"""
426+
420427
VOLATILE_ORGANIC_COMPOUNDS = "volatile_organic_compounds"
421428
"""Amount of VOC.
422429
@@ -564,6 +571,7 @@ class SensorStateClass(StrEnum):
564571
SensorDeviceClass.REACTIVE_POWER: ReactivePowerConverter,
565572
SensorDeviceClass.SPEED: SpeedConverter,
566573
SensorDeviceClass.TEMPERATURE: TemperatureConverter,
574+
SensorDeviceClass.TEMPERATURE_DELTA: TemperatureDeltaConverter,
567575
SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS: MassVolumeConcentrationConverter,
568576
SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS_PARTS: UnitlessRatioConverter,
569577
SensorDeviceClass.VOLTAGE: ElectricPotentialConverter,
@@ -651,6 +659,7 @@ class SensorStateClass(StrEnum):
651659
SensorDeviceClass.SPEED: {*UnitOfSpeed, *UnitOfVolumetricFlux},
652660
SensorDeviceClass.SULPHUR_DIOXIDE: {CONCENTRATION_MICROGRAMS_PER_CUBIC_METER},
653661
SensorDeviceClass.TEMPERATURE: set(UnitOfTemperature),
662+
SensorDeviceClass.TEMPERATURE_DELTA: set(UnitOfTemperature),
654663
SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS: {
655664
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
656665
CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER,
@@ -715,6 +724,7 @@ class SensorStateClass(StrEnum):
715724
SensorDeviceClass.SOUND_PRESSURE: (UnitOfSoundPressure.DECIBEL, 0),
716725
SensorDeviceClass.SPEED: (UnitOfSpeed.MILLIMETERS_PER_SECOND, 0),
717726
SensorDeviceClass.TEMPERATURE: (UnitOfTemperature.KELVIN, 1),
727+
SensorDeviceClass.TEMPERATURE_DELTA: (UnitOfTemperature.KELVIN, 1),
718728
SensorDeviceClass.VOLTAGE: (UnitOfElectricPotential.VOLT, 0),
719729
SensorDeviceClass.VOLUME: (UnitOfVolume.MILLILITERS, 0),
720730
SensorDeviceClass.VOLUME_FLOW_RATE: (UnitOfVolumeFlowRate.LITERS_PER_SECOND, 0),
@@ -779,6 +789,7 @@ class SensorStateClass(StrEnum):
779789
SensorDeviceClass.SPEED: {SensorStateClass.MEASUREMENT},
780790
SensorDeviceClass.SULPHUR_DIOXIDE: {SensorStateClass.MEASUREMENT},
781791
SensorDeviceClass.TEMPERATURE: {SensorStateClass.MEASUREMENT},
792+
SensorDeviceClass.TEMPERATURE_DELTA: {SensorStateClass.MEASUREMENT},
782793
SensorDeviceClass.TIMESTAMP: set(),
783794
SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS: {SensorStateClass.MEASUREMENT},
784795
SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS_PARTS: {SensorStateClass.MEASUREMENT},

homeassistant/components/sensor/device_condition.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
CONF_IS_SOUND_PRESSURE = "is_sound_pressure"
7979
CONF_IS_SULPHUR_DIOXIDE = "is_sulphur_dioxide"
8080
CONF_IS_TEMPERATURE = "is_temperature"
81+
CONF_IS_TEMPERATURE_DELTA = "is_temperature_delta"
8182
CONF_IS_VALUE = "is_value"
8283
CONF_IS_VOLATILE_ORGANIC_COMPOUNDS = "is_volatile_organic_compounds"
8384
CONF_IS_VOLATILE_ORGANIC_COMPOUNDS_PARTS = "is_volatile_organic_compounds_parts"
@@ -140,6 +141,7 @@
140141
SensorDeviceClass.SPEED: [{CONF_TYPE: CONF_IS_SPEED}],
141142
SensorDeviceClass.SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_IS_SULPHUR_DIOXIDE}],
142143
SensorDeviceClass.TEMPERATURE: [{CONF_TYPE: CONF_IS_TEMPERATURE}],
144+
SensorDeviceClass.TEMPERATURE_DELTA: [{CONF_TYPE: CONF_IS_TEMPERATURE_DELTA}],
143145
SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS: [
144146
{CONF_TYPE: CONF_IS_VOLATILE_ORGANIC_COMPOUNDS}
145147
],
@@ -208,6 +210,7 @@
208210
CONF_IS_SPEED,
209211
CONF_IS_SULPHUR_DIOXIDE,
210212
CONF_IS_TEMPERATURE,
213+
CONF_IS_TEMPERATURE_DELTA,
211214
CONF_IS_VOLATILE_ORGANIC_COMPOUNDS,
212215
CONF_IS_VOLATILE_ORGANIC_COMPOUNDS_PARTS,
213216
CONF_IS_VOLTAGE,

homeassistant/components/sensor/device_trigger.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
CONF_SPEED = "speed"
7878
CONF_SULPHUR_DIOXIDE = "sulphur_dioxide"
7979
CONF_TEMPERATURE = "temperature"
80+
CONF_TEMPERATURE_DELTA = "temperature_delta"
8081
CONF_VALUE = "value"
8182
CONF_VOLATILE_ORGANIC_COMPOUNDS = "volatile_organic_compounds"
8283
CONF_VOLATILE_ORGANIC_COMPOUNDS_PARTS = "volatile_organic_compounds_parts"
@@ -139,6 +140,7 @@
139140
SensorDeviceClass.SPEED: [{CONF_TYPE: CONF_SPEED}],
140141
SensorDeviceClass.SULPHUR_DIOXIDE: [{CONF_TYPE: CONF_SULPHUR_DIOXIDE}],
141142
SensorDeviceClass.TEMPERATURE: [{CONF_TYPE: CONF_TEMPERATURE}],
143+
SensorDeviceClass.TEMPERATURE_DELTA: [{CONF_TYPE: CONF_TEMPERATURE_DELTA}],
142144
SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS: [
143145
{CONF_TYPE: CONF_VOLATILE_ORGANIC_COMPOUNDS}
144146
],
@@ -208,6 +210,7 @@
208210
CONF_SPEED,
209211
CONF_SULPHUR_DIOXIDE,
210212
CONF_TEMPERATURE,
213+
CONF_TEMPERATURE_DELTA,
211214
CONF_VOLATILE_ORGANIC_COMPOUNDS,
212215
CONF_VOLATILE_ORGANIC_COMPOUNDS_PARTS,
213216
CONF_VOLTAGE,

homeassistant/components/sensor/icons.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,9 @@
154154
"temperature": {
155155
"default": "mdi:thermometer"
156156
},
157+
"temperature_delta": {
158+
"default": "mdi:thermometer"
159+
},
157160
"timestamp": {
158161
"default": "mdi:clock"
159162
},

0 commit comments

Comments
 (0)