diff --git a/hydrobot.py b/hydrobot.py --- a/hydrobot.py +++ b/hydrobot.py @@ -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)