From f3957ee074d7434258156b81fe61ce32a9def9e4 Mon Sep 17 00:00:00 2001
From: bohdan-s
Date: Mon, 17 Jan 2022 10:26:32 +1100
Subject: [PATCH] Better error capture on exports
---
SunGather/exports/influxdb.py | 27 +++++++++++++++++++++------
SunGather/exports/mqtt.py | 17 +++++++++++++++--
SunGather/exports/pvoutput.py | 1 +
SunGather/exports/webserver.py | 24 ++++++++++++++++++------
SunGather/version.py | 2 +-
5 files changed, 56 insertions(+), 15 deletions(-)
diff --git a/SunGather/exports/influxdb.py b/SunGather/exports/influxdb.py
index cf5a9a2..a82caa0 100644
--- a/SunGather/exports/influxdb.py
+++ b/SunGather/exports/influxdb.py
@@ -4,6 +4,7 @@ from influxdb_client.client.write_api import SYNCHRONOUS
class export_influxdb(object):
def __init__(self):
+ self._isConfigured = False
self.client = None
self.write_api = None
self.bucket = None
@@ -15,11 +16,16 @@ class export_influxdb(object):
if not config.get('token') and config.get('org') and config.get('bucket') and config.get('measurements'):
logging.warning(f"InfluxDB: Please check configuration")
return False
- self.client = influxdb_client.InfluxDBClient(
- url=config.get('url', 'http://localhost:8086'),
- token=config.get('token'),
- org=config.get('org')
- )
+ try:
+ self.client = influxdb_client.InfluxDBClient(
+ url=config.get('url', 'http://localhost:8086'),
+ token=config.get('token'),
+ org=config.get('org')
+ )
+ except Exception as err:
+ logging.error(f"InfluxDB: Error: {err}")
+ return False
+
self.bucket=config.get('bucket')
for measurement in config.get('measurements'):
@@ -28,7 +34,14 @@ class export_influxdb(object):
self.write_api = self.client.write_api(write_options=SYNCHRONOUS)
logging.info(f"InfluxDB: Configured: {self.client.url}")
+ self._isConfigured = True
+ return self._isConfigured
+
def publish(self, inverter):
+ if not self._isConfigured:
+ logging.info("InfluxDB: Skipped, Initial Configuration Failed")
+ return False
+
sequence = []
for measurement in self.measurements:
sequence.append(f"{measurement.get('point')},inverter={inverter.get('device_type_code', 'unknown').replace('.','').replace('-','')} {measurement.get('register')}={inverter.get(measurement.get('register'))}")
@@ -38,4 +51,6 @@ class export_influxdb(object):
except Exception as err:
logging.error("InfluxDB: " + str(err))
- logging.info("InfluxDB: Published")
\ No newline at end of file
+ logging.info("InfluxDB: Published")
+
+ return True
\ No newline at end of file
diff --git a/SunGather/exports/mqtt.py b/SunGather/exports/mqtt.py
index e323a7c..07a879e 100644
--- a/SunGather/exports/mqtt.py
+++ b/SunGather/exports/mqtt.py
@@ -4,6 +4,7 @@ import paho.mqtt.client as mqtt
class export_mqtt(object):
def __init__(self):
+ self._isConfigured = False
self.mqtt_client = None
self.sensor_topic = None
self.homeassistant = False
@@ -15,7 +16,7 @@ class export_mqtt(object):
# Configure MQTT
def configure(self, config, config_inverter):
- self.mqtt_client = mqtt.Client("pv_data")
+ self.mqtt_client = mqtt.Client(client_id="SunGather")
if config.get('username') and config.get('password'):
self.mqtt_client.username_pw_set(config.get('username'), config.get('password'))
@@ -23,7 +24,13 @@ class export_mqtt(object):
if config.get('port') == 8883:
self.mqtt_client.tls_set()
- self.mqtt_client.connect(config.get('host'), port=config.get('port', 1883))
+ try:
+ self.mqtt_client.connect(config.get('host'), port=config.get('port', 1883))
+ self._isConfigured = True
+ except Exception as err:
+ logging.error(f"MQTT: Connection {config.get('host')}:{config.get('port', 1883)}")
+ logging.error(f"MQTT: Error: {err}")
+ return False
self.inverter_ip = config_inverter.get('host')
@@ -36,9 +43,15 @@ class export_mqtt(object):
logging.info(f"MQTT: Configured {config.get('host')}:{config.get('port', 1883)}")
+ return self._isConfigured
+
def publish(self, inverter):
global mqtt_client
+ if not self._isConfigured:
+ logging.info("MQTT: Skipped, Initial Configuration Failed")
+ return False
+
# After a while you'll need to reconnect, so just reconnect before each publish
self.mqtt_client.reconnect()
diff --git a/SunGather/exports/pvoutput.py b/SunGather/exports/pvoutput.py
index 6a03d00..e108fb4 100644
--- a/SunGather/exports/pvoutput.py
+++ b/SunGather/exports/pvoutput.py
@@ -41,6 +41,7 @@ class export_pvoutput(object):
return False
logging.info("PVOutput: Configured")
+ return True
def publish(self, inverter):
"""
diff --git a/SunGather/exports/webserver.py b/SunGather/exports/webserver.py
index ae03aac..6dd449f 100644
--- a/SunGather/exports/webserver.py
+++ b/SunGather/exports/webserver.py
@@ -8,17 +8,28 @@ import logging
class export_webserver(object):
html_body = "Pending Data Retrieval"
def __init__(self):
+ self._isConfigured = False
return
# Configure Webserver
def configure(self, config, config_inverter):
- self.webServer = HTTPServer(('', config.get('port',8080)), MyServer)
- self.t = Thread(target=self.webServer.serve_forever)
- self.t.start()
- self.config_inverter = config_inverter
- logging.info(f"Webserver: Configured")
+ try:
+ self.webServer = HTTPServer(('', config.get('port',8080)), MyServer)
+ self.t = Thread(target=self.webServer.serve_forever)
+ self.t.start()
+ self.config_inverter = config_inverter
+ logging.info(f"Webserver: Configured")
+ self._isConfigured = True
+ except Exception as err:
+ logging.error(f"Webserver: Error: {err}")
+
+ return self._isConfigured
def publish(self, inverter):
+ if not self._isConfigured:
+ logging.info("Webserver: Skipped, Initial Configuration Failed")
+ return False
+
body = "Sungather v" + __version__ + "
| Register | Value | "
for register in inverter:
body = body + f"
|---|
| {register} | {inverter.get(register)} |
"
@@ -29,7 +40,8 @@ class export_webserver(object):
body = body + f"| {config} | {self.config_inverter.get(config)} |
"
export_webserver.html_body = export_webserver.html_body + body + f"
"
logging.info("Webserver: Content Updated")
- return
+
+ return True
class MyServer(BaseHTTPRequestHandler):
def do_GET(self):
diff --git a/SunGather/version.py b/SunGather/version.py
index 9dd16a3..db9cf74 100644
--- a/SunGather/version.py
+++ b/SunGather/version.py
@@ -1 +1 @@
-__version__ = '0.2.2'
\ No newline at end of file
+__version__ = '0.2.3'
\ No newline at end of file