Files
        @ b433eae633b8
    
        
              Branch filter: 
        
    Location: HydroBot/hydrobot-software/database.py - annotation
        
            
            b433eae633b8
            2.3 KiB
            text/x-python
        
        
    
    Added config sensor type and removed old files that are no longer needed.
    25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b 25926382c27b  | 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))
 |