From c76ccadfddf45ced116cf524e9c89be562ce849f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Thu, 27 Dec 2018 20:02:50 +0100 Subject: [PATCH] Started on some entity helpers --- appdaemon/apps/base.py | 52 +++++++++++++++++++++++++++++++++++++++++ appdaemon/apps/hello.py | 6 ++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/appdaemon/apps/base.py b/appdaemon/apps/base.py index 3faf66b..3ae9dfd 100644 --- a/appdaemon/apps/base.py +++ b/appdaemon/apps/base.py @@ -38,3 +38,55 @@ class Timers(Base): return getattr(self, f'_{f}')(name, *args, **kwargs) setattr(self, f, fn) +class Entities(Base): + def initialize(self): + if(getattr(super(), 'initialize', False)): + super().initialize() + + self.e = {} + + def register_entity(self, name, entity): + self.e[name] = Entities.Entity(self, entity) + + class Entity: + def __init__(self, hass, entity): + self.entity = entity + self.domain, self.name = entity.split('.') + self.hass = hass + self.hass.listen_state(self._listener, entity=entity, attributes='all') + self._listeners = [] + + + def _listener(self, entity, attribute, old, new, kwargs): + for l in self._listeners: + l['callback'](l['kwarg']) + def listen(self, callback, kwarg=None): + self._listeners.append({'callback': callback, 'kwarg': kwarg}) + return self._listeners[-1] + def unlisten(self, handle): + if handle in self._listeners: + self._listeners.remove(handle) + + @property + def state(self): + return self.hass.get_state(self.entity) + @state.setter + def state(self, state): + self.hass.set_state(self.entity, state=state) + + @property + def attributes(self): + return self.hass.get_state(self.entity, attribute='all')['attributes'] + + def __getitem__(self, key): + if key == 'state': + return self.state + else: + return self.attributes.get(key, None) + def __setitem__(self, key, value): + if key == 'state': + self.state = value + else: + d = self.attributes + d[key] = value + self.hass.set_state(self.entity, attributes=d) diff --git a/appdaemon/apps/hello.py b/appdaemon/apps/hello.py index 49dd2e4..3778ce9 100644 --- a/appdaemon/apps/hello.py +++ b/appdaemon/apps/hello.py @@ -1,6 +1,6 @@ import base -class HelloWorld(base.Timers): +class HelloWorld(base.Entities, base.Timers): def initialize(self): super().initialize() @@ -13,7 +13,11 @@ class HelloWorld(base.Timers): self.run_in(self.after_time2, 7) self.cancel_timer('test2') + self.register_entity('taklampa', 'light.kontoret') + def after_time(self, kwargs): self.log("Running function") + self.e['taklampa']['icon'] = "mdi:lamp" def after_time2(self, kwargs): self.log("Running function2") + self.e['taklampa']['icon'] = "mdi:lightbulb"