From 35a4a3fd0ea56fe8d11f79c1dd896efd684979fc Mon Sep 17 00:00:00 2001 From: John Lancaster <32917998+jsl12@users.noreply.github.com> Date: Tue, 18 Apr 2023 00:00:12 -0500 Subject: [PATCH] added sensors --- apps/controller.py | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/apps/controller.py b/apps/controller.py index c68d0ca..6b1b221 100644 --- a/apps/controller.py +++ b/apps/controller.py @@ -1,6 +1,5 @@ from dataclasses import dataclass, field from datetime import datetime, timedelta -from html import entities from typing import List from appdaemon.entity import Entity @@ -69,7 +68,9 @@ class ControllerMotion(ControllerEntities): except Exception: self.off_duration = timedelta() - self.sync_state() + if self.current_state: + self.room.activate() + self.listen_motion_off() self.listen_motion_on() @@ -77,18 +78,6 @@ class ControllerMotion(ControllerEntities): def current_state(self) -> bool: return any(e.get_state() == 'on' for e in self.entities) - def sync_state(self, - entity=None, - attribute=None, - old=None, - new=None, - kwargs=None): - self.log(f'Syncing state, current state: {self.current_state}') - if self.current_state: - self.room.activate() - else: - self.room.deactivate() - def listen_motion_on(self): self.listen_state( callback=self.callback_motion_on, @@ -162,8 +151,7 @@ class ControllerDaylight(ControllerEntities): self.listen_state(callback=self.handle_state_change, entity_id=[e.entity_id for e in self.entities]) self.log(f'Listening for state {[e.friendly_name for e in self.entities]}') - for entity in self.entities: - self.handle_state_change(entity=entity, new=entity.get_state()) + self.run_every(callback=self.update_sensors, start='now', interval=5.0) def handle_state_change(self, entity=None, attribute=None, old=None, new=None, kwargs=None): if new == 'on': @@ -191,10 +179,18 @@ class ControllerDaylight(ControllerEntities): return valid def ongoing_adjustment(self, kwargs): + self.log(f'Ongoing adjustment') settings = self.adjuster.current_settings valid = self.matching_state(entity_id=kwargs['entity']) if not valid: self.turn_on(entity_id=kwargs['entity'], **settings) self.log(f'Adjusted {self.friendly_name(kwargs["entity"])} with {settings}') - # else: - # self.log(f'Already valid') + + def update_sensors(self, kwargs): + for key, val in self.adjuster.current_settings.items(): + id = f'sensor.{self.name}_{key}' + self.set_state( + entity_id=id, state=val, + attributes={ + 'friendly_name': f'Daylight, {key}, {self.name}', + 'state_class': 'measurement'})