From e6e032da8ac032a73438d3bece2918615bddf62d Mon Sep 17 00:00:00 2001 From: benni336 <18581686+benni336@users.noreply.github.com> Date: Wed, 23 Mar 2022 23:18:00 +0100 Subject: [PATCH] Initial testing commit for JSON export --- SunGather/exports/json-export.py | 51 ++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 SunGather/exports/json-export.py diff --git a/SunGather/exports/json-export.py b/SunGather/exports/json-export.py new file mode 100644 index 0000000..1e18ff5 --- /dev/null +++ b/SunGather/exports/json-export.py @@ -0,0 +1,51 @@ +from http.server import BaseHTTPRequestHandler, HTTPServer +import JSON +from threading import Thread +from version import __version__ + + +import logging + +class export_webserver(object): + html_body = "Pending Data Retrieval" + def __init__(self): + False + + # Configure Webserver + def configure(self, config, inverter): + try: + self.webServer = HTTPServer(('', config.get('port',8080)), MyServer) + self.t = Thread(target=self.webServer.serve_forever) + self.t.daemon = True # Make it a deamon, so if main loop ends the webserver dies + self.t.start() + logging.info(f"JSON-Export: Configured") + except Exception as err: + logging.error(f"JSON-Export: Error: {err}") + return False + return True + + def publish(self, inverter): + json_cache={"registers":{}, "client_config":{}, "inverter_config":{}} + + for register, value in inverter.latest_scrape.items(): + json_cache["registers"][str(inverter.getRegisterAddress(register))]={"register": str(register), "value":str(value), unit: str(inverter.getRegisterUnit(register))} + + # Client Config + for setting, value in inverter.client_config.items(): + json_cache["client_config"][str(setting)]=str(value) + + # Inverter Config + for setting, value in inverter.inverter_config.items(): + json_cache["inverter_config"][str(setting)]=str(value) + + export_webserver.html_body = json.dump(json_cache) + return True + +class MyServer(BaseHTTPRequestHandler): + def do_GET(self): + self.send_response(200) + self.send_header("Content-type", "application/json") + self.end_headers() + self.wfile.write(bytes(export_webserver.html_body, "utf-8")) + def log_message(self, format, *args): + pass