From a1a6388564eb5c1103dcdd3116155d597efd5a1c Mon Sep 17 00:00:00 2001 From: benni336 <18581686+benni336@users.noreply.github.com> Date: Thu, 24 Mar 2022 10:35:56 +0100 Subject: [PATCH] First stable commit of JSON-Export-Feature --- SunGather/config-example.yaml | 7 +++++++ SunGather/exports/influxdb.py | 2 +- SunGather/exports/{json-export.py => jsonserver.py} | 12 ++++++------ SunGather/sungather.py | 9 ++++++--- 4 files changed, 20 insertions(+), 10 deletions(-) rename SunGather/exports/{json-export.py => jsonserver.py} (87%) diff --git a/SunGather/config-example.yaml b/SunGather/config-example.yaml index 153edcb..dc59ff5 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: True # [Optional] Default is False + # port: 8082 # [Optional] Default is 8080 + + # Output data to InfluxDB - name: influxdb enabled: False # [Optional] Default is False diff --git a/SunGather/exports/influxdb.py b/SunGather/exports/influxdb.py index 4229a63..c0028c2 100644 --- a/SunGather/exports/influxdb.py +++ b/SunGather/exports/influxdb.py @@ -70,4 +70,4 @@ class export_influxdb(object): logging.info("InfluxDB: Published") - return True + return True \ No newline at end of file diff --git a/SunGather/exports/json-export.py b/SunGather/exports/jsonserver.py similarity index 87% rename from SunGather/exports/json-export.py rename to SunGather/exports/jsonserver.py index 1e18ff5..8cf09a8 100644 --- a/SunGather/exports/json-export.py +++ b/SunGather/exports/jsonserver.py @@ -1,12 +1,12 @@ from http.server import BaseHTTPRequestHandler, HTTPServer -import JSON +import json from threading import Thread from version import __version__ import logging -class export_webserver(object): +class export_jsonserver(object): html_body = "Pending Data Retrieval" def __init__(self): False @@ -14,7 +14,7 @@ class export_webserver(object): # Configure Webserver def configure(self, config, inverter): try: - self.webServer = HTTPServer(('', config.get('port',8080)), MyServer) + 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() @@ -28,7 +28,7 @@ class export_webserver(object): 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))} + 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(): @@ -38,7 +38,7 @@ class export_webserver(object): for setting, value in inverter.inverter_config.items(): json_cache["inverter_config"][str(setting)]=str(value) - export_webserver.html_body = json.dump(json_cache) + export_jsonserver.html_body = json.dumps(json_cache) return True class MyServer(BaseHTTPRequestHandler): @@ -46,6 +46,6 @@ class MyServer(BaseHTTPRequestHandler): self.send_response(200) self.send_header("Content-type", "application/json") self.end_headers() - self.wfile.write(bytes(export_webserver.html_body, "utf-8")) + 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 0725c7a..3bda2fe 100644 --- a/SunGather/sungather.py +++ b/SunGather/sungather.py @@ -36,7 +36,7 @@ class SungrowInverter(): self.registers = [[]] self.registers.pop() # Remove null value from list - self.registers_custom = [{'name': 'export_to_grid', 'unit': 'W'}, {'name': 'import_from_grid', 'unit': 'W'}, {'name': 'run_state'}] + self.registers_custom = [{'name': 'export_to_grid', 'unit': 'W', 'address': 'vr001'}, {'name': 'import_from_grid', 'unit': 'W', 'address': 'vr002'}, {'name': 'run_state', 'address': 'vr003'}, {'name': 'timestamp', 'address': 'vr004'}] self.register_ranges = [[]] self.register_ranges.pop() # Remove null value from list @@ -108,7 +108,7 @@ class SungrowInverter(): logging.info(f"Detected Model: {self.inverter_config.get('model')}") else: logging.info(f'Model detection failed, please set model in config.py') - self.registers.pop() + self.registers.pop() break # Load register list based on name and value after checking model @@ -245,6 +245,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): @@ -565,4 +568,4 @@ logger.addHandler(ch) if __name__== "__main__": main() -sys.exit() +sys.exit() \ No newline at end of file