-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmeasurementDataProvider.py
59 lines (41 loc) · 2.32 KB
/
measurementDataProvider.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import json
from influxdb import InfluxDBClient
import numpy as np
import datetime
"""
Fetches the measured data from the InfluxDB.
The data of the InfluxDB gets filled by Homeassistant.
"""
class MeasurementDataProvider():
def __init__(self, measurementDataDbHost, measurementDataDbPort, measurementDataDbUser, measurementDataDbPassword):
self.measurementDataDbHost = measurementDataDbHost
self.measurementDataDbPort = measurementDataDbPort
self.measurementDataDbUser = measurementDataDbUser
self.measurementDataDbPassword = measurementDataDbPassword
def getMeasurement(self, sensor, groupingInterval=10, fill=0):
print("Fetching data of sensor %r from InfluxDB..." % sensor)
client = InfluxDBClient(host=self.measurementDataDbHost, port=self.measurementDataDbPort, username=self.measurementDataDbUser, password=self.measurementDataDbPassword)
client.get_list_database()
query = 'SELECT MEAN("value") FROM "homeassistant"."autogen"."sensor.' + sensor + '" WHERE time > now() - 24h GROUP BY time(' + str(groupingInterval) + 'm) FILL(' + str(fill) + ')'
#query = 'SELECT MEAN("value") FROM "homeassistant"."autogen"."sensor.' + sensor + '" WHERE time > now() - 48h GROUP BY time(' + str(groupingInterval) + 'm) FILL(' + str(fill) + ')' # test
#print(query)
#result = client.query('SELECT MEAN("value") FROM "homeassistant"."autogen"."sensor.regenstaerke" WHERE time > now() - 12h GROUP BY time(10m) FILL(0)')
result = client.query(query)
#print(result)
if str(result) == "ResultSet({})":
print("No data in Influx-DB!")
return None
res = result.raw['series'][0]['values']
time, data = np.transpose(res)
time = [int(datetime.datetime.strptime(x, '%Y-%m-%dT%H:%M:%SZ').timestamp()) for x in time]
#time = [int(datetime.datetime.strptime(x, '%Y-%m-%dT%H:%M:%SZ').timestamp()) + 24*3600 for x in time] # test
data = list(data)
#print(sensor, data)
#data = [float(x) for x in data]
for i in range(len(data)):
try:
data[i] = float(data[i])
except:
data[i] = 0
#print(sensor, data)
return (time, data)