diff --git a/database.py b/database.py new file mode 100644 --- /dev/null +++ b/database.py @@ -0,0 +1,59 @@ +from influxdb import InfluxDBClient +from influxdb import SeriesHelper +import configparser +import logging +import protocol + +class MySeriesHelper(SeriesHelper): + + # Meta class stores time series helper configuration. + class Meta: + # The client should be an instance of InfluxDBClient. + #client = myclient + # The series name must be a string. Add dependent fields/tags in curly brackets. + series_name = '{measurement}' + # Defines all the fields in this time series. + fields = ['value'] + # Defines all the tags for the series. + tags = ['measurement'] + # Defines the number of data points to store prior to writing on the wire. + bulk_size = 5 + # autocommit must be set to True when using bulk_size + autocommit = True + +class Database: + + def __init__(self, config): + self.logger = logging.getLogger('hydrobot') + host = config.get("database", "host") + port = config.get("database", "port") + username = config.get("database", "username") + password = config.get("database", "password") + database = config.get("database", "database") + self.name = config.get("system", "name") + + try: + self.client = InfluxDBClient(host, port, username, password, database) + MySeriesHelper.Meta.client = self.client + MySeriesHelper.Meta.series_name = self.name + '.{measurement}' + self.logger.info("Connected to database") + except: + self.logger.error("Could not connect to database") + + # To manually submit data points which are not yet written, call commit: + #MySeriesHelper.commit() + + def log_message(self, name, message): + data_name = protocol.lookup_data_name_by_key(message.data_key) + if not data_name == None: + if message.sensor_num > 0: + num = "_" + str(message.sensor_num) + else: + num = "" + try: + self.logger.debug("Database log: " + name + "." + data_name + num) + MySeriesHelper(measurement=(name + "." + data_name + num), value=(float)(message.data)) + except: + self.logger.error("Database issue!") + else: + self.logger.warning("Unknown data key: " + str(message))