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

RGB is working, but still not ready

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2932 b32b6428-25c9-4566-ad07-03861ab6144f
parent b20ca08e
No related branches found
No related tags found
No related merge requests found
...@@ -2,22 +2,33 @@ from xaal.schemas import devices ...@@ -2,22 +2,33 @@ from xaal.schemas import devices
from xaal.lib import tools,Device from xaal.lib import tools,Device
import logging import logging
import colorsys
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def find_class(meross_dev):
if meross_dev.type == 'msl430':
return RGBLamp
class MerossDev(object): class MerossDev(object):
def __init__(self,dev,cfg): def __init__(self,meross_dev,base_addr):
self.meross = dev self.meross = meross_dev
self.setup() self.base_addr = base_addr
self.dev = None self.dev = None
self.setup()
def setup(self): def setup(self):
logger.warning('Please overide setup()') logger.warning('Please overide setup()')
class RGBLamp(MerossDev): class RGBLamp(MerossDev):
temp_min = 2700
temp_max = 6500
def setup(self): def setup(self):
dev = devices.lamp_color(self.addr) dev = devices.lamp_color(self.base_addr + 1)
dev.methods['turn_on'] = self.turn_on dev.methods['turn_on'] = self.turn_on
dev.methods['turn_off'] = self.turn_off dev.methods['turn_off'] = self.turn_off
dev.methods['toggle'] = self.toggle dev.methods['toggle'] = self.toggle
...@@ -25,43 +36,63 @@ class RGBLamp(MerossDev): ...@@ -25,43 +36,63 @@ class RGBLamp(MerossDev):
dev.methods['set_hsv'] = self.set_hsv dev.methods['set_hsv'] = self.set_hsv
dev.methods['set_white_temperature'] = self.set_white_temperature dev.methods['set_white_temperature'] = self.set_white_temperature
dev.methods['set_mode'] = self.set_mode dev.methods['set_mode'] = self.set_mode
dev.methods['debug'] = self.debug
#dev.info = 'RGBW / %s' % self.addr #dev.info = 'RGBW / %s' % self.addr
#dev.schema = 'https://redmine.telecom-bretagne.eu/svn/xaal/schemas/branches/schemas-0.7/lamp.color' #dev.schema = 'https://redmine.telecom-bretagne.eu/svn/xaal/schemas/branches/schemas-0.7/lamp.color'
dev.attributes['hsv'] = [0,0,0] dev.attributes['hsv'] = [0,0,0]
dev.unsupported_attributes = ['scene'] dev.unsupported_attributes = ['scene']
dev.unsupported_methods = ['get_scene','set_scene'] dev.unsupported_methods = ['get_scene','set_scene']
self.dev = dev self.dev = dev
dev.dump()
await def turn_on(self):
pass
await def turn_off(self): def debug(self):
pass import pdb;pdb.set_trace()
def toggle(self): async def update(self):
if self.meross.is_on(): self.dev.attributes['light'] = self.meross.is_on()
await self.turn_off() self.dev.attributes['brightness'] = self.meross.get_luminance()
else: temp = (self.temp_max - self.temp_min) / 100 * self.meross.get_color_temperature() + self.temp_min
await self.turn_on() self.dev.attributes['white_temperature'] = round(temp)
async def turn_on(self):
await self.meross.async_turn_on()
await self.update()
def set_brightness(self,_brightness,_smooth=None): async def turn_off(self):
await self.meross.async_turn_off()
await self.update()
async def toggle(self):
await self.meross.async_toggle()
await self.update()
async def set_brightness(self,_brightness,_smooth=None):
val = int(_brightness) val = int(_brightness)
await self.meross.async_set_light_color(luminance=val)
await self.update()
def set_hsv(self,_hsv,_smooth=None): async def set_hsv(self,_hsv,_smooth=None):
# FIXME # FIXME
if isinstance(_hsv,str): if isinstance(_hsv,str):
hsv = [float(k) for k in list(_hsv.split(','))] hsv = [float(k) for k in list(_hsv.split(','))]
else: else:
hsv = _hsv hsv = _hsv
h,s,v = hsv h,s,v = hsv
v = int(v * 100) rgb=tuple(round(i * 255) for i in colorsys.hsv_to_rgb(h,s,v))
s = int(s * 100) await self.meross.async_set_light_color(rgb=rgb)
h = int(h) await self.update()
async def set_white_temperature(self,_white_temperature):
temp = int(_white_temperature)
def set_white_temperature(self,_white_temperature): value = int((temp - self.temp_min) / (self.temp_max - self.temp_min) * 100)
pass if value <= 1: value = 1
if value >= 100: value = 100
await self.meross.async_set_light_color(temperature=value)
await self.update()
def set_mode(self,_mode): async def set_mode(self,_mode):
pass pass
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment