added handle_off
This commit is contained in:
@@ -184,6 +184,9 @@ class ControllerDaylight(Hass):
|
|||||||
)
|
)
|
||||||
# self.log(self.adjuster)
|
# self.log(self.adjuster)
|
||||||
|
|
||||||
|
self.listen_state(callback=self.handle_off,
|
||||||
|
entity_id=[e.entity_id for e in self.entities],
|
||||||
|
new='off')
|
||||||
self.listen_state(callback=self.handle_state_change,
|
self.listen_state(callback=self.handle_state_change,
|
||||||
entity_id=[e.entity_id for e in self.entities],
|
entity_id=[e.entity_id for e in self.entities],
|
||||||
attribute='brightness')
|
attribute='brightness')
|
||||||
@@ -194,21 +197,26 @@ class ControllerDaylight(Hass):
|
|||||||
if len(ents) > 1:
|
if len(ents) > 1:
|
||||||
ents[-1] = f'and {ents[-1]}'
|
ents[-1] = f'and {ents[-1]}'
|
||||||
delim = ', ' if len(ents) >= 3 else ' '
|
delim = ', ' if len(ents) >= 3 else ' '
|
||||||
self.log(f'Listening for state changes on {delim.join(ents)}')
|
ents = delim.join(ents)
|
||||||
|
self.log(f'Listening for state changes on {ents}')
|
||||||
|
|
||||||
|
interval = self.args.get('interval', 5)
|
||||||
|
|
||||||
self.run_every(
|
self.run_every(
|
||||||
callback=self.update_sensors,
|
callback=self.update_sensors,
|
||||||
start='now',
|
start='now',
|
||||||
interval=self.args.get('interval', 5)
|
interval=interval
|
||||||
)
|
)
|
||||||
|
self.log(f'Updating sensors every {timedelta(seconds=interval)}')
|
||||||
|
|
||||||
for entity in self.entities:
|
for entity in self.entities:
|
||||||
self.run_every(
|
self.run_every(
|
||||||
callback=self.ongoing_adjustment,
|
callback=self.ongoing_adjustment,
|
||||||
start='now',
|
start='now',
|
||||||
interval=self.args.get('interval', 5),
|
interval=interval,
|
||||||
entity=entity
|
entity=entity.entity_id
|
||||||
)
|
)
|
||||||
|
self.log(f'Updating sensors every {timedelta(seconds=interval)}')
|
||||||
|
|
||||||
if (entity_name := self.args.get('enable')) is not None:
|
if (entity_name := self.args.get('enable')) is not None:
|
||||||
self.enable_entity: Entity = self.get_entity(entity_name)
|
self.enable_entity: Entity = self.get_entity(entity_name)
|
||||||
@@ -263,15 +271,22 @@ class ControllerDaylight(Hass):
|
|||||||
self.enable_entity.set_state(state='on' if new else 'off')
|
self.enable_entity.set_state(state='on' if new else 'off')
|
||||||
|
|
||||||
def ongoing_adjustment(self, kwargs=None):
|
def ongoing_adjustment(self, kwargs=None):
|
||||||
|
# self.log('Ongoing adjustment')
|
||||||
|
entity: Entity = self.get_entity(kwargs['entity'])
|
||||||
|
|
||||||
if self.enabled:
|
if self.enabled:
|
||||||
entity: Entity = self.get_entity(kwargs['entity'])
|
|
||||||
if entity.get_state() == 'on':
|
if entity.get_state() == 'on':
|
||||||
self.log(f'Ongoing adjustment for {entity.friendly_name}')
|
self.log(f'Ongoing adjustment for {entity.friendly_name}')
|
||||||
settings = self.adjuster.current_settings
|
settings = self.adjuster.current_settings
|
||||||
matching = self.matching_state(entity_id=kwargs['entity'])
|
if not self.matching_state(entity_id=entity.entity_id):
|
||||||
if not matching and not self.room.is_sleeping:
|
if not self.room.is_sleeping:
|
||||||
self.turn_on(entity_id=kwargs['entity'], **settings)
|
self.turn_on(entity_id=entity.entity_id, **settings)
|
||||||
self.log(f'Adjusted {self.friendly_name(kwargs["entity"])} with {settings}')
|
self.log(f'Adjusted {entity.friendly_name} with {settings}')
|
||||||
|
|
||||||
|
else:
|
||||||
|
self.log(f'Sleeping mode active')
|
||||||
|
else:
|
||||||
|
self.log(f'{entity.friendly_name} settings already match')
|
||||||
else:
|
else:
|
||||||
self.log(f'{entity.friendly_name} is off - no adjustment')
|
self.log(f'{entity.friendly_name} is off - no adjustment')
|
||||||
else:
|
else:
|
||||||
@@ -282,6 +297,13 @@ class ControllerDaylight(Hass):
|
|||||||
id = f'sensor.{self.name}_{key}'
|
id = f'sensor.{self.name}_{key}'
|
||||||
self.set_state(
|
self.set_state(
|
||||||
entity_id=id, state=val,
|
entity_id=id, state=val,
|
||||||
attributes={
|
attributes={'friendly_name': f'Daylight, {key}, {self.name}',
|
||||||
'friendly_name': f'Daylight, {key}, {self.name}',
|
'state_class': 'measurement'})
|
||||||
'state_class': 'measurement'})
|
|
||||||
|
def handle_off(self, entity, attribute, old, new, kwargs):
|
||||||
|
self.log('Off handle')
|
||||||
|
self.run_in(
|
||||||
|
callback=lambda kwargs: self.enable_entity.set_state(state='on'),
|
||||||
|
delay=1.0
|
||||||
|
)
|
||||||
|
self.log('Re-enabled')
|
||||||
Reference in New Issue
Block a user