Changeset - 514bbf7bb55e
[Not reviewed]
default
0 1 0
matthewreed - 9 years ago 2016-07-23 22:31:04

Implemented Influxdb SeriesHelper for logging data
1 file changed with 38 insertions and 69 deletions:
0 comments (0 inline, 0 general)
hydrobot.py
Show inline comments
 
@@ -8,6 +8,7 @@ from canard import can, messaging
 
from canard.hw import socketcan
 
from canard.file import jsondb
 
from influxdb import InfluxDBClient
 
from influxdb import SeriesHelper
 
from apscheduler.schedulers.background import BackgroundScheduler
 

	
 
#TODO
 
@@ -21,6 +22,25 @@ DEBUG_CAN = config.getboolean("debug", "
 
DEBUG_CAN_DETAIL = config.getboolean("debug", "can_detail")
 
DEBUG_TIMER = config.getboolean("debug", "timer")
 

	
 
    
 
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):
 
@@ -31,80 +51,27 @@ class Database:
 
        database = config.get("database", "database")
 
        self.name = config.get("system", "name")
 
        self.client = InfluxDBClient(host, port, username, password, database)
 
        MySeriesHelper.Meta.client = self.client
 
        MySeriesHelper.Meta.series_name = self.name + '.{measurement}'
 
        
 
        # To manually submit data points which are not yet written, call commit:
 
        #MySeriesHelper.commit()
 

	
 
    def log_data(self, msgdb, message):
 
        if message == msgdb.AirSense:
 
            json_body = [
 
                {
 
                    "measurement": self.name + "_air_temp",
 
                    "fields": {
 
                        "value": (float)(message.Temperature.value)
 
                    }
 
                },
 
                {
 
                    "measurement": self.name + "_air_humidity",
 
                    "fields": {
 
                        "value": (float)(message.Humidity.value)
 
                    }
 
                },
 
                {
 
                    "measurement": self.name + "_air_pressure",
 
                    "fields": {
 
                        "value": (float)(message.Pressure.value)
 
                    }
 
                }
 
            ]
 
            self.client.write_points(json_body)
 
            
 
            MySeriesHelper(measurement='air_temp', value=(float)(message.Temperature.value))
 
            MySeriesHelper(measurement='air_humidity', value=(float)(message.Humidity.value))
 
            MySeriesHelper(measurement='air_pressure', value=(float)(message.Pressure.value))
 
        if message == msgdb.RelayDriveIn:
 
            json_body = [
 
                {
 
                    "measurement": self.name + "_input_1",
 
                    "fields": {
 
                        "value": (float)(message.Input1.value)
 
                    }
 
                },
 
                {
 
                    "measurement": self.name + "_input_2",
 
                    "fields": {
 
                        "value": (float)(message.Input2.value)
 
                    }
 
                },
 
                {
 
                    "measurement": self.name + "_input_3",
 
                    "fields": {
 
                        "value": (float)(message.Input3.value)
 
                    }
 
                },
 
                {
 
                    "measurement": self.name + "_input_4",
 
                    "fields": {
 
                        "value": (float)(message.Input4.value)
 
                    }
 
                }
 
            ]
 
            self.client.write_points(json_body)
 
            MySeriesHelper(measurement='input_1', value=(float)(message.Input1.value))
 
            MySeriesHelper(measurement='input_2', value=(float)(message.Input2.value))
 
            MySeriesHelper(measurement='input_3', value=(float)(message.Input3.value))
 
            MySeriesHelper(measurement='input_4', value=(float)(message.Input4.value))
 
        if message == msgdb.WaterSense:
 
            json_body = [
 
                {
 
                    "measurement": self.name + "_water_level",
 
                    "fields": {
 
                        "value": (float)(message.PercentFull.value)
 
                    }
 
                },
 
                {
 
                    "measurement": self.name + "_water_temp",
 
                    "fields": {
 
                        "value": (float)(message.Temperature.value)
 
                    }
 
                },
 
                {
 
                    "measurement": self.name + "_water_raw_debug",
 
                    "fields": {
 
                        "value": (float)(message.RawDebug.value)
 
                    }
 
                }
 
            ]
 
            self.client.write_points(json_body)
 
            MySeriesHelper(measurement='water_level', value=(float)(message.PercentFull.value))
 
            MySeriesHelper(measurement='water_temp', value=(float)(message.Temperature.value))
 
            MySeriesHelper(measurement='water_raw_debug', value=(float)(message.RawDebug.value))
 

	
 

	
 
class CanBus:
 
@@ -161,6 +128,7 @@ class CanBus:
 
        msg.lookup_signal(output).value = state
 
        self.dev.send(msg.encode())
 
        
 
        
 
class Scheduler:
 
    
 
    def __init__(self, canbus):
 
@@ -212,6 +180,7 @@ class Scheduler:
 
        if DEBUG_TIMER:
 
            print("Turning " + timer_off + "! " + str(datetime.datetime.now().time()))
 
    
 
    
 
def func():
 
    print(1)
 
    
0 comments (0 inline, 0 general)