core/homeassistant/components/light/limitlessled.py

112 lines
2.6 KiB
Python
Raw Normal View History

2015-05-18 23:27:09 +00:00
"""
homeassistant.components.light.limitlessled
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Support for LimitlessLED bulbs, also known as...
EasyBulb
AppLight
AppLamp
MiLight
LEDme
dekolight
iLight
light:
platform: limitlessled
host: 192.168.1.10
group_1_name: Living Room
group_2_name: Bedroom
group_3_name: Office
group_4_name: Kitchen
2015-05-18 23:27:09 +00:00
"""
import logging
from homeassistant.helpers.entity import ToggleEntity
from homeassistant.const import STATE_ON, STATE_OFF, DEVICE_DEFAULT_NAME
from homeassistant.components.light import ATTR_BRIGHTNESS
_LOGGER = logging.getLogger(__name__)
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
2015-05-19 01:09:34 +00:00
""" Gets the LimitlessLED lights. """
2015-05-18 23:27:09 +00:00
try:
import ledcontroller
except ImportError:
_LOGGER.exception("Error while importing dependency ledcontroller.")
return
led = ledcontroller.LedController(config['host'])
lights = []
for i in range(1, 5):
if 'group_%d_name' % (i) in config:
lights.append(
LimitlessLED(
led,
i,
2015-05-19 01:31:30 +00:00
config['group_%d_name' % (i)]
2015-05-18 23:27:09 +00:00
)
)
add_devices_callback(lights)
class LimitlessLED(ToggleEntity):
2015-05-19 01:09:34 +00:00
""" Represents a LimitlessLED light """
2015-05-19 01:31:30 +00:00
def __init__(self, led, group, name):
2015-05-18 23:27:09 +00:00
self.led = led
self.group = group
# LimitlessLEDs don't report state, we have track it ourselves.
self.led.off(self.group)
self._name = name or DEVICE_DEFAULT_NAME
2015-05-19 01:31:30 +00:00
self._state = STATE_OFF
2015-05-18 23:27:09 +00:00
self._brightness = brightness
@property
def should_poll(self):
""" No polling needed for a demo light. """
return False
@property
def name(self):
""" Returns the name of the device if any. """
return self._name
@property
def state(self):
""" Returns the name of the device if any. """
return self._state
@property
def state_attributes(self):
""" Returns optional state attributes. """
if self.is_on:
return {
ATTR_BRIGHTNESS: self._brightness,
}
@property
def is_on(self):
""" True if device is on. """
return self._state == STATE_ON
def turn_on(self, **kwargs):
""" Turn the device on. """
self._state = STATE_ON
if ATTR_BRIGHTNESS in kwargs:
self._brightness = kwargs[ATTR_BRIGHTNESS]
self.led.set_brightness(self._brightness, self.group)
def turn_off(self, **kwargs):
""" Turn the device off. """
self._state = STATE_OFF
self.led.off(self.group)