diff --git a/homeassistant/components/light/limitlessled.py b/homeassistant/components/light/limitlessled.py new file mode 100644 index 00000000000..53411d319d7 --- /dev/null +++ b/homeassistant/components/light/limitlessled.py @@ -0,0 +1,102 @@ +""" +homeassistant.components.light.limitlessled +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Support for LimitlessLED bulbs, also known as... + +EasyBulb +AppLight +AppLamp +MiLight +LEDme +dekolight +iLight + +""" +import random +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): + 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, + config['group_%d_name' % (i)], + STATE_OFF + ) + ) + + add_devices_callback(lights) + + +class LimitlessLED(ToggleEntity): + def __init__(self, led, group, name, state, brightness=180): + 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 + self._state = state + 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)