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

Initial Release

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2930 b32b6428-25c9-4566-ad07-03861ab6144f
parent 366ec4ed
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.meross',
version=VERSION,
license='GPL License',
author='Jerome Kerdreux',
author_email='Jerome.Kerdreux@imt-atlantique.fr',
#url='',
description=('xAAL gateway for Meross devices'),
long_description=long_description,
classifiers=[
'Programming Language :: Python',
'Topic :: Software Development :: Libraries :: Python Modules',
],
keywords=['xaal', 'meross'],
platforms='any',
packages=find_packages(),
include_package_data=True,
install_requires=[
'xaal.lib',
'xaal.schemas',
'meross_iot==0.4.4.4',
]
)
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
from .gw import setup
\ No newline at end of file
from . import gw
from xaal.lib import aiohelpers
helpers.run_async_package(gw.PACKAGE_NAME,gw.setup)
from xaal.schemas import devices
from xaal.lib import tools,Device
import logging
logger = logging.getLogger(__name__)
class MerossDev(object):
def __init__(self,dev,cfg):
self.meross = dev
self.setup()
self.dev = None
def setup(self):
logger.warning('Please overide setup()')
class RGBLamp(MerossDev):
def setup(self):
dev = devices.lamp_color(self.addr)
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.info = 'RGBW / %s' % self.addr
#dev.schema = 'https://redmine.telecom-bretagne.eu/svn/xaal/schemas/branches/schemas-0.7/lamp.color'
dev.attributes['hsv'] = [0,0,0]
dev.unsupported_attributes = ['scene']
dev.unsupported_methods = ['get_scene','set_scene']
self.dev = dev
await def turn_on(self):
pass
await def turn_off(self):
pass
def toggle(self):
if self.meross.is_on():
await self.turn_off()
else:
await self.turn_on()
def set_brightness(self,_brightness,_smooth=None):
val = int(_brightness)
def set_hsv(self,_hsv,_smooth=None):
# FIXME
if isinstance(_hsv,str):
hsv = [float(k) for k in list(_hsv.split(','))]
else:
hsv = _hsv
h,s,v = hsv
v = int(v * 100)
s = int(s * 100)
h = int(h)
def set_white_temperature(self,_white_temperature):
pass
def set_mode(self,_mode):
pass
from xaal.lib import tools
from . import devices
import logging
PACKAGE_NAME = 'xaal.meross'
logger = logging.getLogger(PACKAGE_NAME)
# disable internal logging
logging.getLogger("meross_iot").setLevel(logging.WARNING)
class GW(object):
def __init__(self,engine):
self.engine = engine
self.devices = []
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 = 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['ip'],k['port'])
dev = devices.RGBW(bulb,cfg[k])
self.engine.add_device(dev.dev)
def setup(self):
logger.info("Loading 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,cfg[k])
self.devices.append(dev)
self.engine.add_device(dev.dev)
def refresh(self):
for d in self.devices:
d.get_properties()
d.set_xaal()
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 register or to comment