""" homeassistant.components.rollershutter.demo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Demo platform for the rollorshutter component. """ from homeassistant.const import EVENT_TIME_CHANGED from homeassistant.helpers.event import track_utc_time_change from homeassistant.components.rollershutter import RollershutterDevice def setup_platform(hass, config, add_devices, discovery_info=None): """ Sets up the Demo rollershutters. """ add_devices([ DemoRollershutter(hass, 'Kitchen Window', 0), DemoRollershutter(hass, 'Living Room Window', 100), ]) class DemoRollershutter(RollershutterDevice): """ Represents a rollershutter.. """ # pylint: disable=no-self-use def __init__(self, hass, name, position): self.hass = hass self._name = name self._position = position self._moving_up = True self._listener = None @property def name(self): """ Returns the name of the rollershutter. """ return self._name @property def should_poll(self): """ No polling needed for a demo rollershutter. """ return False @property def current_position(self): """ Returns the current position of the rollershutter. """ return self._position def move_up(self, **kwargs): """ Move the rollershutter down. """ if self._position == 0: return self._listen() self._moving_up = True def move_down(self, **kwargs): """ Move the rollershutter up. """ if self._position == 100: return self._listen() self._moving_up = False def stop(self, **kwargs): """ Stop the rollershutter. """ if self._listener is not None: self.hass.bus.remove_listener(EVENT_TIME_CHANGED, self._listener) self._listener = None def _listen(self): """ Listens for changes. """ if self._listener is None: self._listener = track_utc_time_change(self.hass, self._time_changed) def _time_changed(self, now): """ Track time changes. """ if self._moving_up: self._position -= 10 else: self._position += 10 if self._position % 100 == 0: self.stop() self.update_ha_state()