aboutsummaryrefslogtreecommitdiff
path: root/inverter-http-proxy
diff options
context:
space:
mode:
Diffstat (limited to 'inverter-http-proxy')
-rwxr-xr-xinverter-http-proxy50
1 files changed, 50 insertions, 0 deletions
diff --git a/inverter-http-proxy b/inverter-http-proxy
new file mode 100755
index 0000000..b0ec7dd
--- /dev/null
+++ b/inverter-http-proxy
@@ -0,0 +1,50 @@
+#!/usr/bin/env python3
+import logging, json
+
+from aiohttp import web
+from inverterd import Format, Client as InverterClient, InverterError
+from argparse import ArgumentParser
+
+routes = web.RouteTableDef()
+inv_host = None
+inv_port = None
+
+
+@routes.get('/{command}/')
+async def variable_handler(request):
+ command = request.match_info['command']
+
+ inverter = InverterClient(host=inv_host, port=inv_port)
+ inverter.connect()
+ inverter.format(Format.JSON)
+
+ try:
+ response = inverter.exec(command)
+ except InverterError as e:
+ response = str(e)
+
+ try:
+ response = json.loads(response)
+ except json.decoder.JSONDecodeError:
+ response = {'error': response}
+
+ return web.json_response(response, dumps=lambda x: json.dumps(x, separators=(',', ':')))
+
+
+if __name__ == '__main__':
+ parser = ArgumentParser()
+ parser.add_argument('--inverter-host', required=True, type=str)
+ parser.add_argument('--inverter-port', type=int, default=8305)
+ parser.add_argument('--host', default='0.0.0.0', type=str)
+ parser.add_argument('--port', default=8080, type=int)
+ args = parser.parse_args()
+
+ inv_host = args.inverter_host
+ inv_port = args.inverter_port
+
+ logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
+ level=logging.INFO)
+
+ app = web.Application()
+ app.add_routes(routes)
+ web.run_app(app)