Better error capture on exports

This commit is contained in:
bohdan-s
2022-01-17 10:26:32 +11:00
parent 95e3aa429a
commit f3957ee074
5 changed files with 56 additions and 15 deletions
+21 -6
View File
@@ -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")
logging.info("InfluxDB: Published")
return True
+15 -2
View File
@@ -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()
+1
View File
@@ -41,6 +41,7 @@ class export_pvoutput(object):
return False
logging.info("PVOutput: Configured")
return True
def publish(self, inverter):
"""
+18 -6
View File
@@ -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 = "<h3>Sungather v" + __version__ + "</h3></p><table><tr><th>Register</th><th>Value</th>"
for register in inverter:
body = body + f"<tr><td>{register}</td><td>{inverter.get(register)}</td></tr>"
@@ -29,7 +40,8 @@ class export_webserver(object):
body = body + f"<tr><td>{config}</td><td>{self.config_inverter.get(config)}</td></tr>"
export_webserver.html_body = export_webserver.html_body + body + f"</table></p>"
logging.info("Webserver: Content Updated")
return
return True
class MyServer(BaseHTTPRequestHandler):
def do_GET(self):
+1 -1
View File
@@ -1 +1 @@
__version__ = '0.2.2'
__version__ = '0.2.3'