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

Linting ..



git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@3061 b32b6428-25c9-4566-ad07-03861ab6144f
parent 5b2356de
No related branches found
No related tags found
No related merge requests found
......@@ -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'])
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment