diff --git a/SunGather/config-example.yaml b/SunGather/config-example.yaml index 014fe66..4b0e372 100644 --- a/SunGather/config-example.yaml +++ b/SunGather/config-example.yaml @@ -31,6 +31,13 @@ exports: enabled: True # [Optional] Default is False # port: 8080 # [Optional] Default is 8080 + # Runs a simple Webserver exporting config and last read registers as JSON + # Access at http://localhost:8080 or http://[serverip]:8080 + - name: jsonserver + enabled: False # [Optional] Default is False + # port: 8082 # [Optional] Default is 8080 + + # Output data to InfluxDB - name: influxdb enabled: False # [Optional] Default is False @@ -146,4 +153,4 @@ exports: # - name: "v12" # Extended Value v12 - Donation Only # register: # - name: "m1" # Text Message 1 - Donation Only -# register: \ No newline at end of file +# register: diff --git a/SunGather/exports/jsonserver.py b/SunGather/exports/jsonserver.py new file mode 100644 index 0000000..8cf09a8 --- /dev/null +++ b/SunGather/exports/jsonserver.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_jsonserver(object): + html_body = "Pending Data Retrieval" + def __init__(self): + False + + # Configure Webserver + def configure(self, config, inverter): + try: + self.webServer = HTTPServer(('', config.get('port',8082)), 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_jsonserver.html_body = json.dumps(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_jsonserver.html_body, "utf-8")) + def log_message(self, format, *args): + pass diff --git a/SunGather/sungather.py b/SunGather/sungather.py index 5bd94b8..006f41d 100644 --- a/SunGather/sungather.py +++ b/SunGather/sungather.py @@ -259,6 +259,9 @@ class SungrowInverter(): for register in self.registers: if check_register == register['name']: return register['address'] + for register in self.registers_custom: + if check_register == register['name']: + return register['address'] return '----' def getRegisterUnit(self, check_register): @@ -579,4 +582,4 @@ logger.addHandler(ch) if __name__== "__main__": main() -sys.exit() \ No newline at end of file +sys.exit()