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

Initial release

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/trunk@2129 b32b6428-25c9-4566-ad07-03861ab6144f
parent a878e892
No related branches found
No related tags found
No related merge requests found
from setuptools import setup,find_packages
with open('README.rst') as f:
long_description = f.read()
VERSION = "0.1"
setup(
name='xaal.yeelight',
version=VERSION,
license='GPL License',
author='Jerome Kerdreux',
author_email='Jerome.Kerdreux@imt-atlantique.fr',
#url='',
description=('xAAL devices for Xiaomi / Aqara' ),
long_description=long_description,
classifiers=[
'Programming Language :: Python',
'Topic :: Software Development :: Libraries :: Python Modules',
],
keywords=['xaal', 'aqara'],
platforms='any',
packages=find_packages(),
include_package_data=True,
install_requires=[
'xaal.lib',
'gevent',
'yeelight',
]
)
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
from .gw import setup
\ No newline at end of file
from . import gw
from xaal.lib import helpers
helpers.run_package(gw.PACKAGE_NAME,gw.setup)
from xaal.schemas import devices
from xaal.lib import tools,Device
import logging
logger = logging.getLogger(__name__)
def split_color(color):
data = color.split('#')[-1]
r = int(data[0:2],16)
g = int(data[2:4],16)
b = int(data[4:6],16)
return (r,g,b)
class YeelightDev(object):
def __init__(self,bulb,addr):
logger.info('New device at %s : %s' % (bulb._ip,addr))
self.bulb = bulb
self.addr = addr
self.setup()
self.set_properties()
def set_properties(self):
self.dev.vendor_id = 'Yeelight'
def setup(self):
logger.warning('Please overide setup()')
class RGBW(YeelightDev):
def setup(self):
dev = devices.lamp_dimmer(self.addr)
dev.methods['on'] = self.on
dev.methods['off'] = self.off
dev.methods['toggle'] = self.toggle
dev.methods['dim'] = self.dim
dev.methods['setColor'] = self.set_color
dev.methods['setTemp'] = self.set_temp
dev.info = 'RGBW / %s' % self.addr
self.dev = dev
def on(self):
self.bulb.turn_on()
def off(self):
self.bulb.turn_off()
def toggle(self):
self.bulb.toggle()
def dim(self,_target):
val = int(_target)
self.bulb.set_brightness(val)
def set_color(self,_target):
r,g,b = split_color(_target)
self.on()
self.bulb.set_rgb(r,g,b)
def set_temp(self,_target):
val = int(_target)
self.on()
self.bulb.set_color_temp(val)
#from gevent import monkey; monkey.patch_all()
#import gevent
from xaal.lib import tools
from . import devices
import yeelight
import atexit
import logging
PACKAGE_NAME = 'xaal.yeelight'
logger = logging.getLogger(PACKAGE_NAME)
class GW(object):
def __init__(self,engine):
self.engine = engine
self.devices = {}
atexit.register(self._exit)
self.config()
self.setup()
def config(self):
cfg = tools.load_cfg(PACKAGE_NAME)
if not cfg:
cfg= tools.new_cfg(PACKAGE_NAME)
cfg['devices'] = {}
logger.warn("Created an empty config file")
cfg.write()
self.cfg = cfg
def setup(self):
logger.info("Searching for bulbs")
bulbs = yeelight.discover_bulbs()
cfg = self.cfg['devices']
for k in bulbs:
tmp = cfg.get(k['ip'],None)
addr = None
if tmp:
addr = tmp.get('addr',None)
if not addr:
addr = tools.get_random_uuid()
cfg[k['ip']] = {'addr':addr}
bulb = yeelight.Bulb(k['ip'],k['port'])
dev = devices.RGBW(bulb,addr)
self.engine.add_device(dev.dev)
def _exit(self):
cfg = tools.load_cfg(PACKAGE_NAME)
if cfg != self.cfg:
logger.info('Saving configuration file')
self.cfg.write()
def setup(eng):
GW(eng)
return True
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment