Moved Wink binary sensors to a binary sensor class
parent
dc02370b43
commit
5a64ef2c98
|
@ -10,7 +10,7 @@ import logging
|
||||||
from homeassistant.helpers.entity_component import EntityComponent
|
from homeassistant.helpers.entity_component import EntityComponent
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
from homeassistant.const import (STATE_ON, STATE_OFF)
|
from homeassistant.const import (STATE_ON, STATE_OFF)
|
||||||
from homeassistant.components import (bloomsky, mysensors, zwave)
|
from homeassistant.components import (bloomsky, mysensors, zwave, wink)
|
||||||
|
|
||||||
DOMAIN = 'binary_sensor'
|
DOMAIN = 'binary_sensor'
|
||||||
SCAN_INTERVAL = 30
|
SCAN_INTERVAL = 30
|
||||||
|
@ -29,6 +29,8 @@ SENSOR_CLASSES = [
|
||||||
'heat', # On means hot (or too hot)
|
'heat', # On means hot (or too hot)
|
||||||
'cold', # On means cold (or too cold)
|
'cold', # On means cold (or too cold)
|
||||||
'moving', # On means moving, Off means stopped
|
'moving', # On means moving, Off means stopped
|
||||||
|
'sound', # On means sound detected, Off means no sound
|
||||||
|
'vibration', # On means vibration detected, Off means no vibration
|
||||||
]
|
]
|
||||||
|
|
||||||
# Maps discovered services to their platforms
|
# Maps discovered services to their platforms
|
||||||
|
@ -36,6 +38,7 @@ DISCOVERY_PLATFORMS = {
|
||||||
bloomsky.DISCOVER_BINARY_SENSORS: 'bloomsky',
|
bloomsky.DISCOVER_BINARY_SENSORS: 'bloomsky',
|
||||||
mysensors.DISCOVER_BINARY_SENSORS: 'mysensors',
|
mysensors.DISCOVER_BINARY_SENSORS: 'mysensors',
|
||||||
zwave.DISCOVER_BINARY_SENSORS: 'zwave',
|
zwave.DISCOVER_BINARY_SENSORS: 'zwave',
|
||||||
|
wink.DISCOVER_BINARY_SENSORS: 'wink'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
"""
|
||||||
|
Support for Wink sensors.
|
||||||
|
|
||||||
|
For more details about this platform, please refer to the documentation at
|
||||||
|
at https://home-assistant.io/components/sensor.wink/
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from homeassistant.components.binary_sensor import BinarySensorDevice
|
||||||
|
from homeassistant.const import CONF_ACCESS_TOKEN
|
||||||
|
from homeassistant.helpers.entity import Entity
|
||||||
|
|
||||||
|
REQUIREMENTS = ['python-wink==0.6.2']
|
||||||
|
|
||||||
|
# These are the available sensors mapped to binary_sensor class
|
||||||
|
SENSOR_TYPES = {
|
||||||
|
"opened": "opening",
|
||||||
|
"brightness": "light",
|
||||||
|
"vibration": "vibration",
|
||||||
|
"loudness": "sound"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
|
"""Sets up the Wink 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)
|
||||||
|
|
||||||
|
for sensor in pywink.get_sensors():
|
||||||
|
if sensor.capability() in SENSOR_TYPES:
|
||||||
|
add_devices([WinkBinarySensorDevice(sensor)])
|
||||||
|
|
||||||
|
|
||||||
|
class WinkBinarySensorDevice(BinarySensorDevice, Entity):
|
||||||
|
"""Represents a Wink sensor."""
|
||||||
|
|
||||||
|
def __init__(self, wink):
|
||||||
|
self.wink = wink
|
||||||
|
self._unit_of_measurement = self.wink.UNIT
|
||||||
|
self.capability = self.wink.capability()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_on(self):
|
||||||
|
"""Return True if the binary sensor is on."""
|
||||||
|
if self.capability == "loudness":
|
||||||
|
return self.wink.loudness_boolean()
|
||||||
|
elif self.capability == "vibration":
|
||||||
|
return self.wink.vibration_boolean()
|
||||||
|
elif self.capability == "brightness":
|
||||||
|
return self.wink.brightness_boolean()
|
||||||
|
else:
|
||||||
|
return self.wink.state()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def sensor_class(self):
|
||||||
|
"""Return the class of this sensor, from SENSOR_CLASSES."""
|
||||||
|
return SENSOR_TYPES.get(self.capability)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def unique_id(self):
|
||||||
|
""" Returns the id of this wink sensor """
|
||||||
|
return "{}.{}".format(self.__class__, self.wink.device_id())
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
""" Returns the name of the sensor if any. """
|
||||||
|
return self.wink.name()
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
""" Update state of the sensor. """
|
||||||
|
self.wink.update_state()
|
|
@ -9,7 +9,7 @@ import logging
|
||||||
from homeassistant.components.garage_door import GarageDoorDevice
|
from homeassistant.components.garage_door import GarageDoorDevice
|
||||||
from homeassistant.const import CONF_ACCESS_TOKEN
|
from homeassistant.const import CONF_ACCESS_TOKEN
|
||||||
|
|
||||||
REQUIREMENTS = ['python-wink==0.6.1']
|
REQUIREMENTS = ['python-wink==0.6.2']
|
||||||
|
|
||||||
|
|
||||||
def setup_platform(hass, config, add_devices, discovery_info=None):
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
|
|
|
@ -11,7 +11,7 @@ import logging
|
||||||
from homeassistant.components.light import ATTR_BRIGHTNESS, Light
|
from homeassistant.components.light import ATTR_BRIGHTNESS, Light
|
||||||
from homeassistant.const import CONF_ACCESS_TOKEN
|
from homeassistant.const import CONF_ACCESS_TOKEN
|
||||||
|
|
||||||
REQUIREMENTS = ['python-wink==0.6.1']
|
REQUIREMENTS = ['python-wink==0.6.2']
|
||||||
|
|
||||||
|
|
||||||
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
|
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
|
||||||
|
|
|
@ -11,7 +11,7 @@ import logging
|
||||||
from homeassistant.components.lock import LockDevice
|
from homeassistant.components.lock import LockDevice
|
||||||
from homeassistant.const import CONF_ACCESS_TOKEN
|
from homeassistant.const import CONF_ACCESS_TOKEN
|
||||||
|
|
||||||
REQUIREMENTS = ['python-wink==0.6.1']
|
REQUIREMENTS = ['python-wink==0.6.2']
|
||||||
|
|
||||||
|
|
||||||
def setup_platform(hass, config, add_devices, discovery_info=None):
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
|
|
|
@ -6,10 +6,13 @@ at https://home-assistant.io/components/sensor.wink/
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from homeassistant.const import CONF_ACCESS_TOKEN, STATE_CLOSED, STATE_OPEN
|
from homeassistant.const import (CONF_ACCESS_TOKEN, STATE_CLOSED,
|
||||||
|
STATE_OPEN, TEMP_CELCIUS)
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
|
|
||||||
REQUIREMENTS = ['python-wink==0.6.1']
|
REQUIREMENTS = ['python-wink==0.6.2']
|
||||||
|
|
||||||
|
SENSOR_TYPES = ['temperature', 'humidity']
|
||||||
|
|
||||||
|
|
||||||
def setup_platform(hass, config, add_devices, discovery_info=None):
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
|
@ -27,7 +30,10 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
|
|
||||||
pywink.set_bearer_token(token)
|
pywink.set_bearer_token(token)
|
||||||
|
|
||||||
add_devices(WinkSensorDevice(sensor) for sensor in pywink.get_sensors())
|
for sensor in pywink.get_sensors():
|
||||||
|
if sensor.capability() in SENSOR_TYPES:
|
||||||
|
add_devices([WinkSensorDevice(sensor)])
|
||||||
|
|
||||||
add_devices(WinkEggMinder(eggtray) for eggtray in pywink.get_eggtrays())
|
add_devices(WinkEggMinder(eggtray) for eggtray in pywink.get_eggtrays())
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,12 +42,27 @@ class WinkSensorDevice(Entity):
|
||||||
|
|
||||||
def __init__(self, wink):
|
def __init__(self, wink):
|
||||||
self.wink = wink
|
self.wink = wink
|
||||||
|
self.capability = self.wink.capability()
|
||||||
|
if self.wink.UNIT == "°":
|
||||||
|
self._unit_of_measurement = TEMP_CELCIUS
|
||||||
|
else:
|
||||||
|
self._unit_of_measurement = self.wink.UNIT
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def state(self):
|
def state(self):
|
||||||
"""Returns the state."""
|
"""Returns the state."""
|
||||||
|
if self.capability == "humidity":
|
||||||
|
return self.wink.humidity_percentage()
|
||||||
|
elif self.capability == "temperature":
|
||||||
|
return self.wink.temperature_float()
|
||||||
|
else:
|
||||||
return STATE_OPEN if self.is_open else STATE_CLOSED
|
return STATE_OPEN if self.is_open else STATE_CLOSED
|
||||||
|
|
||||||
|
@property
|
||||||
|
def unit_of_measurement(self):
|
||||||
|
""" Unit of measurement of this entity, if any. """
|
||||||
|
return self._unit_of_measurement
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def unique_id(self):
|
def unique_id(self):
|
||||||
"""Returns the id of this wink sensor."""
|
"""Returns the id of this wink sensor."""
|
||||||
|
|
|
@ -11,7 +11,7 @@ import logging
|
||||||
from homeassistant.components.wink import WinkToggleDevice
|
from homeassistant.components.wink import WinkToggleDevice
|
||||||
from homeassistant.const import CONF_ACCESS_TOKEN
|
from homeassistant.const import CONF_ACCESS_TOKEN
|
||||||
|
|
||||||
REQUIREMENTS = ['python-wink==0.6.1']
|
REQUIREMENTS = ['python-wink==0.6.2']
|
||||||
|
|
||||||
|
|
||||||
def setup_platform(hass, config, add_devices, discovery_info=None):
|
def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
|
|
|
@ -16,11 +16,12 @@ from homeassistant.helpers.entity import ToggleEntity
|
||||||
from homeassistant.loader import get_component
|
from homeassistant.loader import get_component
|
||||||
|
|
||||||
DOMAIN = "wink"
|
DOMAIN = "wink"
|
||||||
REQUIREMENTS = ['python-wink==0.6.1']
|
REQUIREMENTS = ['python-wink==0.6.2']
|
||||||
|
|
||||||
DISCOVER_LIGHTS = "wink.lights"
|
DISCOVER_LIGHTS = "wink.lights"
|
||||||
DISCOVER_SWITCHES = "wink.switches"
|
DISCOVER_SWITCHES = "wink.switches"
|
||||||
DISCOVER_SENSORS = "wink.sensors"
|
DISCOVER_SENSORS = "wink.sensors"
|
||||||
|
DISCOVER_BINARY_SENSORS = "wink.binary_sensors"
|
||||||
DISCOVER_LOCKS = "wink.locks"
|
DISCOVER_LOCKS = "wink.locks"
|
||||||
DISCOVER_GARAGE_DOORS = "wink.garage_doors"
|
DISCOVER_GARAGE_DOORS = "wink.garage_doors"
|
||||||
|
|
||||||
|
@ -41,6 +42,7 @@ def setup(hass, config):
|
||||||
('switch', lambda: pywink.get_switches or
|
('switch', lambda: pywink.get_switches or
|
||||||
pywink.get_sirens or
|
pywink.get_sirens or
|
||||||
pywink.get_powerstrip_outlets, DISCOVER_SWITCHES),
|
pywink.get_powerstrip_outlets, DISCOVER_SWITCHES),
|
||||||
|
('binary_sensor', pywink.get_sensors, DISCOVER_BINARY_SENSORS),
|
||||||
('sensor', lambda: pywink.get_sensors or
|
('sensor', lambda: pywink.get_sensors or
|
||||||
pywink.get_eggtrays, DISCOVER_SENSORS),
|
pywink.get_eggtrays, DISCOVER_SENSORS),
|
||||||
('lock', pywink.get_locks, DISCOVER_LOCKS),
|
('lock', pywink.get_locks, DISCOVER_LOCKS),
|
||||||
|
|
|
@ -201,12 +201,13 @@ python-telegram-bot==3.2.0
|
||||||
python-twitch==1.2.0
|
python-twitch==1.2.0
|
||||||
|
|
||||||
# homeassistant.components.wink
|
# homeassistant.components.wink
|
||||||
|
# homeassistant.components.binary_sensor.wink
|
||||||
# homeassistant.components.garage_door.wink
|
# homeassistant.components.garage_door.wink
|
||||||
# homeassistant.components.light.wink
|
# homeassistant.components.light.wink
|
||||||
# homeassistant.components.lock.wink
|
# homeassistant.components.lock.wink
|
||||||
# homeassistant.components.sensor.wink
|
# homeassistant.components.sensor.wink
|
||||||
# homeassistant.components.switch.wink
|
# homeassistant.components.switch.wink
|
||||||
python-wink==0.6.1
|
python-wink==0.6.2
|
||||||
|
|
||||||
# homeassistant.components.keyboard
|
# homeassistant.components.keyboard
|
||||||
pyuserinput==0.1.9
|
pyuserinput==0.1.9
|
||||||
|
|
Loading…
Reference in New Issue