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

Added last_alexa cache


git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2705 b32b6428-25c9-4566-ad07-03861ab6144f
parent cd1a70e8
Branches
Tags
No related merge requests found
......@@ -25,7 +25,7 @@ class Echo(object):
def setup_embedded(self):
# TTS
self.setup_tts()
# set some default info on embedded
# set some default infos on embedded
for dev in self.embedded():
dev.vendor_id = "IHSEV"
dev.version = 0.1
......
......@@ -15,11 +15,18 @@ PACKAGE_NAME = "xaal.alexa"
logger = logging.getLogger(PACKAGE_NAME)
DEFAULT_LAST_ALEXA_CACHE = 60
def now():
return time.time()
class GW(object):
def __init__(self,engine):
self.devices = []
self.engine = engine
self._last_alexa_time = 0
self.config()
atexit.register(self._exit)
self.setup_echo()
......@@ -32,13 +39,14 @@ class GW(object):
logger.info('Missing config file, building a new one')
cfg = tools.new_cfg(PACKAGE_NAME)
cfg['config']['remote_script'] = 'alexa_remote_control.sh'
cfg['config']['last_alexa_cache'] = DEFAULT_LAST_ALEXA_CACHE
cfg['devices'] = {"last_alexa":{}}
cfg.write()
self.cfg = cfg
self.remote_script = cfg['config']['remote_script']
async def async_run(self,cmd):
t0 = time.time()
t0 = now()
cmd = self.remote_script + " " + cmd
args = shlex.split(cmd)
proc = await asyncio.create_subprocess_exec(*args,stdout=asyncio.subprocess.PIPE,stderr=asyncio.subprocess.PIPE)
......@@ -46,13 +54,15 @@ class GW(object):
logger.info(f"Run {cmd}: {proc.returncode}")
output = stdout.decode().strip()
logger.debug(f"{output}")
logger.warning(f'{cmd} done=> {time.time()-t0}')
logger.warning(f'{cmd} done=> {now()-t0}')
return output
async def async_run_lastalexa(self,cmd):
self.last_alexa = await self.async_run('-lastalexa')
if self.last_alexa_expired():
self.last_alexa = await self.async_run('-lastalexa')
self._last_alexa_time = now()
cmd = f'-d "{self.last_alexa}" ' + cmd
await self.async_run(cmd)
return await self.async_run(cmd)
def run_script(self,cmd):
asyncio.ensure_future(self.async_run(cmd))
......@@ -81,6 +91,12 @@ class GW(object):
self.engine.add_device(gw)
self.gw = gw
def last_alexa_expired(self):
cache = int(self.cfg['config'].get('last_alexa_cache',DEFAULT_LAST_ALEXA_CACHE))
now_ = now()
if (self._last_alexa_time + cache) < now_:
return True
return False
def _exit(self):
cfg = tools.load_cfg(PACKAGE_NAME)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment