Change entity helper interface

This commit is contained in:
Thomas Lovén 2018-12-27 21:46:53 +01:00
parent e3ba6be486
commit 951351139e
2 changed files with 30 additions and 30 deletions

View File

@ -54,10 +54,9 @@ class Entities(Base):
class Entity: class Entity:
def __init__(self, hass, entity): def __init__(self, hass, entity):
self.entity = entity self._entity = entity
self.domain, self.name = entity.split('.') self._hass = hass
self.hass = hass self._hass.listen_state(self._listener, entity=entity, attributes='all')
self.hass.listen_state(self._listener, entity=entity, attributes='all')
self._listeners = [] self._listeners = []
@ -73,27 +72,27 @@ class Entities(Base):
@property @property
def state(self): def state(self):
return self.hass.get_state(self.entity) return self._hass.get_state(self._entity)
@state.setter @state.setter
def state(self, state): def state(self, state):
self.hass.set_state(self.entity, state=state) self._hass.set_state(self._entity, state=state)
@property def __getattr__(self, key):
def attributes(self): return self._hass.get_state(self._entity, attribute='all')['attributes'].get(key, None)
return self.hass.get_state(self.entity, attribute='all')['attributes'] def __setattr__(self, key, value):
if key.startswith('_'):
def __getitem__(self, key): self.__dict__[key] = value
if key == 'state': return
return self.state d = self._hass.get_state(self._entity, attribute='all')['attributes']
else: d[key] = value
return self.attributes.get(key, None) self._hass.set_state(self._entity, attributes=d)
def __setitem__(self, key, value): def __delattr__(self, key):
if key == 'state': if key.startswith('_'):
self.state = value del self.__dict__[key]
else: return
d = self.attributes d = self._hass.get_state(self._entity, attribute='all')['attributes']
d[key] = value d[key] = ''
self.hass.set_state(self.entity, attributes=d) self._hass.set_state(self._entity, attributes=d)
class LightEntity(Entities.Entity): class LightEntity(Entities.Entity):
def __init__(self, hass, entity): def __init__(self, hass, entity):
@ -105,9 +104,9 @@ class Entities(Base):
@state.setter @state.setter
def state(self, state): def state(self, state):
if state == 'on': if state == 'on':
self.hass.call_service('light/turn_on', entity_id = self.entity) self._hass.call_service('light/turn_on', entity_id = self._entity)
elif state == 'off': elif state == 'off':
self.hass.call_service('light/turn_off', entity_id = self.entity) self._hass.call_service('light/turn_off', entity_id = self._entity)
else: else:
return return
super(Entities.LightEntity, self.__class__).state.fset(self, state) super(Entities.LightEntity, self.__class__).state.fset(self, state)

View File

@ -10,16 +10,17 @@ class HelloWorld(base.Entities, base.Timers):
self.run_in('test1', self.after_time, 3) self.run_in('test1', self.after_time, 3)
self.run_in('test2', self.after_time2, 5) self.run_in('test2', self.after_time2, 5)
self.run_in(self.after_time2, 7) # self.run_in(self.after_time2, 7)
self.cancel_timer('test2') # self.cancel_timer('test2')
self.register_entity('taklampa', 'light.kontoret') self.register_entity('taklampa', 'light.kontoret')
def after_time(self, kwargs): def after_time(self, kwargs):
self.log("Running function") self.log("Running function")
self.e['taklampa']['state'] = "off" self.e['taklampa'].icon = "mdi:lamp"
self.log(f"State is {self.e['taklampa']['state']}") self.log(f"State is {self.e['taklampa'].state}")
def after_time2(self, kwargs): def after_time2(self, kwargs):
self.log("Running function2") self.log("Running function2")
self.e['taklampa']['state'] = "on" del self.e['taklampa'].icon
self.log(f"State is {self.e['taklampa']['state']}")
self.log(f"State is {self.e['taklampa'].state}")