diff --git a/homeassistant/components/cover/__init__.py b/homeassistant/components/cover/__init__.py index 1dc6101f1e9..d27a1665635 100644 --- a/homeassistant/components/cover/__init__.py +++ b/homeassistant/components/cover/__init__.py @@ -33,6 +33,11 @@ ENTITY_ID_ALL_COVERS = group.ENTITY_ID_FORMAT.format('all_covers') ENTITY_ID_FORMAT = DOMAIN + '.{}' +DEVICE_CLASSES = [ + 'window', # Window control + 'garage', # Garage door control +] + _LOGGER = logging.getLogger(__name__) ATTR_CURRENT_POSITION = 'current_position' diff --git a/homeassistant/components/cover/demo.py b/homeassistant/components/cover/demo.py index 070c37a0e3c..484ff94f4f5 100644 --- a/homeassistant/components/cover/demo.py +++ b/homeassistant/components/cover/demo.py @@ -14,6 +14,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): DemoCover(hass, 'Kitchen Window'), DemoCover(hass, 'Hall Window', 10), DemoCover(hass, 'Living Room Window', 70, 50), + DemoCover(hass, 'Garage Door', device_class='garage'), ]) @@ -21,11 +22,13 @@ class DemoCover(CoverDevice): """Representation of a demo cover.""" # pylint: disable=no-self-use - def __init__(self, hass, name, position=None, tilt_position=None): + def __init__(self, hass, name, position=None, tilt_position=None, + device_class=None): """Initialize the cover.""" self.hass = hass self._name = name self._position = position + self._device_class = device_class self._set_position = None self._set_tilt_position = None self._tilt_position = tilt_position @@ -33,6 +36,10 @@ class DemoCover(CoverDevice): self._closing_tilt = True self._unsub_listener_cover = None self._unsub_listener_cover_tilt = None + if position is None: + self._closed = True + else: + self._closed = self.current_cover_position <= 0 @property def name(self): @@ -57,17 +64,20 @@ class DemoCover(CoverDevice): @property def is_closed(self): """Return if the cover is closed.""" - if self._position is not None: - if self.current_cover_position > 0: - return False - else: - return True - else: - return None + return self._closed + + @property + def device_class(self): + """Return the class of this device, from component DEVICE_CLASSES.""" + return self._device_class def close_cover(self, **kwargs): """Close the cover.""" - if self._position in (0, None): + if self._position == 0: + return + elif self._position is None: + self._closed = True + self.schedule_update_ha_state() return self._listen_cover() @@ -83,7 +93,11 @@ class DemoCover(CoverDevice): def open_cover(self, **kwargs): """Open the cover.""" - if self._position in (100, None): + if self._position == 100: + return + elif self._position is None: + self._closed = False + self.schedule_update_ha_state() return self._listen_cover() @@ -149,6 +163,9 @@ class DemoCover(CoverDevice): if self._position in (100, 0, self._set_position): self.stop_cover() + + self._closed = self.current_cover_position <= 0 + self.schedule_update_ha_state() def _listen_cover_tilt(self): diff --git a/homeassistant/components/cover/garadget.py b/homeassistant/components/cover/garadget.py index 1847e58c4a5..04df954aac6 100644 --- a/homeassistant/components/cover/garadget.py +++ b/homeassistant/components/cover/garadget.py @@ -168,6 +168,11 @@ class GaradgetCover(CoverDevice): else: return self._state == STATE_CLOSED + @property + def device_class(self): + """Return the class of this device, from component DEVICE_CLASSES.""" + return 'garage' + def get_token(self): """Get new token for usage during this session.""" args = { diff --git a/homeassistant/components/cover/zwave.py b/homeassistant/components/cover/zwave.py index 0e40b46a3f9..2d61af4d00e 100644 --- a/homeassistant/components/cover/zwave.py +++ b/homeassistant/components/cover/zwave.py @@ -140,3 +140,8 @@ class ZwaveGarageDoor(zwave.ZWaveDeviceEntity, CoverDevice): def open_cover(self): """Open the garage door.""" self._value.data = True + + @property + def device_class(self): + """Return the class of this device, from component DEVICE_CLASSES.""" + return 'garage'