hass-core/homeassistant/components/light/insteon_hub.py
Teagan Glenn 826ec9b9d7 Add a Fan component and support for an Insteon Hub Fan (#2964)
* Fan component and service definitions
* Insteon Hub fan support
2016-08-25 14:47:07 +02:00

79 lines
2.4 KiB
Python

"""
Support for Insteon Hub lights.
For more details about this platform, please refer to the documentation at
https://home-assistant.io/components/insteon_hub/
"""
from homeassistant.components.insteon_hub import (INSTEON, InsteonDevice)
from homeassistant.components.light import (ATTR_BRIGHTNESS,
SUPPORT_BRIGHTNESS, Light)
SUPPORT_INSTEON_HUB = SUPPORT_BRIGHTNESS
DEPENDENCIES = ['insteon_hub']
def setup_platform(hass, config, add_devices, discovery_info=None):
"""Setup the Insteon Hub light platform."""
devs = []
for device in INSTEON.devices:
if device.DeviceCategory == "Switched Lighting Control":
devs.append(InsteonLightDevice(device))
if device.DeviceCategory == "Dimmable Lighting Control":
devs.append(InsteonDimmableDevice(device))
add_devices(devs)
class InsteonLightDevice(InsteonDevice, Light):
"""A representation of a light device."""
def __init__(self, node: object) -> None:
"""Initialize the device."""
super(InsteonLightDevice, self).__init__(node)
self._value = 0
def update(self) -> None:
"""Update state of the device."""
resp = self._node.send_command('get_status', wait=True)
try:
self._value = resp['response']['level']
except KeyError:
pass
@property
def is_on(self) -> None:
"""Return the boolean response if the node is on."""
return self._value != 0
def turn_on(self, **kwargs) -> None:
"""Turn device on."""
if self._send_command('on'):
self._value = 100
def turn_off(self, **kwargs) -> None:
"""Turn device off."""
if self._send_command('off'):
self._value = 0
class InsteonDimmableDevice(InsteonLightDevice):
"""A representation for a dimmable device."""
@property
def brightness(self) -> int:
"""Return the brightness of this light between 0..255."""
return round(self._value / 100 * 255, 0) # type: int
@property
def supported_features(self) -> int:
"""Flag supported features."""
return SUPPORT_INSTEON_HUB
def turn_on(self, **kwargs) -> None:
"""Turn device on."""
level = 100 # type: int
if ATTR_BRIGHTNESS in kwargs:
level = round(kwargs[ATTR_BRIGHTNESS] / 255 * 100, 0) # type: int
if self._send_command('on', level=level):
self._value = level