Skip to content

Commit a7dbf55

Browse files
authored
Add climate started_cooling and started_drying triggers (home-assistant#156945)
1 parent 0b2bb9f commit a7dbf55

File tree

5 files changed

+75
-9
lines changed

5 files changed

+75
-9
lines changed

homeassistant/components/climate/icons.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@
9898
}
9999
},
100100
"triggers": {
101+
"started_cooling": {
102+
"trigger": "mdi:snowflake"
103+
},
104+
"started_drying": {
105+
"trigger": "mdi:water-percent"
106+
},
101107
"started_heating": {
102108
"trigger": "mdi:fire"
103109
},

homeassistant/components/climate/strings.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,28 @@
298298
},
299299
"title": "Climate",
300300
"triggers": {
301+
"started_cooling": {
302+
"description": "Triggers when a climate started cooling.",
303+
"description_configured": "[%key:component::climate::triggers::started_cooling::description%]",
304+
"fields": {
305+
"behavior": {
306+
"description": "[%key:component::climate::common::trigger_behavior_description%]",
307+
"name": "[%key:component::climate::common::trigger_behavior_name%]"
308+
}
309+
},
310+
"name": "When a climate started cooling"
311+
},
312+
"started_drying": {
313+
"description": "Triggers when a climate started drying.",
314+
"description_configured": "[%key:component::climate::triggers::started_drying::description%]",
315+
"fields": {
316+
"behavior": {
317+
"description": "[%key:component::climate::common::trigger_behavior_description%]",
318+
"name": "[%key:component::climate::common::trigger_behavior_name%]"
319+
}
320+
},
321+
"name": "When a climate started drying"
322+
},
301323
"started_heating": {
302324
"description": "Triggers when a climate starts to heat.",
303325
"description_configured": "[%key:component::climate::triggers::started_heating::description%]",

homeassistant/components/climate/trigger.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@
1111
from .const import ATTR_HVAC_ACTION, DOMAIN, HVACAction, HVACMode
1212

1313
TRIGGERS: dict[str, type[Trigger]] = {
14+
"started_cooling": make_entity_state_attribute_trigger(
15+
DOMAIN, ATTR_HVAC_ACTION, HVACAction.COOLING
16+
),
17+
"started_drying": make_entity_state_attribute_trigger(
18+
DOMAIN, ATTR_HVAC_ACTION, HVACAction.DRYING
19+
),
1420
"turned_off": make_entity_state_trigger(DOMAIN, HVACMode.OFF),
1521
"turned_on": make_conditional_entity_state_trigger(
1622
DOMAIN,

homeassistant/components/climate/triggers.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
- last
1515
- any
1616

17+
started_cooling: *trigger_common
18+
started_drying: *trigger_common
1719
started_heating: *trigger_common
1820
turned_off: *trigger_common
1921
turned_on: *trigger_common

tests/components/climate/test_trigger.py

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,21 @@ async def test_climate_state_trigger_behavior_any(
142142
@pytest.mark.parametrize(
143143
("trigger", "states"),
144144
[
145+
*parametrize_trigger_states(
146+
trigger="climate.started_cooling",
147+
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.COOLING})],
148+
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
149+
),
150+
*parametrize_trigger_states(
151+
trigger="climate.started_drying",
152+
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.DRYING})],
153+
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
154+
),
145155
*parametrize_trigger_states(
146156
trigger="climate.started_heating",
147-
target_states=[(HVACMode.OFF, {ATTR_HVAC_ACTION: HVACAction.HEATING})],
148-
other_states=[(HVACMode.OFF, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
149-
)
157+
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.HEATING})],
158+
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
159+
),
150160
],
151161
)
152162
async def test_climate_state_attribute_trigger_behavior_any(
@@ -261,11 +271,21 @@ async def test_climate_state_trigger_behavior_first(
261271
@pytest.mark.parametrize(
262272
("trigger", "states"),
263273
[
274+
*parametrize_trigger_states(
275+
trigger="climate.started_cooling",
276+
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.COOLING})],
277+
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
278+
),
279+
*parametrize_trigger_states(
280+
trigger="climate.started_drying",
281+
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.DRYING})],
282+
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
283+
),
264284
*parametrize_trigger_states(
265285
trigger="climate.started_heating",
266-
target_states=[(HVACMode.OFF, {ATTR_HVAC_ACTION: HVACAction.HEATING})],
267-
other_states=[(HVACMode.OFF, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
268-
)
286+
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.HEATING})],
287+
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
288+
),
269289
],
270290
)
271291
async def test_climate_state_attribute_trigger_behavior_first(
@@ -378,11 +398,21 @@ async def test_climate_state_trigger_behavior_last(
378398
@pytest.mark.parametrize(
379399
("trigger", "states"),
380400
[
401+
*parametrize_trigger_states(
402+
trigger="climate.started_cooling",
403+
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.COOLING})],
404+
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
405+
),
406+
*parametrize_trigger_states(
407+
trigger="climate.started_drying",
408+
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.DRYING})],
409+
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
410+
),
381411
*parametrize_trigger_states(
382412
trigger="climate.started_heating",
383-
target_states=[(HVACMode.OFF, {ATTR_HVAC_ACTION: HVACAction.HEATING})],
384-
other_states=[(HVACMode.OFF, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
385-
)
413+
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.HEATING})],
414+
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
415+
),
386416
],
387417
)
388418
async def test_climate_state_attribute_trigger_behavior_last(

0 commit comments

Comments
 (0)