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

Color & stuffs

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2422 b32b6428-25c9-4566-ad07-03861ab6144f
parent 3b20e887
No related branches found
No related tags found
No related merge requests found
......@@ -6,6 +6,7 @@ import asyncio
import time
import logging
import tenacity
import copy
logger = logging.getLogger(__name__)
......@@ -22,6 +23,15 @@ def split_color(color):
b = int(data[4:6],16)
return (r,g,b)
def properties_compare(orig,new):
#import pdb;pdb.set_trace()
r = {}
for k in new.keys():
if k in orig.keys():
if new[k] != orig[k]:
r.update({k:new[k]})
return r
class YeelightDev(object):
def __init__(self,bulb,addr):
......@@ -33,6 +43,16 @@ class YeelightDev(object):
self.get_properties()
self.set_xaal()
def debug_properties(self,properties):
if not hasattr(self,'last_properties'):
self.last_properties = properties
return
# for debugging only display changes
changes = properties_compare(self.last_properties,properties)
if changes:
logger.warning(changes)
self.last_properties = copy.copy(properties)
def set_xaal(self):
self.dev.vendor_id = 'Yeelight'
self.dev.info = str(self.bulb)
......@@ -42,6 +62,7 @@ class YeelightDev(object):
def on_properties(self,properties):
logger.warning('Please overide on_properties')
self.debug_properties(properties)
def spawn(self,func,*args,**kwargs):
gevent.spawn(wrap_errors(Exception,func),*args,**kwargs)
......@@ -118,12 +139,26 @@ class RGBW(YeelightDev):
self.spawn(self._set_color_temp,val)
def on_properties(self,props):
print(props)
self.debug_properties(props)
attrs = self.dev.attributes
# light state
power = props.get('power',None)
if power:
if power == 'on' : attrs['light'] = True
if power == 'off': attrs['light'] = False
# color mode ?
mode = props.get('color_mode',None)
if mode:
if mode == '2' : attrs['mode'] = 0 #white
if mode == '1' : attrs['mode'] = 1 #color
# white temp
ct = props.get('ct',None)
if ct:
attrs['white_temperature'] = int(ct)
# dimmer ?
bright = props.get('current_brightness',None)
if bright:
attrs['dimmer'] = int(bright)
#===================================================
# Yeelight API
......
......@@ -11,6 +11,9 @@ import logging
PACKAGE_NAME = 'xaal.yeelight'
logger = logging.getLogger(PACKAGE_NAME)
# disable internal logging
logging.getLogger("yeelight").setLevel(logging.WARNING)
class GW(object):
def __init__(self,engine):
self.engine = engine
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment