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

No more hardcoded stuff in config file :)



git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2696 b32b6428-25c9-4566-ad07-03861ab6144f
parent b045294a
No related branches found
No related tags found
No related merge requests found
[config]
addr = 194f2490-155d-11ec-a7e9-d6bd5fe18726
base_port = 49000
[devices]
[[lampe bureau]]
targets = cdef8707-f268-11e9-82a2-7085c2a4a6bd,
port = 49001
[[lampe chevets]]
targets = d371d34f-2bf9-46ec-8497-b47363d98791,d381934f-2bf9-46ec-8497-b47363d98792
port = 49002
......@@ -3,7 +3,11 @@ from fauxmo.plugins import FauxmoPlugin
from xaal.monitor import Monitor
logger = logging.getLogger()
monitor = None
on_off = ['off','on']
def setup(device,filter_func):
global monitor
......@@ -18,44 +22,51 @@ def send(addr,action,body=None):
eng = monitor.engine
eng.send_request(monitor.dev,[addr,],action,body)
logger = logging.getLogger()
on_off = ['off','on']
class Lamp(FauxmoPlugin):
def setup(self,addr):
self.addr = addr
MAP = {
'lamp': ['turn_on','turn_off','light'],
'powerrelay': ['turn_on','turn_off','power'],
}
class XAALPlugin(FauxmoPlugin):
def setup(self,targets):
self.targets = targets
def get_devices(self):
r = []
for addr in self.targets:
dev = get_device(addr)
if dev:
r.append(dev)
return r
def get_mapping(self,device):
if device.dev_type == None:
return None
for k in MAP.keys():
if device.dev_type.startswith(k):
return MAP[k]
return None
def on(self):
send(self.addr,'turn_on')
for dev in self.get_devices():
tmp = self.get_mapping(dev)
if tmp[0]:
send(dev.address,tmp[0])
return True
def off(self):
send(self.addr,'turn_off')
for dev in self.get_devices():
tmp = self.get_mapping(dev)
if tmp[1]:
send(dev.address,tmp[1])
return True
def get_state(self):
dev = get_device(self.addr)
value = dev.attributes['light']
logger.warning(f"{self}: {value}")
return on_off[value]
class PowerRelay(Lamp):
def get_state(self):
dev = get_device(self.addr)
value = dev.attributes['power']
logger.warning(f"{self}: {value}")
return on_off[value]
class Scenario(Lamp):pass
mapping = {'lamp' : Lamp,
'power_relay' : PowerRelay,
'scenario' : Scenario, }
for dev in self.get_devices():
tmp = self.get_mapping(dev)
if tmp[2]:
value = dev.attributes.get(tmp[2],None)
if value == None: continue
if value == True:
return 'on'
return 'off'
......@@ -15,7 +15,7 @@ from fauxmo.utils import get_local_ip, make_udp_sock
PACKAGE_NAME = 'xaal.fauxmo'
logger = logging.getLogger(PACKAGE_NAME)
logging.getLogger('fauxmo').setLevel(logging.WARNING)
logging.getLogger('fauxmo').setLevel(logging.INFO)
class GW(object):
......@@ -49,6 +49,7 @@ class GW(object):
binding.setup(gw,self.filter)
def filter(self,msg):
#import pdb;pdb.set_trace()
if msg.source in self.addrs:
return True
return False
......@@ -60,19 +61,12 @@ class GW(object):
devices_cfg = self.cfg.get('devices',[])
for k in devices_cfg:
addr = tools.get_uuid(k)
type_ = devices_cfg[k].get('type','lamp')
name = devices_cfg[k].get('name','unknow device %s' % k)
targets = [tools.get_uuid(addr) for addr in devices_cfg[k].get('targets',[])]
self.addrs = self.addrs + targets
port = devices_cfg[k].get('port',None)
klass = binding.mapping.get(type_,None)
if type_ and klass and port:
plugin = klass(name=name,port=port)
plugin.setup(addr)
logger.info(f"Loaded {type_}: {name}")
self.addrs.append(addr)
else:
logger.error(f"Fail to load {k}")
continue
plugin = binding.XAALPlugin(name=k,port=port)
plugin.setup(targets)
logger.info(f"Loaded {k}: {targets}")
fauxmo = functools.partial(Fauxmo, name=plugin.name, plugin=plugin)
coro = loop.create_server(fauxmo, host=self.fauxmo_ip, port=port)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment