Started on some entity helpers
This commit is contained in:
parent
611a86d017
commit
c76ccadfdd
@ -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)
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user