More minor fixes

This commit is contained in:
Thomas Lovén 2019-01-01 23:50:00 +01:00
parent acabc57019
commit c0d9f01e29
3 changed files with 26 additions and 18 deletions

View File

@ -104,10 +104,12 @@ class Entity:
class LightEntity(Entity): class LightEntity(Entity):
def set_state(self, old, new): def set_state(self, old, new):
if new == "on": if new == "on" or new == True:
self._hass.call_service("light/turn_on", entity_id = self._entity) self._hass.call_service("light/turn_on", entity_id = self._entity)
elif new == "off": self._state = "on"
elif new == "off" or new == False:
self._hass.call_service("light/turn_off", entity_id = self._entity) self._hass.call_service("light/turn_off", entity_id = self._entity)
self._state = "off"
class SwitchEntity(Entity): class SwitchEntity(Entity):

View File

@ -7,7 +7,6 @@ class OutsideLights(Entities):
self.register_entity(l, l) self.register_entity(l, l)
self.listen_event(self.update, 'TOD_TOD') self.listen_event(self.update, 'TOD_TOD')
self.listen_event(self.update, 'TOD_DARK')
self.run_in(lambda *_: self.update(None, None, None), 2) self.run_in(lambda *_: self.update(None, None, None), 2)
def update(self, event, data, kwarg): def update(self, event, data, kwarg):

View File

@ -11,6 +11,8 @@ class TimeOfDay(Timers, Entities):
self.run_in(self._setup_inputs, 1) self.run_in(self._setup_inputs, 1)
self.updating = False
def _setup_inputs(self, kwargs): def _setup_inputs(self, kwargs):
inputs = [ inputs = [
'morning', 'morning',
@ -29,24 +31,20 @@ class TimeOfDay(Timers, Entities):
del e['name'] del e['name']
del e['default'] del e['default']
self.register_entity(i, name, True, default, e) self.register_entity(i, name, True, default, e)
for i in inputs:
self.e[i].listen(self._update, {'trigger': 'setting', 'entity': i}) self.e[i].listen(self._update, {'trigger': 'setting', 'entity': i})
self._update(None, None, {'trigger': 'init'}) self._update(None, None, {'trigger': 'init'})
def _update(self, old=None, new=None, kwarg=None): def _update(self, old=None, new=None, kwarg=None):
if self.updating:
return
if kwarg is None: if kwarg is None:
kwarg = old kwarg = old
trigger = kwarg.get('trigger', None) trigger = kwarg.get('trigger', None)
# Tell listeners if Time Of Day or Dark has changed
if kwarg.get('entity', None) == 'tod':
self.fire_event('TOD_TOD', old = old, new = new)
return
if kwarg.get('entity', None) == 'dark':
self.fire_event('TOD_DARK', old = old, new = new)
return
self.log(f"TOD - updated by {trigger}") self.log(f"TOD - updated by {trigger}")
# Set up triggers for each TOD # Set up triggers for each TOD
@ -60,20 +58,20 @@ class TimeOfDay(Timers, Entities):
) )
# Set up triggers for sunrise and sunset # Set up triggers for sunrise and sunset
if trigger != 'sunrise':
sunrise = float(self.e['sunrise'].state) sunrise = float(self.e['sunrise'].state)
sunrise = timedelta(minutes=sunrise) sunrise = timedelta(minutes=sunrise)
sunrise = (self.sunrise() + sunrise).time() sunrise = (self.sunrise() + sunrise).time()
if trigger != 'sunrise':
self.run_once( self.run_once(
'sunrise', 'sunrise',
self._update, self._update,
sunrise, sunrise,
trigger='sunrise' trigger='sunrise'
) )
if trigger != 'sunset':
sunset = float(self.e['sunset'].state) sunset = float(self.e['sunset'].state)
sunset = timedelta(minutes=sunset) sunset = timedelta(minutes=sunset)
sunset = (self.sunset() + sunset).time() sunset = (self.sunset() + sunset).time()
if trigger != 'sunset':
self.run_once( self.run_once(
'sunset', 'sunset',
self._update, self._update,
@ -104,14 +102,23 @@ class TimeOfDay(Timers, Entities):
self.log(f"TOD - Time of day is {tod}, sun {'has set' if dark else 'is up'}") self.log(f"TOD - Time of day is {tod}, sun {'has set' if dark else 'is up'}")
# Update outputs # Update outputs
self.updating = True
self.e['dark'].state = dark self.e['dark'].state = dark
self.e['dark'].push() self.e['dark'].push()
self.e['tod'].state = tod self.e['tod'].state = tod
self.e['tod'].push() self.e['tod'].push()
self.e['sunrise'].attr['time'] = sunrise.strftime("%H:%M:%S")
self.e['sunrise'].push()
self.e['sunset'].attr['time'] = sunset.strftime("%H:%M:%S")
self.e['sunset'].push()
self.updating = False
# Tell listeners if Time Of Day or Dark has changed
self.fire_event('TOD_TOD', old = old, new = new)
@property @property
def tod(self): def tod(self):
return self.e['tod'].state return self.e['tod'].state
@property @property
def dark(self): def dark(self):
return self.e['dark'].state return self.e['dark'].state == "on"