diff options
Diffstat (limited to 'light.py')
-rw-r--r-- | light.py | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/light.py b/light.py new file mode 100644 index 0000000..f7cb243 --- /dev/null +++ b/light.py @@ -0,0 +1,98 @@ +import homeassistant.helpers.config_validation as cv +import voluptuous as vol +from math import floor +from homeassistant.const import CONF_MAC +from .driver import BekenConnection, makemsg, BEKEN_CHARACTERISTIC_LAMP +from homeassistant.components.light import ( + LightEntity, + + SUPPORT_BRIGHTNESS, + SUPPORT_COLOR, + SUPPORT_WHITE_VALUE, + + ATTR_BRIGHTNESS, + ATTR_RGBW_COLOR, + + COLOR_MODE_RGBW, + PLATFORM_SCHEMA +) + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required("name"): cv.string, + vol.Required("address"): cv.string +}) + +SUPPORT_FEATURES_RGB = SUPPORT_BRIGHTNESS | SUPPORT_COLOR +SUPPORT_FEATURES_WHITE = SUPPORT_BRIGHTNESS + +def setup_platform(hass, config, add_entities, discovery_info=None): + add_entities([ BekenLight(name=config["name"], address=config["address"]) ]) + +class BekenLight(LightEntity): + def __init__(self, **kwargs): + self._name = kwargs["name"] + self._address = kwargs["address"] + self._on = False + self._brightness = 255 + self._rgb = (255, 255, 255) + self._w = 255 + self._connection = BekenConnection(self._address) + self._connection.start_threads() + + @property + def color_mode(self): + return COLOR_MODE_RGBW + + @property + def supported_color_modes(self): + return set([ COLOR_MODE_RGBW ]) + + @property + def supported_features(self): + return SUPPORT_BRIGHTNESS | SUPPORT_COLOR | SUPPORT_WHITE_VALUE + + @property + def unique_id(self): + return self._address + + @property + def name(self): + return self._name + + @property + def is_on(self): + return self._on + + @property + def brightness(self): + return self._brightness + + @property + def rgbw_color(self): + return self._rgb + (self._w,) + + def turn_on(self, **kwargs): + self._on = True + + brightness = kwargs.get(ATTR_BRIGHTNESS) + if brightness != None: + self._brightness = brightness + + rgbw = kwargs.get(ATTR_RGBW_COLOR) + if rgbw != None: + self._rgb = rgbw[0:3] + self._w = rgbw[3] + + self.update_beken_lamp() + + def turn_off(self, **kwargs): + self._on = False + self.update_beken_lamp() + + def update_beken_lamp(self): + r = int(self._on) * self._rgb[0] + g = int(self._on) * self._rgb[1] + b = int(self._on) * self._rgb[2] + l = int(self._on) * self._w + self._connection.send(BEKEN_CHARACTERISTIC_LAMP, makemsg(r, g, b, l)) + |