diff options
author | lonkaars <loek@pipeframe.xyz> | 2021-08-13 13:58:12 +0200 |
---|---|---|
committer | lonkaars <loek@pipeframe.xyz> | 2021-08-13 13:58:12 +0200 |
commit | 63102954fa115629d3fef84c0e251aa1a8269201 (patch) | |
tree | 338ba2f15b5fe23e04767c5ebc5f84817dd9bf5b | |
parent | a1821bb663f834295d94acaf3a8c531fb30848a9 (diff) |
working (still buggy)
-rw-r--r-- | driver.py | 7 | ||||
-rw-r--r-- | light.py | 32 |
2 files changed, 32 insertions, 7 deletions
@@ -4,6 +4,9 @@ import threading import time import sys +BEKEN_CHARACTERISTIC_NULL = 0x0001 +BEKEN_CHARACTERISTIC_LAMP = 0x002a + def makemsg(r, g, b, l=0): return bytes([ int(g > 0), g, @@ -21,7 +24,7 @@ class BekenConnection: def keep_alive(self): while True: - self.send(0x0001, bytes(10)) + self.send(BEKEN_CHARACTERISTIC_NULL, bytes(10)) time.sleep(10) def send(self, characteristic, message): @@ -53,6 +56,6 @@ if __name__ == "__main__": def user_input(): for line in sys.stdin: r, g, b, l = [ int(x, 16) for x in [ line.strip()[i:i+2] for i in range(0, 8, 2) ] ] - con.send(0x002a, makemsg(r, g, b, l)) + con.send(BEKEN_CHARACTERISTIC_LAMP, makemsg(r, g, b, l)) threading.Thread(target=user_input).start() @@ -1,7 +1,8 @@ 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 +from .driver import BekenConnection, makemsg, BEKEN_CHARACTERISTIC_LAMP from homeassistant.components.light import ( LightEntity, @@ -33,7 +34,10 @@ class BekenLight(LightEntity): self._address = kwargs["address"] self._on = False self._brightness = 255 - self._rgbw = (255, 255, 255, 255) # r, g, b, w + self._rgb = (255, 255, 255) + self._w = 255 + self._connection = BekenConnection(self._address) + self._connection.start_threads() @property def color_mode(self): @@ -65,12 +69,30 @@ class BekenLight(LightEntity): @property def rgbw_color(self): - return self._rgbw + return self._rgb + (self._w,) def turn_on(self, **kwargs): self._on = True - self._brightness = kwargs.get(ATTR_BRIGHTNESS) - self._rgbw = kwargs.get(ATTR_RGBW_COLOR) + + 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)) + |