From 40840044ca4891807c09dac4f4fcac3479b13979 Mon Sep 17 00:00:00 2001 From: Phil Kates Date: Sat, 18 Jun 2016 09:59:13 -0700 Subject: [PATCH] Wink Rollershutter (#2294) * Update python-wink to 0.7.7 * Add Wink Rollershutter component --- .../components/binary_sensor/wink.py | 2 +- homeassistant/components/garage_door/wink.py | 2 +- homeassistant/components/light/wink.py | 2 +- homeassistant/components/lock/wink.py | 2 +- .../components/rollershutter/wink.py | 92 +++++++++++++++++++ homeassistant/components/sensor/wink.py | 2 +- homeassistant/components/switch/wink.py | 2 +- homeassistant/components/wink.py | 3 +- requirements_all.txt | 3 +- 9 files changed, 102 insertions(+), 8 deletions(-) create mode 100644 homeassistant/components/rollershutter/wink.py diff --git a/homeassistant/components/binary_sensor/wink.py b/homeassistant/components/binary_sensor/wink.py index c6989cae98c..d9c2b7d577a 100644 --- a/homeassistant/components/binary_sensor/wink.py +++ b/homeassistant/components/binary_sensor/wink.py @@ -10,7 +10,7 @@ from homeassistant.components.binary_sensor import BinarySensorDevice from homeassistant.const import CONF_ACCESS_TOKEN, ATTR_BATTERY_LEVEL from homeassistant.helpers.entity import Entity -REQUIREMENTS = ['python-wink==0.7.6'] +REQUIREMENTS = ['python-wink==0.7.7'] # These are the available sensors mapped to binary_sensor class SENSOR_TYPES = { diff --git a/homeassistant/components/garage_door/wink.py b/homeassistant/components/garage_door/wink.py index ace97b5fba9..18ec6f2ba56 100644 --- a/homeassistant/components/garage_door/wink.py +++ b/homeassistant/components/garage_door/wink.py @@ -9,7 +9,7 @@ import logging from homeassistant.components.garage_door import GarageDoorDevice from homeassistant.const import CONF_ACCESS_TOKEN, ATTR_BATTERY_LEVEL -REQUIREMENTS = ['python-wink==0.7.6'] +REQUIREMENTS = ['python-wink==0.7.7'] def setup_platform(hass, config, add_devices, discovery_info=None): diff --git a/homeassistant/components/light/wink.py b/homeassistant/components/light/wink.py index c7a7637b047..2438cdaab9a 100644 --- a/homeassistant/components/light/wink.py +++ b/homeassistant/components/light/wink.py @@ -13,7 +13,7 @@ from homeassistant.util import color as color_util from homeassistant.util.color import \ color_temperature_mired_to_kelvin as mired_to_kelvin -REQUIREMENTS = ['python-wink==0.7.6'] +REQUIREMENTS = ['python-wink==0.7.7'] def setup_platform(hass, config, add_devices_callback, discovery_info=None): diff --git a/homeassistant/components/lock/wink.py b/homeassistant/components/lock/wink.py index f8c0fd479b7..2572796df35 100644 --- a/homeassistant/components/lock/wink.py +++ b/homeassistant/components/lock/wink.py @@ -9,7 +9,7 @@ import logging from homeassistant.components.lock import LockDevice from homeassistant.const import CONF_ACCESS_TOKEN, ATTR_BATTERY_LEVEL -REQUIREMENTS = ['python-wink==0.7.6'] +REQUIREMENTS = ['python-wink==0.7.7'] def setup_platform(hass, config, add_devices, discovery_info=None): diff --git a/homeassistant/components/rollershutter/wink.py b/homeassistant/components/rollershutter/wink.py new file mode 100644 index 00000000000..e01b2573ac6 --- /dev/null +++ b/homeassistant/components/rollershutter/wink.py @@ -0,0 +1,92 @@ +""" +Support for Wink Shades. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/rollershutter.wink/ +""" +import logging + +from homeassistant.components.rollershutter import RollershutterDevice +from homeassistant.const import CONF_ACCESS_TOKEN + +REQUIREMENTS = ['python-wink==0.7.7'] + + +def setup_platform(hass, config, add_devices, discovery_info=None): + """Setup the Wink rollershutter platform.""" + import pywink + + if discovery_info is None: + token = config.get(CONF_ACCESS_TOKEN) + + if token is None: + logging.getLogger(__name__).error( + "Missing wink access_token. " + "Get one at https://winkbearertoken.appspot.com/") + return + + pywink.set_bearer_token(token) + + add_devices(WinkRollershutterDevice(shade) for shade in + pywink.get_shades()) + + +class WinkRollershutterDevice(RollershutterDevice): + """Representation of a Wink rollershutter (shades).""" + + def __init__(self, wink): + """Initialize the rollershutter.""" + self.wink = wink + self._battery = None + + @property + def should_poll(self): + """Wink Shades don't track their position.""" + return False + + @property + def unique_id(self): + """Return the ID of this wink rollershutter.""" + return "{}.{}".format(self.__class__, self.wink.device_id()) + + @property + def name(self): + """Return the name of the rollershutter if any.""" + return self.wink.name() + + def update(self): + """Update the state of the rollershutter.""" + return self.wink.update_state() + + @property + def available(self): + """True if connection == True.""" + return self.wink.available + + def move_down(self): + """Close the shade.""" + self.wink.set_state(0) + + def move_up(self): + """Open the shade.""" + self.wink.set_state(1) + + @property + def current_position(self): + """Return current position of roller shutter. + + Wink reports blind shade positions as 0 or 1. + home-assistant expects: + None is unknown, 0 is closed, 100 is fully open. + """ + state = self.wink.state() + if state == 0: + return 0 + elif state == 1: + return 100 + else: + return None + + def stop(self): + """Can't stop Wink rollershutter due to API.""" + pass diff --git a/homeassistant/components/sensor/wink.py b/homeassistant/components/sensor/wink.py index c175901eaaa..3fb914d6cd9 100644 --- a/homeassistant/components/sensor/wink.py +++ b/homeassistant/components/sensor/wink.py @@ -11,7 +11,7 @@ from homeassistant.const import (CONF_ACCESS_TOKEN, STATE_CLOSED, ATTR_BATTERY_LEVEL) from homeassistant.helpers.entity import Entity -REQUIREMENTS = ['python-wink==0.7.6'] +REQUIREMENTS = ['python-wink==0.7.7'] SENSOR_TYPES = ['temperature', 'humidity'] diff --git a/homeassistant/components/switch/wink.py b/homeassistant/components/switch/wink.py index d01c306db1c..a5b67f5ddcf 100644 --- a/homeassistant/components/switch/wink.py +++ b/homeassistant/components/switch/wink.py @@ -9,7 +9,7 @@ import logging from homeassistant.components.wink import WinkToggleDevice from homeassistant.const import CONF_ACCESS_TOKEN -REQUIREMENTS = ['python-wink==0.7.6'] +REQUIREMENTS = ['python-wink==0.7.7'] def setup_platform(hass, config, add_devices, discovery_info=None): diff --git a/homeassistant/components/wink.py b/homeassistant/components/wink.py index 5a6d21a9c7a..85bc7f46cef 100644 --- a/homeassistant/components/wink.py +++ b/homeassistant/components/wink.py @@ -11,7 +11,7 @@ from homeassistant.helpers import validate_config, discovery from homeassistant.helpers.entity import ToggleEntity DOMAIN = "wink" -REQUIREMENTS = ['python-wink==0.7.6'] +REQUIREMENTS = ['python-wink==0.7.7'] def setup(hass, config): @@ -32,6 +32,7 @@ def setup(hass, config): ('binary_sensor', pywink.get_sensors), ('sensor', lambda: pywink.get_sensors or pywink.get_eggtrays), ('lock', pywink.get_locks), + ('rollershutter', pywink.get_shades), ('garage_door', pywink.get_garage_doors)): if func_exists(): diff --git a/requirements_all.txt b/requirements_all.txt index 34d899c09c9..368ea27649c 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -308,9 +308,10 @@ python-twitch==1.2.0 # homeassistant.components.garage_door.wink # homeassistant.components.light.wink # homeassistant.components.lock.wink +# homeassistant.components.rollershutter.wink # homeassistant.components.sensor.wink # homeassistant.components.switch.wink -python-wink==0.7.6 +python-wink==0.7.7 # homeassistant.components.keyboard pyuserinput==0.1.9