diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py index 9165725c..6666f662 100755 --- a/custom_components/adaptive_lighting/switch.py +++ b/custom_components/adaptive_lighting/switch.py @@ -334,24 +334,26 @@ class AdaptiveSwitch(SwitchEntity, RestoreEntity): async def async_added_to_hass(self): """Call when entity about to be added to hass.""" - async_track_state_change( - self.hass, - self._unpack_light_groups(self._lights), - self._light_state_changed, - to_state="on", - ) - track_kwargs = dict(hass=self.hass, action=self._state_changed) - if self._sleep_entity is not None: - sleep_kwargs = dict(track_kwargs, entity_ids=self._sleep_entity) - async_track_state_change(**sleep_kwargs, to_state=self._sleep_state) - async_track_state_change(**sleep_kwargs, from_state=self._sleep_state) - - if self._disable_entity is not None: + if self._lights: async_track_state_change( - **track_kwargs, - entity_ids=self._disable_entity, - from_state=self._disable_state, + self.hass, + self._unpack_light_groups(self._lights), + self._light_state_changed, + to_state="on", + from_state="off", ) + track_kwargs = dict(hass=self.hass, action=self._state_changed) + if self._sleep_entity is not None: + sleep_kwargs = dict(track_kwargs, entity_ids=self._sleep_entity) + async_track_state_change(**sleep_kwargs, to_state=self._sleep_state) + async_track_state_change(**sleep_kwargs, from_state=self._sleep_state) + + if self._disable_entity is not None: + disable_kwargs = dict(track_kwargs, entity_ids=self._disable_entity) + async_track_state_change( + **disable_kwargs, from_state=self._disable_state + ) + async_track_state_change(**disable_kwargs, to_state=self._disable_state) last_state = await self.async_get_last_state() if last_state and last_state.state == STATE_ON: @@ -569,9 +571,7 @@ class AdaptiveSwitch(SwitchEntity, RestoreEntity): ) def _should_adjust(self): - if not self.is_on: - return False - if self._is_disabled(): + if not self._lights or not self.is_on or self._is_disabled(): return False return True @@ -587,12 +587,11 @@ class AdaptiveSwitch(SwitchEntity, RestoreEntity): await asyncio.wait(tasks) async def _light_state_changed(self, entity_id, from_state, to_state): - assert to_state.state == "on" - if from_state is None or from_state.state != "on": - _LOGGER.debug(_difference_between_states(from_state, to_state)) - await self._update_lights( - lights=[entity_id], transition=self._initial_transition, force=True - ) + assert to_state.state == "on" and from_state.state == "off" + _LOGGER.debug(_difference_between_states(from_state, to_state)) + await self._update_lights( + lights=[entity_id], transition=self._initial_transition, force=True + ) async def _state_changed(self, entity_id, from_state, to_state): _LOGGER.debug(_difference_between_states(from_state, to_state))