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
+15
View File
@@ -4,6 +4,7 @@ from influxdb_client.client.write_api import SYNCHRONOUS
class export_influxdb(object): class export_influxdb(object):
def __init__(self): def __init__(self):
self._isConfigured = False
self.client = None self.client = None
self.write_api = None self.write_api = None
self.bucket = 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'): if not config.get('token') and config.get('org') and config.get('bucket') and config.get('measurements'):
logging.warning(f"InfluxDB: Please check configuration") logging.warning(f"InfluxDB: Please check configuration")
return False return False
try:
self.client = influxdb_client.InfluxDBClient( self.client = influxdb_client.InfluxDBClient(
url=config.get('url', 'http://localhost:8086'), url=config.get('url', 'http://localhost:8086'),
token=config.get('token'), token=config.get('token'),
org=config.get('org') org=config.get('org')
) )
except Exception as err:
logging.error(f"InfluxDB: Error: {err}")
return False
self.bucket=config.get('bucket') self.bucket=config.get('bucket')
for measurement in config.get('measurements'): for measurement in config.get('measurements'):
@@ -28,7 +34,14 @@ class export_influxdb(object):
self.write_api = self.client.write_api(write_options=SYNCHRONOUS) self.write_api = self.client.write_api(write_options=SYNCHRONOUS)
logging.info(f"InfluxDB: Configured: {self.client.url}") logging.info(f"InfluxDB: Configured: {self.client.url}")
self._isConfigured = True
return self._isConfigured
def publish(self, inverter): def publish(self, inverter):
if not self._isConfigured:
logging.info("InfluxDB: Skipped, Initial Configuration Failed")
return False
sequence = [] sequence = []
for measurement in self.measurements: 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'))}") sequence.append(f"{measurement.get('point')},inverter={inverter.get('device_type_code', 'unknown').replace('.','').replace('-','')} {measurement.get('register')}={inverter.get(measurement.get('register'))}")
@@ -39,3 +52,5 @@ class export_influxdb(object):
logging.error("InfluxDB: " + str(err)) logging.error("InfluxDB: " + str(err))
logging.info("InfluxDB: Published") logging.info("InfluxDB: Published")
return True
+14 -1
View File
@@ -4,6 +4,7 @@ import paho.mqtt.client as mqtt
class export_mqtt(object): class export_mqtt(object):
def __init__(self): def __init__(self):
self._isConfigured = False
self.mqtt_client = None self.mqtt_client = None
self.sensor_topic = None self.sensor_topic = None
self.homeassistant = False self.homeassistant = False
@@ -15,7 +16,7 @@ class export_mqtt(object):
# Configure MQTT # Configure MQTT
def configure(self, config, config_inverter): 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'): if config.get('username') and config.get('password'):
self.mqtt_client.username_pw_set(config.get('username'), 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: if config.get('port') == 8883:
self.mqtt_client.tls_set() self.mqtt_client.tls_set()
try:
self.mqtt_client.connect(config.get('host'), port=config.get('port', 1883)) 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') 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)}") logging.info(f"MQTT: Configured {config.get('host')}:{config.get('port', 1883)}")
return self._isConfigured
def publish(self, inverter): def publish(self, inverter):
global mqtt_client 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 # After a while you'll need to reconnect, so just reconnect before each publish
self.mqtt_client.reconnect() self.mqtt_client.reconnect()
+1
View File
@@ -41,6 +41,7 @@ class export_pvoutput(object):
return False return False
logging.info("PVOutput: Configured") logging.info("PVOutput: Configured")
return True
def publish(self, inverter): def publish(self, inverter):
""" """
+13 -1
View File
@@ -8,17 +8,28 @@ import logging
class export_webserver(object): class export_webserver(object):
html_body = "Pending Data Retrieval" html_body = "Pending Data Retrieval"
def __init__(self): def __init__(self):
self._isConfigured = False
return return
# Configure Webserver # Configure Webserver
def configure(self, config, config_inverter): def configure(self, config, config_inverter):
try:
self.webServer = HTTPServer(('', config.get('port',8080)), MyServer) self.webServer = HTTPServer(('', config.get('port',8080)), MyServer)
self.t = Thread(target=self.webServer.serve_forever) self.t = Thread(target=self.webServer.serve_forever)
self.t.start() self.t.start()
self.config_inverter = config_inverter self.config_inverter = config_inverter
logging.info(f"Webserver: Configured") 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): 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>" body = "<h3>Sungather v" + __version__ + "</h3></p><table><tr><th>Register</th><th>Value</th>"
for register in inverter: for register in inverter:
body = body + f"<tr><td>{register}</td><td>{inverter.get(register)}</td></tr>" 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>" 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>" export_webserver.html_body = export_webserver.html_body + body + f"</table></p>"
logging.info("Webserver: Content Updated") logging.info("Webserver: Content Updated")
return
return True
class MyServer(BaseHTTPRequestHandler): class MyServer(BaseHTTPRequestHandler):
def do_GET(self): def do_GET(self):
+1 -1
View File
@@ -1 +1 @@
__version__ = '0.2.2' __version__ = '0.2.3'