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__ + "

" for register in inverter: body = body + f"" @@ -29,7 +40,8 @@ class export_webserver(object): body = body + f"" export_webserver.html_body = export_webserver.html_body + body + f"
RegisterValue
{register}{inverter.get(register)}
{config}{self.config_inverter.get(config)}

" 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