Merge pull request #39 from benni336/json_export

Adding JSON export feature
This commit is contained in:
bohdan-s
2022-07-07 14:15:28 +10:00
committed by GitHub
3 changed files with 63 additions and 2 deletions
+8 -1
View File
@@ -31,6 +31,13 @@ exports:
enabled: True # [Optional] Default is False enabled: True # [Optional] Default is False
# port: 8080 # [Optional] Default is 8080 # 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 # Output data to InfluxDB
- name: influxdb - name: influxdb
enabled: False # [Optional] Default is False enabled: False # [Optional] Default is False
@@ -146,4 +153,4 @@ exports:
# - name: "v12" # Extended Value v12 - Donation Only # - name: "v12" # Extended Value v12 - Donation Only
# register: # register:
# - name: "m1" # Text Message 1 - Donation Only # - name: "m1" # Text Message 1 - Donation Only
# register: # register:
+51
View File
@@ -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
+4 -1
View File
@@ -259,6 +259,9 @@ class SungrowInverter():
for register in self.registers: for register in self.registers:
if check_register == register['name']: if check_register == register['name']:
return register['address'] return register['address']
for register in self.registers_custom:
if check_register == register['name']:
return register['address']
return '----' return '----'
def getRegisterUnit(self, check_register): def getRegisterUnit(self, check_register):
@@ -579,4 +582,4 @@ logger.addHandler(ch)
if __name__== "__main__": if __name__== "__main__":
main() main()
sys.exit() sys.exit()