Skip to content
Snippets Groups Projects
Commit cb1f7a33 authored by jkerdreu's avatar jkerdreu
Browse files

- Fix support for HSV & brightness


git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2947 b32b6428-25c9-4566-ad07-03861ab6144f
parent 516cc059
No related branches found
No related tags found
No related merge requests found
import colorsys
from xaal.schemas import devices
from xaal.lib import tools,Device
......@@ -247,14 +248,23 @@ class Gateway(AqaraDev):
self.ready = False
self.rgb = None
self._secret = None
self._blink_color = 0
self.connect()
lamp = devices.lamp_color(self.base_addr)
lamp.methods['turn_on'] = self.lamp_on
lamp.methods['turn_off'] = self.lamp_off
lamp.methods['rand'] = self.lamp_rand
lamp.methods['blink'] = self.lamp_blink
lamp.methods['debug'] = self.debug
lamp.methods['set_hsv'] = self.set_hsv
lamp.methods['set_brightness'] = self.set_brightness
# The gateway only support RGB, no white
lamp.attributes['mode'] = 'color'
lamp.unsupported_methods = ['set_mode','set_white_temperature','set_scene']
unused_attrs = ['white_temperature','scene']
for k in unused_attrs:
attr = lamp.get_attribute(k)
lamp.del_attribute(attr)
lamp.unsupported_attributes = unused_attrs
self.devices.append(lamp)
siren = Device('siren.sound',self.base_addr + 1)
......@@ -375,47 +385,61 @@ class Gateway(AqaraDev):
#========================================================================
## RGB Leds
#========================================================================
def get_rgb(self,red,green,blue,brightness=0xFF):
def rgb_to_value(self,red,green,blue,brightness=0xFF):
return brightness<<24|( red << 16)|( green << 8)|blue
def value_to_rgb(self,value):
brightness = (value >> 24) & 0xFF
r = (value >> 16) & 0xFF
g = (value >> 8) & 0xFF
b = value & 0xFF
return (r,g,b,brightness)
def update_color(self):
lamp = self.devices[0]
rgb = self.value_to_rgb(self.rgb)
r = rgb[0] / 255.0
g = rgb[1] / 255.0
b = rgb[2] / 255.0
brightness = rgb[3]
hsv = colorsys.rgb_to_hsv(r,g,b)
h = round(hsv[0] * 360)
s = round(hsv[1],2)
v = round(hsv[2],2)
lamp.attributes['hsv'] = [h,s,v]
lamp.attributes['brightness'] = brightness
def set_hsv(self,_hsv,_smooth=None):
# FIXME
if isinstance(_hsv,str):
hsv = [float(k) for k in list(_hsv.split(','))]
else:
hsv = _hsv
h,s,v = hsv
rgb=tuple(round(i * 255) for i in colorsys.hsv_to_rgb(h/360.0,s,v))
value= self.rgb_to_value(*rgb)
self.lamp_set(value)
def set_brightness(self,_brightness,_smooth=None):
brightness = int(_brightness)
rgb = self.value_to_rgb(self.rgb)
r,g,b = rgb[:3]
value = self.rgb_to_value(r,g,b,brightness)
self.lamp_set(value)
def lamp_set(self,value):
data = {"rgb" : value}
self.write(data)
def lamp_on(self):
color = self.rgb or self.get_rgb(255,170,170)
color = self.rgb or self.rgb_to_value(255,170,170)
self.lamp_set(color)
def lamp_off(self):
self.lamp_set(0)
def lamp_rand(self):
import random
red = random.randint(0,255)
green = random.randint(0,255)
blue = random.randint(0,255)
rgb = self.get_rgb(red,green,blue)
self.lamp_set(rgb)
def _red(self):
self.lamp_set(self.get_rgb(255,0,0))
def _white(self):
self.lamp_set(self.get_rgb(255,255,255))
def _lamp_blink(self):
if self._blink_color ==0:
self._red()
self._blink_color = 1
else:
self._white()
self._blink_color = 0
def lamp_blink(self):
eng = self.devices[0].engine
eng.add_timer(self.lamp_off,20,1)
eng.add_timer(self._lamp_blink,1,15)
#========================================================================
## Siren
#========================================================================
......@@ -464,6 +488,7 @@ class Gateway(AqaraDev):
else:
self.devices[0].attributes['light'] = True
self.rgb = rgb
self.update_color()
val = data.get('illumination',None)
if val:
# This value is in lm, we should map this to lux, but
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment