mirror of
https://github.com/alexhopeoconnor/SunGather.git
synced 2026-10-04 02:48:12 +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):
|
||||
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
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ class export_pvoutput(object):
|
||||
return False
|
||||
|
||||
logging.info("PVOutput: Configured")
|
||||
return True
|
||||
|
||||
def publish(self, inverter):
|
||||
"""
|
||||
|
||||
@@ -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 @@
|
||||
__version__ = '0.2.2'
|
||||
__version__ = '0.2.3'
|
||||
Reference in New Issue
Block a user