hass-core/homeassistant/components/sensor/wink.py
Fabian Affolter 9f2aae1357 Maintenance 2nd ()
* Add link to docs

* Fix link

* Update line breaks

* Update ordering

* Align vera platofrm to only use add_devices
(instead od add_devices_callback)

* Remove line break

* Use consts

* Update ordering

* Update ordering

* Use const, create default name, use string formatting

* Update ordering

* Use const

* Update import style

* Update ordering and line breaks

* update line breaks

* Set default port

* Set defaults and update ordering

* Update ordering

* Minor style updates

* Update ordering, defaults, line breaks, and readability

* Use constants

* Add line breaks

* use string formatting

* Update line breaks

* Update logger
2016-10-30 09:58:34 +01:00

98 lines
2.9 KiB
Python

"""
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.const import (
STATE_CLOSED, STATE_OPEN, TEMP_CELSIUS)
from homeassistant.helpers.entity import Entity
from homeassistant.components.wink import WinkDevice
from homeassistant.loader import get_component
DEPENDENCIES = ['wink']
SENSOR_TYPES = ['temperature', 'humidity', 'balance', 'proximity']
def setup_platform(hass, config, add_devices, discovery_info=None):
"""Set up the Wink platform."""
import pywink
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())
for piggy_bank in pywink.get_piggy_banks():
try:
if piggy_bank.capability() in SENSOR_TYPES:
add_devices([WinkSensorDevice(piggy_bank)])
except AttributeError:
logging.getLogger(__name__).error("Device is not a sensor")
class WinkSensorDevice(WinkDevice, Entity):
"""Representation of a Wink sensor."""
def __init__(self, wink):
"""Initialize the Wink device."""
super().__init__(wink)
wink = get_component('wink')
self.capability = self.wink.capability()
if self.wink.UNIT == '°':
self._unit_of_measurement = TEMP_CELSIUS
else:
self._unit_of_measurement = self.wink.UNIT
@property
def state(self):
"""Return the state."""
if self.capability == 'humidity':
return round(self.wink.humidity_percentage())
elif self.capability == 'temperature':
return round(self.wink.temperature_float(), 1)
elif self.capability == 'balance':
return round(self.wink.balance() / 100, 2)
elif self.capability == 'proximity':
return self.wink.proximity_float()
else:
return STATE_OPEN if self.is_open else STATE_CLOSED
@property
def available(self):
"""
True if connection == True.
Always return true for Wink porkfolio due to
bug in API.
"""
if self.capability == 'balance':
return True
return self.wink.available
@property
def unit_of_measurement(self):
"""Return the unit of measurement of this entity, if any."""
return self._unit_of_measurement
@property
def is_open(self):
"""Return true if door is open."""
return self.wink.state()
class WinkEggMinder(WinkDevice, Entity):
"""Representation of a Wink Egg Minder."""
def __init__(self, wink):
"""Initialize the sensor."""
WinkDevice.__init__(self, wink)
@property
def state(self):
"""Return the state."""
return self.wink.state()