diff --git a/README.md b/README.md
index 2ec8bbc..a2b6245 100644
--- a/README.md
+++ b/README.md
@@ -39,6 +39,7 @@ Has multiple export locations out of the box:
* MQTT - Load into MQTT, and optionally Home Assistance including Discovery
* PVOutput - Load into PVOutput.org
* InfluxDB - Load data directly into InfluxDB (v1.8 or v2.x)
+* Prometheus - Scrape from /metrics endpoint
* Simple webserver showing collected data
* Rasberry Pi Docker support
* and more coming....
diff --git a/SunGather/exports/webserver.py b/SunGather/exports/webserver.py
index 2f6b88b..3200918 100644
--- a/SunGather/exports/webserver.py
+++ b/SunGather/exports/webserver.py
@@ -7,6 +7,7 @@
class export_webserver(object):
html_body = "Pending Data Retrieval"
+ metrics = ""
def __init__(self):
False
@@ -25,9 +26,12 @@ def configure(self, config, inverter):
def publish(self, inverter):
body = "
Sungather v" + __version__ + "
Address | Register | Value |
"
+ metrics = ""
for register, value in inverter.latest_scrape.items():
- body = body + f"{str(inverter.getRegisterAddress(register))} | {str(register)} | {str(value)} {str(inverter.getRegisterUnit(register))} |
"
+ body += f"{str(inverter.getRegisterAddress(register))} | {str(register)} | {str(value)} {str(inverter.getRegisterUnit(register))} |
"
+ metrics += f"{str(register)}{{address=\"{str(inverter.getRegisterAddress(register))}\", unit=\"{str(inverter.getRegisterUnit(register))}\"}} {str(value)}\n"
export_webserver.html_body = body + f"
Total {len(inverter.latest_scrape)} registers"
+ export_webserver.metrics = metrics
body = "
Configuration | Value |
"
for setting, value in inverter.client_config.items():
@@ -35,18 +39,26 @@ def publish(self, inverter):
for setting, value in inverter.inverter_config.items():
body = body + f"{str(setting)} | {str(value)} |
"
export_webserver.html_body = export_webserver.html_body + body + f"
"
-
+
return True
class MyServer(BaseHTTPRequestHandler):
def do_GET(self):
- self.send_response(200)
- self.send_header("Content-type", "text/html")
- self.end_headers()
- self.wfile.write(bytes("SunGather", "utf-8"))
- self.wfile.write(bytes("", "utf-8"))
- self.wfile.write(bytes(export_webserver.html_body, "utf-8"))
- self.wfile.write(bytes("", "utf-8"))
- self.wfile.write(bytes("", "utf-8"))
+ if self.path == '/metrics':
+ self.send_response(200)
+ self.send_header("Content-type", "text/plain")
+ self.end_headers()
+ self.wfile.write(bytes(export_webserver.metrics, "utf-8"))
+ else:
+ self.send_response(200)
+ self.send_header("Content-type", "text/html")
+ self.end_headers()
+ self.wfile.write(bytes("SunGather", "utf-8"))
+ self.wfile.write(bytes("", "utf-8"))
+ self.wfile.write(bytes(export_webserver.html_body, "utf-8"))
+ self.wfile.write(bytes("", "utf-8"))
+ self.wfile.write(bytes("", "utf-8"))
+
+
def log_message(self, format, *args):
pass