class Controller: def __init__(self): config = configparser.ConfigParser() config_file = os.path.join(os.path.dirname(__file__), 'config.ini') config.read(config_file) client = InfluxDBClient.from_config_file(config_file) self.query_api = client.query_api() self.bucket = config['ha']['influx_bucket'] self.actions = Actions() def get_last_record(self, measurement, tag_key, tag_value, field_key): # https://v2.docs.influxdata.com/v2.0/query-data/get-started/query-influxdb/ query = ''' from(bucket:"{}") |> range(start: -10d) |> filter(fn:(r) => r._measurement == "{}") |> filter(fn: (r) => r.{} == "{}") |> filter(fn:(r) => r._field == "{}") |> last() '''.format(self.bucket, measurement, tag_key, tag_value, field_key) result = self.query_api.query(query=query) return result[0].records[0] def run(self): while True: last_value = self.get_last_record('sensor', 'location', 'home', 'dummy0')['_value'] if last_value > 80000: self.actions.do_action1() if last_value < 60000: self.actions.do_action2()