mirror of
https://github.com/alexhopeoconnor/SunGather.git
synced 2026-10-23 02:52:10 +10:00
First stable commit of JSON-Export-Feature
This commit is contained in:
@@ -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: True # [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
|
||||||
|
|||||||
@@ -70,4 +70,4 @@ class export_influxdb(object):
|
|||||||
|
|
||||||
logging.info("InfluxDB: Published")
|
logging.info("InfluxDB: Published")
|
||||||
|
|
||||||
return True
|
return True
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
from http.server import BaseHTTPRequestHandler, HTTPServer
|
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||||
import JSON
|
import json
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
from version import __version__
|
from version import __version__
|
||||||
|
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
class export_webserver(object):
|
class export_jsonserver(object):
|
||||||
html_body = "Pending Data Retrieval"
|
html_body = "Pending Data Retrieval"
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
False
|
False
|
||||||
@@ -14,7 +14,7 @@ class export_webserver(object):
|
|||||||
# Configure Webserver
|
# Configure Webserver
|
||||||
def configure(self, config, inverter):
|
def configure(self, config, inverter):
|
||||||
try:
|
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 = Thread(target=self.webServer.serve_forever)
|
||||||
self.t.daemon = True # Make it a deamon, so if main loop ends the webserver dies
|
self.t.daemon = True # Make it a deamon, so if main loop ends the webserver dies
|
||||||
self.t.start()
|
self.t.start()
|
||||||
@@ -28,7 +28,7 @@ class export_webserver(object):
|
|||||||
json_cache={"registers":{}, "client_config":{}, "inverter_config":{}}
|
json_cache={"registers":{}, "client_config":{}, "inverter_config":{}}
|
||||||
|
|
||||||
for register, value in inverter.latest_scrape.items():
|
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
|
# Client Config
|
||||||
for setting, value in inverter.client_config.items():
|
for setting, value in inverter.client_config.items():
|
||||||
@@ -38,7 +38,7 @@ class export_webserver(object):
|
|||||||
for setting, value in inverter.inverter_config.items():
|
for setting, value in inverter.inverter_config.items():
|
||||||
json_cache["inverter_config"][str(setting)]=str(value)
|
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
|
return True
|
||||||
|
|
||||||
class MyServer(BaseHTTPRequestHandler):
|
class MyServer(BaseHTTPRequestHandler):
|
||||||
@@ -46,6 +46,6 @@ class MyServer(BaseHTTPRequestHandler):
|
|||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
self.send_header("Content-type", "application/json")
|
self.send_header("Content-type", "application/json")
|
||||||
self.end_headers()
|
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):
|
def log_message(self, format, *args):
|
||||||
pass
|
pass
|
||||||
@@ -36,7 +36,7 @@ class SungrowInverter():
|
|||||||
|
|
||||||
self.registers = [[]]
|
self.registers = [[]]
|
||||||
self.registers.pop() # Remove null value from list
|
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 = [[]]
|
||||||
self.register_ranges.pop() # Remove null value from list
|
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')}")
|
logging.info(f"Detected Model: {self.inverter_config.get('model')}")
|
||||||
else:
|
else:
|
||||||
logging.info(f'Model detection failed, please set model in config.py')
|
logging.info(f'Model detection failed, please set model in config.py')
|
||||||
self.registers.pop()
|
self.registers.pop()
|
||||||
break
|
break
|
||||||
|
|
||||||
# Load register list based on name and value after checking model
|
# Load register list based on name and value after checking model
|
||||||
@@ -245,6 +245,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):
|
||||||
@@ -565,4 +568,4 @@ logger.addHandler(ch)
|
|||||||
if __name__== "__main__":
|
if __name__== "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
||||||
sys.exit()
|
sys.exit()
|
||||||
Reference in New Issue
Block a user