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

Initial release off HTTP Sender, used w/ Ifttt or any other http


git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/trunk@2447 b32b6428-25c9-4566-ad07-03861ab6144f
parent 3d24e9fe
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.httpsend',
version=VERSION,
license='GPL License',
author='Jerome Kerdreux',
author_email='Jerome.Kerdreux@imt-atlantique.fr',
#url='',
description=('xAAL devices HTTP to xAAL'),
long_description=long_description,
classifiers=[
'Programming Language :: Python',
'Topic :: Software Development :: Libraries :: Python Modules',
],
keywords=['xaal', 'http','json'],
platforms='any',
packages=find_packages(),
include_package_data=True,
install_requires=[
'xaal.lib',
'bottle',
'gevent==1.5a2',
]
)
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
from . import app
app.main()
from gevent import monkey; monkey.patch_all()
from xaal.lib import tools,Engine,Device,helpers
from bottle import default_app,debug,get,request,response,post
import json
import os
import platform
import logging
from gevent import Greenlet
from gevent.pywsgi import WSGIServer
from geventwebsocket.handler import WebSocketHandler
PACKAGE_NAME = "xaal.httpsend"
logger = logging.getLogger(PACKAGE_NAME)
dev = None
cfg = None
# we use this global variable to share data with greenlet
def setup_xaal():
""" setup xAAL Engine & Device. And start it in a Greenlet"""
global dev,cfg
engine = Engine()
cfg = tools.load_cfg(PACKAGE_NAME)
if not cfg:
logger.info("No config file found, building a new one")
cfg = tools.new_cfg(PACKAGE_NAME)
cfg['routes'] = {}
cfg.write()
dev = Device("hmi.basic")
dev.address = cfg['config']['addr']
dev.vendor_id = "IHSEV"
dev.product_id = "HTTP sender"
dev.version = 0.1
dev.info = "%s@%s" % (PACKAGE_NAME,platform.node())
engine.add_device(dev)
engine.start()
green_let = Greenlet(xaal_loop, engine)
green_let.start()
def xaal_loop(engine):
""" xAAL Engine Loop Greenlet"""
while 1:
engine.loop()
@post('/send/<route>')
def send(route):
""" Send a custom message on xAAL Bus"""
global dev,cfg
routes = cfg.get('routes',{})
tmp = routes.get(route,None)
if tmp == None:
res = {'error':{'code':404,'message':'Unknow route'}}
response.status=404
else:
addr = tmp.get('device',None)
action = tmp.get('action',None)
body = tmp.get('body',None)
if addr and action:
dev.engine.send_request(dev,[addr,],action,body)
res = {'address':addr}
else:
res = {'error':{'code':500,'message':'Missing addr or action'}}
response.headers['Content-Type'] = 'application/json'
return json.dumps(res,indent=4)
def run():
""" start the xAAL stack & launch the HTTP stuff"""
helpers.set_console_title(PACKAGE_NAME)
helpers.setup_console_logger(level=logging.INFO)
setup_xaal()
app = default_app()
debug(True)
port = 16666
logger.info("HTTP Server running on port : %d" % port)
#server = WSGIServer(("", port), app, handler_class=WebSocketHandler)
server = WSGIServer(("", port), app)
server.serve_forever()
def main():
try:
run()
except KeyboardInterrupt:
print("Bye Bye...")
if __name__ == '__main__':
main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment