Skip to content

Instantly share code, notes, and snippets.

@nhimf
Created February 4, 2016 21:08
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save nhimf/462c37ef78999c538e9f to your computer and use it in GitHub Desktop.
Save nhimf/462c37ef78999c538e9f to your computer and use it in GitHub Desktop.
Very crude Python script to transfer data from mqtt to InfluxDB
import paho.mqtt.client as mqtt
from influxdb import InfluxDBClient
import datetime
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
client.subscribe("sensors/#")
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
json_body = [
{
"measurement": "temperature",
"tags": {
"host": "aquarium",
},
# "time": str(current_time),
"fields": {
"value": str(msg.payload)
}
}
]
influx_client.write_points(json_body)
print(msg.topic+" "+str(msg.payload))
influx_client = InfluxDBClient('localhost', 8086, database='collectd_db')
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("192.168.1.3", 1883, 60)
# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
# Other loop*() functions are available that give a threaded interface and a
# manual interface.
client.loop_forever()
@nhimf
Copy link
Author

nhimf commented Feb 4, 2016

This script subscribes to a mqtt broker and subscribes to the sensors/# topic.
If anything is published it will put this directly into a InfluxDB database called collectd_db
Currently the host is always "aquarium" but in the future the topics will be defined like this:
'sensors////'
e.g. 'sensors/temperature/aquarium/0' this wil be the first temperature sensor for host/group aquarium
Another example could be 'sensors/flow/aquarium/0' for a flow meter.
Only values are published in these topics, no meta data as of yet (like timestamp or retention) is published

@sparrc
Copy link

sparrc commented Feb 4, 2016

Cool, thanks @nhimf, this is helpful.

I'm thinking that we'll probably want a way to setup templates translating MQTT topics into InfluxDB metrics, if you have any input feel free to comment on this case: influxdata/telegraf#648

@sujayuid
Copy link

sujayuid commented May 1, 2019

you have mqtt broker scripts

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment