Skip to content
Snippets Groups Projects
Commit 49f2f7a7 authored by KERDREUX Jerome's avatar KERDREUX Jerome
Browse files

Format

parent f10cd3d7
No related branches found
No related tags found
1 merge request!1First try of type hints
from xaal.lib import tools,Device,AsyncEngine from xaal.lib import tools
from xaal.schemas import devices from xaal.schemas import devices
import asyncio
import socketio import socketio
import atexit import atexit
import logging import logging
...@@ -16,39 +15,38 @@ logger = logging.getLogger(PACKAGE_NAME) ...@@ -16,39 +15,38 @@ logger = logging.getLogger(PACKAGE_NAME)
class GW(object): class GW(object):
def __init__(self,engine): def __init__(self, engine):
self.engine = engine self.engine = engine
self.devices = {} self.devices = {}
atexit.register(self._exit) atexit.register(self._exit)
self.config() self.config()
self.setup() self.setup()
def config(self): def config(self):
cfg = tools.load_cfg(PACKAGE_NAME) cfg = tools.load_cfg(PACKAGE_NAME)
if not cfg: if not cfg:
cfg= tools.new_cfg(PACKAGE_NAME) cfg = tools.new_cfg(PACKAGE_NAME)
cfg['config']['url']='http://floor1.enstb.org:8000/' cfg['config']['url'] = 'http://floor1.enstb.org:8000/'
cfg['devices'] = {} cfg['devices'] = {}
logger.warn("Created an empty config file") logger.warning("Created an empty config file")
cfg.write() cfg.write()
self.cfg = cfg self.cfg = cfg
def setup(self): def setup(self):
# socketio config # socketio config
self.sio = socketio.AsyncClient(engineio_logger=True,ssl_verify=False) self.sio = socketio.AsyncClient(engineio_logger=True, ssl_verify=False)
self.sio.on('alarms-detected',self.on_alarm) self.sio.on('alarms-detected', self.on_alarm)
# xaal gateway # xaal gateway
addr = tools.get_uuid(self.cfg['config']['addr']) addr = tools.get_uuid(self.cfg['config']['addr'])
self.gw = devices.gateway(addr) self.gw = devices.gateway(addr)
self.engine.add_device(self.gw) self.engine.add_device(self.gw)
for k in self.cfg['devices']: for k in self.cfg['devices']:
cfg = self.cfg['devices'][k] cfg = self.cfg['devices'][k]
dev = self.add_device(k,cfg['type'],tools.get_uuid(cfg['addr'])) dev = self.add_device(k, cfg['type'], tools.get_uuid(cfg['addr']))
self.engine.add_device(dev) self.engine.add_device(dev)
def add_device(self, idx, al_type, addr=None):
def add_device(self,idx,al_type,addr=None):
if not addr: if not addr:
addr = tools.get_random_uuid() addr = tools.get_random_uuid()
dev = None dev = None
...@@ -56,44 +54,42 @@ class GW(object): ...@@ -56,44 +54,42 @@ class GW(object):
dev = devices.falldetector(addr) dev = devices.falldetector(addr)
if al_type == 'presence': if al_type == 'presence':
dev = devices.motion(addr) dev = devices.motion(addr)
if dev==None: if dev is None:
return return
logger.debug(f"New device {addr} {idx}") logger.debug(f"New device {addr} {idx}")
dev.vendor_id = 'Future Shape' dev.vendor_id = 'Future Shape'
dev.product_id='SensFloor' dev.product_id = 'SensFloor'
dev.info='zone index: %s' % idx dev.info = 'zone index: %s' % idx
self.devices.update({idx:dev}) self.devices.update({idx: dev})
self.engine.add_device(dev) self.engine.add_device(dev)
return dev return dev
def get_device(self, idx, al_type):
def get_device(self,idx,al_type): dev = self.devices.get(idx, None)
dev = self.devices.get(idx,None)
return dev return dev
def on_alarm(self, data):
def on_alarm(self,data):
active = [] active = []
for k in data: for k in data:
#print(k) # print(k)
idx = str(k['index']) idx = str(k['index'])
al_type = k['type'] al_type = k['type']
state = k['state'] # state = k['state']
dev = self.get_device(idx,al_type) dev = self.get_device(idx, al_type)
if dev == None: if dev is None:
dev = self.add_device(idx,al_type) dev = self.add_device(idx, al_type)
self.cfg['devices'][str(idx)] = {'addr':dev.address,'type':al_type} self.cfg['devices'][str(idx)] = {'addr': dev.address, 'type': al_type}
if dev.dev_type=='motion.basic': if dev.dev_type == 'motion.basic':
dev.attributes['presence'] = True dev.attributes['presence'] = True
active.append(dev) active.append(dev)
#print(active) # print(active)
for dev in self.devices.values(): for dev in self.devices.values():
if dev in active:continue if dev in active:
if dev.dev_type=='motion.basic': continue
dev.attributes['presence'] = False if dev.dev_type == 'motion.basic':
dev.attributes['presence'] = False
def _exit(self): def _exit(self):
cfg = tools.load_cfg(PACKAGE_NAME) cfg = tools.load_cfg(PACKAGE_NAME)
...@@ -101,21 +97,24 @@ class GW(object): ...@@ -101,21 +97,24 @@ class GW(object):
logger.info('Saving configuration file') logger.info('Saving configuration file')
self.cfg.write() self.cfg.write()
# async def xaal_task(self): # async def xaal_task(self):
# await self.engine.run() # await self.engine.run()
async def sio_task(self): async def sio_task(self):
url = self.cfg['config']['url'] url = self.cfg['config']['url']
await self.sio.connect(url)#transports='polling') await self.sio.connect(url) # transports='polling')
await self.sio.wait() await self.sio.wait()
def stop(): def stop():
import pdb;pdb.set_trace() import pdb
pdb.set_trace()
def setup(eng): def setup(eng):
gw = GW(eng) gw = GW(eng)
eng.on_stop(stop) eng.on_stop(stop)
eng.new_task(gw.sio_task()) eng.new_task(gw.sio_task())
return True return True
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment