mirror of
https://github.com/alexhopeoconnor/SunGather.git
synced 2026-10-24 03:12:33 +10:00
Better error capture on exports
This commit is contained in:
@@ -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
|
||||||
@@ -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()
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -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 @@
|
|||||||
__version__ = '0.2.2'
|
__version__ = '0.2.3'
|
||||||
Reference in New Issue
Block a user