From 0a6f496425c465c77ded6dc781e820c883dccdb0 Mon Sep 17 00:00:00 2001 From: Greg Dowling Date: Thu, 15 Sep 2016 19:47:03 +0100 Subject: [PATCH] Add support for Vera covers. (#3411) --- homeassistant/components/cover/vera.py | 70 ++++++++++++++++++++++++++ homeassistant/components/vera.py | 7 +-- requirements_all.txt | 2 +- 3 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 homeassistant/components/cover/vera.py diff --git a/homeassistant/components/cover/vera.py b/homeassistant/components/cover/vera.py new file mode 100644 index 00000000000..0a9e8abb243 --- /dev/null +++ b/homeassistant/components/cover/vera.py @@ -0,0 +1,70 @@ +""" +Support for Vera cover - curtains, rollershutters etc. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/cover.vera/ +""" +import logging + +from homeassistant.components.cover import CoverDevice +from homeassistant.components.vera import ( + VeraDevice, VERA_DEVICES, VERA_CONTROLLER) + +DEPENDENCIES = ['vera'] + +_LOGGER = logging.getLogger(__name__) + + +def setup_platform(hass, config, add_devices_callback, discovery_info=None): + """Find and return Vera covers.""" + add_devices_callback( + VeraCover(device, VERA_CONTROLLER) for + device in VERA_DEVICES['cover']) + + +# pylint: disable=abstract-method +class VeraCover(VeraDevice, CoverDevice): + """Represents a Vera Cover in Home Assistant.""" + + def __init__(self, vera_device, controller): + """Initialize the Vera device.""" + VeraDevice.__init__(self, vera_device, controller) + + @property + def current_cover_position(self): + """ + Return current position of cover. + + 0 is closed, 100 is fully open. + """ + position = self.vera_device.get_level() + if position <= 5: + return 0 + if position >= 95: + return 100 + return position + + def set_cover_position(self, position, **kwargs): + """Move the cover to a specific position.""" + self.vera_device.set_level(position) + + @property + def is_closed(self): + """Return if the cover is closed.""" + if self.current_cover_position is not None: + if self.current_cover_position > 0: + return False + else: + return True + + def open_cover(self, **kwargs): + """Open the cover.""" + self.vera_device.open() + + def close_cover(self, **kwargs): + """Close the cover.""" + self.vera_device.close() + + def stop_cover(self, **kwargs): + """Stop the cover.""" + self.vera_device.stop() diff --git a/homeassistant/components/vera.py b/homeassistant/components/vera.py index cfe2add1315..c78c4461f88 100644 --- a/homeassistant/components/vera.py +++ b/homeassistant/components/vera.py @@ -20,7 +20,7 @@ from homeassistant.const import ( EVENT_HOMEASSISTANT_STOP) from homeassistant.helpers.entity import Entity -REQUIREMENTS = ['pyvera==0.2.16'] +REQUIREMENTS = ['pyvera==0.2.20'] _LOGGER = logging.getLogger(__name__) @@ -47,7 +47,7 @@ CONFIG_SCHEMA = vol.Schema({ }, extra=vol.ALLOW_EXTRA) VERA_COMPONENTS = [ - 'binary_sensor', 'sensor', 'light', 'switch', 'lock', 'climate' + 'binary_sensor', 'sensor', 'light', 'switch', 'lock', 'climate', 'cover' ] @@ -109,12 +109,13 @@ def map_vera_device(vera_device, remap): return 'lock' if isinstance(vera_device, veraApi.VeraThermostat): return 'climate' + if isinstance(vera_device, veraApi.VeraCurtain): + return 'cover' if isinstance(vera_device, veraApi.VeraSwitch): if vera_device.device_id in remap: return 'light' else: return 'switch' - # VeraCurtain: NOT SUPPORTED YET return None diff --git a/requirements_all.txt b/requirements_all.txt index bfbeaae0296..85ab6baf688 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -406,7 +406,7 @@ python-wink==0.7.14 # pyuserinput==0.1.11 # homeassistant.components.vera -pyvera==0.2.16 +pyvera==0.2.20 # homeassistant.components.wemo pywemo==0.4.6