aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--driver.py7
-rw-r--r--light.py32
2 files changed, 32 insertions, 7 deletions
diff --git a/driver.py b/driver.py
index 91b537e..5280d7d 100644
--- a/driver.py
+++ b/driver.py
@@ -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()
diff --git a/light.py b/light.py
index 6b5961f..f7cb243 100644
--- a/light.py
+++ b/light.py
@@ -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))
+