-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMQTTInfluxDBBridge.py
89 lines (68 loc) · 2.46 KB
/
MQTTInfluxDBBridge.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import sys # Standard python module
from influxdb import InfluxDBClient # For interacting with InfluxDB
from Adafruit_IO import MQTTClient # Import Adafruit IO MQTT client
INFLUXDB_ADDRESS = '192.168.X.X'
INFLUXDB_USER = 'User'
INFLUXDB_PASSWORD = 'Password'
INFLUXDB_DATABASE = 'Name of your database'
ADAFRUIT_IO_KEY = 'adafruit_key'
ADAFRUIT_IO_USERNAME = 'user_name'
AIO_TEMPERATURE_FEED = "temperature"
AIO_HUMIDITY_FEED = "humidity"
AIO_SOIL_FEED1 = "soilP20"
AIO_SOIL_FEED2 = "soilP14"
AIO_SOIL_FEED3 = "soilP18"
AIO_SOIL_FEED4 = "soilP17"
AIO_SOIL_FEED5 = "soilP16"
AIO_SOIL_FEED6 = "soilP15"
influxdb_client = InfluxDBClient(INFLUXDB_ADDRESS, 8086, INFLUXDB_USER, INFLUXDB_PASSWORD, None)
def connected(client):
client.subscribe(AIO_TEMPERATURE_FEED)
client.subscribe(AIO_HUMIDITY_FEED)
client.subscribe(AIO_SOIL_FEED1)
client.subscribe(AIO_SOIL_FEED2)
client.subscribe(AIO_SOIL_FEED3)
client.subscribe(AIO_SOIL_FEED4)
client.subscribe(AIO_SOIL_FEED5)
client.subscribe(AIO_SOIL_FEED6)
print('Connected to Adafruit IO! Listening for changes...')
def subscribe(client, userdata, mid, granted_qos):
print('Subscribed')
def disconnected(client):
print('Disconnected from Adafruit IO!')
sys.exit(1)
def send_to_influxdb(feed_id, payload):
json_body = [
{
'measurement': feed_id,
'tags': {
'feed': feed_id
},
'fields': {
'value': payload
}
}
]
influxdb_client.write_points(json_body)
print('Written to DB')
def message(client, feed_id, payload):
print('Feed {0} received new value: {1}'.format(feed_id, payload))
print('Sending to DB')
send_to_influxdb(feed_id, payload)
def _init_influxdb_database():
databases = influxdb_client.get_list_database()
if len(list(filter(lambda x: x['name'] == INFLUXDB_DATABASE, databases))) == 0:
influxdb_client.create_database(INFLUXDB_DATABASE)
influxdb_client.switch_database(INFLUXDB_DATABASE)
def main():
_init_influxdb_database()
client = MQTTClient(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY)
client.on_connect = connected
client.on_disconnect = disconnected
client.on_message = message
client.on_subscribe = subscribe
client.connect()
client.loop_blocking()
if __name__ == '__main__':
print('MQTT to InfluxDB bridge')
main()