diff --git a/devices/protocols/Meross/xaal/meross/bindings.py b/devices/protocols/Meross/xaal/meross/bindings.py index 732ede73a4297cebf243a43a7aeeee1d2ec2eb62..ac6b165ddce0d0e557888d0e68e02f19f04a35d9 100644 --- a/devices/protocols/Meross/xaal/meross/bindings.py +++ b/devices/protocols/Meross/xaal/meross/bindings.py @@ -2,17 +2,19 @@ from xaal.schemas import devices import logging import colorsys +import asyncio logger = logging.getLogger(__name__) + def find_class(meross_dev): if meross_dev.type == 'msl430': return RGBLamp - return None + class MerossDev(object): - def __init__(self,meross_dev,base_addr): + def __init__(self, meross_dev, base_addr): self.meross = meross_dev self.base_addr = base_addr self.embs = [] @@ -30,6 +32,7 @@ class MerossDev(object): dev.info = self.meross.name dev.hw_id = self.meross.uuid + class RGBLamp(MerossDev): temp_min = 2700 @@ -37,32 +40,33 @@ class RGBLamp(MerossDev): def setup(self): 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['toggle'] = self.toggle dev.methods['set_brightness'] = self.set_brightness dev.methods['set_hsv'] = self.set_hsv dev.methods['set_white_temperature'] = self.set_white_temperature dev.methods['set_mode'] = self.set_mode - dev.attributes['hsv'] = [0,0,0] + dev.attributes['hsv'] = [0, 0, 0] dev.unsupported_attributes = ['scene'] - dev.unsupported_methods = ['get_scene','set_scene'] + dev.unsupported_methods = ['get_scene', 'set_scene'] dev.del_attribute(dev.get_attribute('scene')) self.embs.append(dev) async def update(self): - #await self.meross.async_update() + # await self.meross.async_update() dev = self.embs[0] dev.attributes['light'] = self.meross.is_on() dev.attributes['brightness'] = self.meross.get_luminance() temp = (self.temp_max - self.temp_min) / 100 * self.meross.get_color_temperature() + self.temp_min - dev.attributes['white_temperature'] = round(temp/100,1) * 100 + dev.attributes['white_temperature'] = round(temp/100, 1) * 100 rgb = self.meross.get_rgb_color() - hsv = colorsys.rgb_to_hsv(rgb[0]/255,rgb[1]/255,rgb[2]/255) + hsv = colorsys.rgb_to_hsv(rgb[0]/255, rgb[1]/255, rgb[2]/255) h = round(hsv[0] * 360) - s = round(hsv[1],2) - v = round(hsv[2],2) - dev.attributes['hsv'] = [h,s,v] + s = round(hsv[1], 2) + v = round(hsv[2], 2) + dev.attributes['hsv'] = [h, s, v] + await asyncio.sleep(0) async def turn_on(self): await self.meross.async_turn_on() @@ -76,19 +80,19 @@ class RGBLamp(MerossDev): await self.meross.async_toggle() await self.update() - async def set_brightness(self,_brightness,_smooth=None): + async def set_brightness(self, _brightness, _smooth=None): val = int(_brightness) await self.meross.async_set_light_color(luminance=val) await self.update() - async def set_hsv(self,_hsv,_smooth=None): + async def set_hsv(self, _hsv, _smooth=None): # FIXME - if isinstance(_hsv,str): + 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)) + h, s, v = hsv + rgb = tuple(round(i * 255) for i in colorsys.hsv_to_rgb(h/360.0, s, v)) # meross API fail to detect when light is off and set_light_color() is called # set_light_color() will turn light on but the API think it is still off # so turn it on first @@ -98,9 +102,8 @@ class RGBLamp(MerossDev): await self.update() self.embs[0].attributes['mode'] = 'color' - async def set_white_temperature(self,_white_temperature): + async def set_white_temperature(self, _white_temperature): temp = int(_white_temperature) - # value = int((temp - self.temp_min) / (self.temp_max - self.temp_min) * 100) if value <= 1: value = 1 if value >= 100: value = 100 @@ -108,10 +111,9 @@ class RGBLamp(MerossDev): await self.update() self.embs[0].attributes['mode'] = 'white' - async def set_mode(self,_mode): + async def set_mode(self, _mode): dev = self.embs[0] if _mode == 'color': await self.set_hsv(dev.attributes['hsv']) if _mode == 'white': await self.set_white_temperature(dev.attributes['white_temperature']) - diff --git a/devices/protocols/Meross/xaal/meross/gw.py b/devices/protocols/Meross/xaal/meross/gw.py index 28d4e4f20f6f3252bff5e125478f0f386fe75095..4ba5b2b70bd7be0296d5f1f3f69c1c326e3c5841 100644 --- a/devices/protocols/Meross/xaal/meross/gw.py +++ b/devices/protocols/Meross/xaal/meross/gw.py @@ -48,6 +48,8 @@ class GW(object): logger.info("Meross devices discovery") self.client = await MerossHttpClient.async_from_user_password(email=login, password=passwd) self.manager = MerossManager(http_client=self.client) + # from meross_iot.manager import TransportMode + # self.manager.default_transport_mode = TransportMode.LAN_HTTP_FIRST await self.manager.async_init() await self.discover() @@ -59,6 +61,7 @@ class GW(object): logger.error(e) meross_devices = self.manager.find_devices() + #import pdb;pdb.set_trace() # config devices_config = self.cfg.get('devices',{}) # devices