1515 STATE_UNAVAILABLE ,
1616 CONF_CONDITIONS ,
1717 CONF_ATTRIBUTE ,
18- CONF_STATE
18+ CONF_STATE ,
19+ CONF_ACTION
1920)
2021from homeassistant .components .climate import (
2122 SERVICE_SET_TEMPERATURE ,
@@ -49,14 +50,14 @@ def parse_service_call(data: dict):
4950 """turn action data into a service call"""
5051
5152 service_call = {
52- CONF_SERVICE : data [CONF_SERVICE ],
53+ CONF_ACTION : data [CONF_ACTION ] if CONF_ACTION in data else data [ CONF_SERVICE ], # map service->action for backwards compaibility
5354 CONF_SERVICE_DATA : data [ATTR_SERVICE_DATA ],
5455 }
5556 if ATTR_ENTITY_ID in data and data [ATTR_ENTITY_ID ]:
5657 service_call [ATTR_ENTITY_ID ] = data [ATTR_ENTITY_ID ]
5758
5859 if (
59- service_call [CONF_SERVICE ]
60+ service_call [CONF_ACTION ]
6061 == "{}.{}" .format (CLIMATE_DOMAIN , SERVICE_SET_TEMPERATURE )
6162 and ATTR_HVAC_MODE in service_call [CONF_SERVICE_DATA ]
6263 and ATTR_ENTITY_ID in service_call
@@ -66,7 +67,7 @@ def parse_service_call(data: dict):
6667 # set temperature setpoint again for integrations which lose setpoint after switching hvac_mode
6768 _service_call = [
6869 {
69- CONF_SERVICE : "{}.{}" .format (CLIMATE_DOMAIN , SERVICE_SET_HVAC_MODE ),
70+ CONF_ACTION : "{}.{}" .format (CLIMATE_DOMAIN , SERVICE_SET_HVAC_MODE ),
7071 ATTR_ENTITY_ID : service_call [ATTR_ENTITY_ID ],
7172 CONF_SERVICE_DATA : {
7273 ATTR_HVAC_MODE : service_call [CONF_SERVICE_DATA ][ATTR_HVAC_MODE ]
@@ -80,15 +81,15 @@ def parse_service_call(data: dict):
8081 ):
8182 _service_call .extend ([
8283 {
83- CONF_SERVICE : ACTION_WAIT_STATE_CHANGE ,
84+ CONF_ACTION : ACTION_WAIT_STATE_CHANGE ,
8485 ATTR_ENTITY_ID : service_call [ATTR_ENTITY_ID ],
8586 CONF_SERVICE_DATA : {
8687 CONF_DELAY : 50 ,
8788 CONF_STATE : service_call [CONF_SERVICE_DATA ][ATTR_HVAC_MODE ]
8889 },
8990 },
9091 {
91- CONF_SERVICE : "{}.{}" .format (CLIMATE_DOMAIN , SERVICE_SET_TEMPERATURE ),
92+ CONF_ACTION : "{}.{}" .format (CLIMATE_DOMAIN , SERVICE_SET_TEMPERATURE ),
9293 ATTR_ENTITY_ID : service_call [ATTR_ENTITY_ID ],
9394 CONF_SERVICE_DATA : {
9495 x : service_call [CONF_SERVICE_DATA ][x ]
@@ -123,12 +124,12 @@ def entity_is_available(hass: HomeAssistant, entity, is_target_entity=False):
123124 return False
124125
125126
126- def service_is_available (hass : HomeAssistant , service : str ):
127- """evaluate whether a HA service is ready for targeting"""
128- if service in [ACTION_WAIT , ACTION_WAIT_STATE_CHANGE ]:
127+ def action_is_available (hass : HomeAssistant , action : str ):
128+ """evaluate whether a HA action is ready for targeting"""
129+ if action in [ACTION_WAIT , ACTION_WAIT_STATE_CHANGE ]:
129130 return True
130- domain = service .split ("." ).pop (0 )
131- domain_service = service .split ("." ).pop (1 )
131+ domain = action .split ("." ).pop (0 )
132+ domain_service = action .split ("." ).pop (1 )
132133 return hass .services .has_service (domain , domain_service )
133134
134135
@@ -193,8 +194,8 @@ def action_has_effect(action: dict, hass: HomeAssistant):
193194 if ATTR_ENTITY_ID not in action :
194195 return True
195196
196- domain = action [CONF_SERVICE ].split ("." ).pop (0 )
197- service = action [CONF_SERVICE ].split ("." ).pop (1 )
197+ domain = action [CONF_ACTION ].split ("." ).pop (0 )
198+ service = action [CONF_ACTION ].split ("." ).pop (1 )
198199 state = hass .states .get (action [ATTR_ENTITY_ID ])
199200 current_state = state .state if state else None
200201
@@ -276,7 +277,7 @@ async def async_cleanup_queues(self, id: str = None):
276277 self ._queues .pop (key )
277278
278279 if not len (self ._queues .keys ()):
279- _LOGGER .debug ("[{}]: Finished execution of actions " .format (self .id ))
280+ _LOGGER .debug ("[{}]: Finished execution of tasks " .format (self .id ))
280281
281282 async def async_empty_queue (self , ** kwargs ):
282283 """remove all objects from queue"""
@@ -435,18 +436,18 @@ def is_finished(self):
435436 return len (self ._queue ) == 0
436437
437438 def is_available (self ):
438- """check if all services and entities involved in the task are available"""
439+ """check if all actions and entities involved in the task are available"""
439440
440- # check services
441- required_services = [action [CONF_SERVICE ] for action in self ._queue ]
442- failed_service = next (
443- (x for x in required_services if not service_is_available (self .hass , x )),
441+ # check actions
442+ required_actions = [action [CONF_ACTION ] for action in self ._queue ]
443+ failed_action = next (
444+ (x for x in required_actions if not action_is_available (self .hass , x )),
444445 None ,
445446 )
446- if failed_service :
447+ if failed_action :
447448 _LOGGER .debug (
448- "[{}]: Service {} is unavailable, scheduled action cannot be executed" .format (
449- self .id , failed_service
449+ "[{}]: Action {} is unavailable, scheduled task cannot be executed" .format (
450+ self .id , failed_action
450451 )
451452 )
452453 return False
@@ -510,26 +511,26 @@ async def async_process_queue(self, task_idx=0):
510511 while len (self ._queue ):
511512 self ._queue .pop ()
512513
513- skip_action = False
514+ skip_task = False
514515
515516 while task_idx < len (self ._queue ):
516- action = self ._queue [task_idx ]
517+ task = self ._queue [task_idx ]
517518
518- if action [ CONF_SERVICE ] in [ACTION_WAIT , ACTION_WAIT_STATE_CHANGE ]:
519+ if task [ CONF_ACTION ] in [ACTION_WAIT , ACTION_WAIT_STATE_CHANGE ]:
519520 if skip_action :
520521 task_idx = task_idx + 1
521522 continue
522- elif action [ CONF_SERVICE ] == ACTION_WAIT_STATE_CHANGE :
523- state = self .hass .states .get (action [ATTR_ENTITY_ID ])
524- if CONF_ATTRIBUTE in action [CONF_SERVICE_DATA ]:
525- state = state .attributes .get (action [CONF_SERVICE_DATA ][CONF_ATTRIBUTE ])
523+ elif task [ CONF_ACTION ] == ACTION_WAIT_STATE_CHANGE :
524+ state = self .hass .states .get (task [ATTR_ENTITY_ID ])
525+ if CONF_ATTRIBUTE in task [CONF_SERVICE_DATA ]:
526+ state = state .attributes .get (task [CONF_SERVICE_DATA ][CONF_ATTRIBUTE ])
526527 else :
527528 state = state .state
528- if state == action [CONF_SERVICE_DATA ][CONF_STATE ]:
529+ if state == task [CONF_SERVICE_DATA ][CONF_STATE ]:
529530 _LOGGER .debug (
530- "[{}]: Entity {} is already set to {}, proceed with next action " .format (
531+ "[{}]: Entity {} is already set to {}, proceed with next task " .format (
531532 self .id ,
532- action [ATTR_ENTITY_ID ],
533+ task [ATTR_ENTITY_ID ],
533534 state ,
534535 )
535536 )
@@ -547,12 +548,12 @@ async def async_timer_finished(_now):
547548
548549 self ._timer = async_call_later (
549550 self .hass ,
550- action [CONF_SERVICE_DATA ][CONF_DELAY ],
551+ task [CONF_SERVICE_DATA ][CONF_DELAY ],
551552 async_timer_finished ,
552553 )
553554 _LOGGER .debug (
554- "[{}]: Postponing next action for {} seconds" .format (
555- self .id , action [CONF_SERVICE_DATA ][CONF_DELAY ]
555+ "[{}]: Postponing next task for {} seconds" .format (
556+ self .id , task [CONF_SERVICE_DATA ][CONF_DELAY ]
556557 )
557558 )
558559
@@ -562,9 +563,9 @@ async def async_entity_changed(event):
562563 old_state = event .data ["old_state" ]
563564 new_state = event .data ["new_state" ]
564565
565- if CONF_ATTRIBUTE in action [CONF_SERVICE_DATA ]:
566- old_state = old_state .attributes .get (action [CONF_SERVICE_DATA ][CONF_ATTRIBUTE ])
567- new_state = new_state .attributes .get (action [CONF_SERVICE_DATA ][CONF_ATTRIBUTE ])
566+ if CONF_ATTRIBUTE in task [CONF_SERVICE_DATA ]:
567+ old_state = old_state .attributes .get (task [CONF_SERVICE_DATA ][CONF_ATTRIBUTE ])
568+ new_state = new_state .attributes .get (task [CONF_SERVICE_DATA ][CONF_ATTRIBUTE ])
568569 else :
569570 old_state = old_state .state
570571 new_state = new_state .state
@@ -578,8 +579,8 @@ async def async_entity_changed(event):
578579 new_state
579580 )
580581 )
581- if new_state == action [CONF_SERVICE_DATA ][CONF_STATE ]:
582- _LOGGER .debug ("[{}]: Stop postponing next action " .format (self .id ))
582+ if new_state == task [CONF_SERVICE_DATA ][CONF_STATE ]:
583+ _LOGGER .debug ("[{}]: Stop postponing next task " .format (self .id ))
583584 if self ._timer :
584585 self ._timer ()
585586 self ._timer = None
@@ -588,30 +589,30 @@ async def async_entity_changed(event):
588589 self .queue_busy = False
589590 await self .async_process_queue (task_idx + 1 )
590591
591- if action [ CONF_SERVICE ] == ACTION_WAIT_STATE_CHANGE :
592+ if task [ CONF_ACTION ] == ACTION_WAIT_STATE_CHANGE :
592593 self ._state_update_listener = async_track_state_change_event (
593- self .hass , action [ATTR_ENTITY_ID ], async_entity_changed
594+ self .hass , task [ATTR_ENTITY_ID ], async_entity_changed
594595 )
595596 return
596597
597- if ATTR_ENTITY_ID in action :
598+ if ATTR_ENTITY_ID in task :
598599 _LOGGER .debug (
599- "[{}]: Executing service {} on entity {}" .format (
600- self .id , action [ CONF_SERVICE ], action [ATTR_ENTITY_ID ]
600+ "[{}]: Executing action {} on entity {}" .format (
601+ self .id , task [ CONF_ACTION ], task [ATTR_ENTITY_ID ]
601602 )
602603 )
603604 else :
604605 _LOGGER .debug (
605- "[{}]: Executing service {}" .format (self .id , action [ CONF_SERVICE ])
606+ "[{}]: Executing action {}" .format (self .id , task [ CONF_ACTION ])
606607 )
607608
608- skip_action = not action_has_effect (action , self .hass )
609+ skip_action = not action_has_effect (task , self .hass )
609610 if skip_action :
610611 _LOGGER .debug ("[{}]: Action has no effect, skipping" .format (self .id ))
611612 else :
612613 await async_call_from_config (
613614 self .hass ,
614- action ,
615+ task ,
615616 )
616617 task_idx = task_idx + 1
617618
0 commit comments