Files @ b433eae633b8
Branch filter:

Location: HydroBot/hydrobot-software/database.py - annotation

matthewreed
Added config sensor type and removed old files that are no longer needed.
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))