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

Last push before power cut

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2390 b32b6428-25c9-4566-ad07-03861ab6144f
parent 4ffa49eb
Branches
No related tags found
No related merge requests found
from xaal.schemas import devices
from xaal.lib import tools,Device
import asyncio
import time
import logging
import tenacity
logger = logging.getLogger(__name__)
import gevent
from gevent.util import wrap_errors
# we try twice within one second, if nothing works, just drop
TENACITY_RETRY=tenacity.stop_after_attempt(2) | tenacity.stop_after_delay(1)
TENACITY_RETRY=tenacity.stop_after_attempt(2) | tenacity.stop_after_delay(10)
def split_color(color):
data = color.split('#')[-1]
......@@ -17,10 +23,22 @@ def split_color(color):
return (r,g,b)
import wrapt
@wrapt.decorator
def async_call(wrapped,instance,args, kwargs):
print(f"{args} ,{kwargs}")
#gevent.spawn(wrapped,args,kwargs)
return wrapped(*args, **kwargs)
#return gevent.spawn(func,*args,**kwargs)
class YeelightDev(object):
def __init__(self,bulb,addr):
logger.info('New device at %s : %s' % (bulb._ip,addr))
self.bulb = bulb
#self.bulb.get_properties()
self.addr = addr
self.dev = None
self.setup()
......@@ -28,6 +46,7 @@ class YeelightDev(object):
def set_properties(self):
self.dev.vendor_id = 'Yeelight'
self.dev.info = str(self.bulb)
def setup(self):
logger.warning('Please overide setup()')
......@@ -45,25 +64,37 @@ class RGBW(YeelightDev):
dev.info = 'RGBW / %s' % self.addr
self.dev = dev
@tenacity.retry(stop=TENACITY_RETRY)
def spawn(self,func,*args,**kwargs):
gevent.spawn(wrap_errors(Exception,func),*args,**kwargs)
def on(self):
self.bulb.turn_on()
self.dev.attributes['light'] = True
@tenacity.retry(stop=TENACITY_RETRY)
def off(self):
self.bulb.turn_off()
self.dev.attributes['light'] = False
@tenacity.retry(stop=TENACITY_RETRY)
def toggle(self):
self.spawn(self.toggle_)
@tenacity.retry(stop=TENACITY_RETRY)
def toggle_(self):
self.bulb.toggle()
def dim(self,_target):
val = int(_target)
self.spawn(self.dim_,val)
@tenacity.retry(stop=TENACITY_RETRY)
def dim_(self,val):
self.on()
self.bulb.set_brightness(val)
def set_color(self,_target):
print(_target)
r,g,b = split_color(_target)
......@@ -72,6 +103,7 @@ class RGBW(YeelightDev):
self.dev.attributes['mode'] = 'RGB'
self.dev.attributes['rgb'] = _target
def set_white(self,_target):
val = int(_target)
self.on()
......
#from gevent import monkey; monkey.patch_all()
#import gevent
from gevent import monkey; monkey.patch_all()
from xaal.lib import tools
from . import devices
......@@ -29,7 +29,7 @@ class GW(object):
self.cfg = cfg
def setup(self):
def setup_(self):
logger.info("Searching for bulbs")
bulbs = yeelight.discover_bulbs()
cfg = self.cfg['devices']
......@@ -37,14 +37,34 @@ class GW(object):
tmp = cfg.get(k['ip'],None)
addr = None
if tmp:
addr = tmp.get('addr',None)
addr = tools.get_uuid( tmp.get('addr',None) )
if not addr:
addr = tools.get_random_uuid()
cfg[k['ip']] = {'addr':addr}
cfg[k['ip']] = {'addr':str(addr)}
bulb = yeelight.Bulb(k['ip'],k['port'])
#dev = devices.RGBW(bulb,addr)
dev = devices.RGBW(bulb,addr)
self.engine.add_device(dev.dev)
def setup(self):
logger.info("Searching for bulbs")
cfg = self.cfg['devices']
for k in cfg:
tmp = cfg.get(k,None)
addr = None
if tmp:
addr = tools.get_uuid( tmp.get('addr',None) )
if not addr:
addr = tools.get_random_uuid()
cfg[k['ip']] = {'addr':str(addr)}
bulb = yeelight.Bulb(k)
#dev = devices.RGBW(bulb,addr)
dev = devices.RGBW(bulb,addr)
self.engine.add_device(dev.dev)
def _exit(self):
cfg = tools.load_cfg(PACKAGE_NAME)
if cfg != self.cfg:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment