Add mqtt post
This commit is contained in:
parent
b234d2e378
commit
66f76589ab
97
content/post/mqtt-telegraf-influx.md
Normal file
97
content/post/mqtt-telegraf-influx.md
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
---
|
||||||
|
title: "Set up and secure an MQTT broker on Ubuntu"
|
||||||
|
date: 2021-01-01T18:18:10+02:00
|
||||||
|
draft: false
|
||||||
|
image: "uploads/raspi_small2.png"
|
||||||
|
categrories: ['English']
|
||||||
|
tags: ['monitoring', 'english']
|
||||||
|
---
|
||||||
|
|
||||||
|
I had some IoT devices that I wanted to integrate in my monitoring. For this I set up a MQTT broker as the MQTT protocol is a simple solution to send data from IoT devices to a server. This tutorial is focusing on setting up the server, but I also introduce a Python based MQTT client to test our installation.
|
||||||
|
|
||||||
|
On your server, first install mosquitto, our MQTT server/broker.
|
||||||
|
```bash
|
||||||
|
sudo apt-get install mosquitto
|
||||||
|
```
|
||||||
|
|
||||||
|
Allow standard mqtt port in firewall (if you have ufw installed)
|
||||||
|
```bash
|
||||||
|
sudo ufw allow 1883
|
||||||
|
```
|
||||||
|
|
||||||
|
Now on the client side connect to the server and publish some fake sensor values.
|
||||||
|
First install the mqtt client
|
||||||
|
```bash
|
||||||
|
sudo pip install phao-mqtt
|
||||||
|
```
|
||||||
|
and then use the following python code on your client side to send fake values to your server. You only need to change `mqtt.example.com` to your servers IP/domain.
|
||||||
|
```python
|
||||||
|
import time
|
||||||
|
import paho.mqtt.client as mqtt
|
||||||
|
import numpy
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
def calc_temp():
|
||||||
|
temp = np.sin(time.time()%(3600)*2*np.pi)*5+20
|
||||||
|
return temp
|
||||||
|
|
||||||
|
def on_connect(client, userdata, flags, rc):
|
||||||
|
print("Connected with result code " + str(rc))
|
||||||
|
|
||||||
|
client = mqtt.Client()
|
||||||
|
#client.username_pw_set(username="username",password="my_super_secret_pw")
|
||||||
|
client.on_connect = on_connect
|
||||||
|
|
||||||
|
client.connect("mqtt.example.com", 1883, 60)
|
||||||
|
|
||||||
|
client.loop_start()
|
||||||
|
|
||||||
|
while True:
|
||||||
|
time.sleep(2)
|
||||||
|
client.publish("test/temperature", calc_temp())
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
You can check if the broker accepts the values by subscribing to the topic:
|
||||||
|
```python
|
||||||
|
#!/usr/bin/env python
|
||||||
|
import paho.mqtt.client as mqtt
|
||||||
|
|
||||||
|
def on_connect(client, userdata, flags, rc):
|
||||||
|
print("Connected with result code " + str(rc))
|
||||||
|
client.subscribe("test/#")
|
||||||
|
|
||||||
|
def on_message(client, userdata, msg):
|
||||||
|
print(msg.topic + " " + str(msg.payload))
|
||||||
|
|
||||||
|
client = mqtt.Client()
|
||||||
|
#client.username_pw_set(username="username",password="my_super_secret_pw")
|
||||||
|
client.on_connect = on_connect
|
||||||
|
client.on_message = on_message
|
||||||
|
|
||||||
|
client.connect("mqtt.example.com", 1883, 60)
|
||||||
|
|
||||||
|
client.loop_forever()
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Now secure your broker by creating a user with a password
|
||||||
|
```bash
|
||||||
|
sudo mosquitto_passwd -c /etc/mosquitto/passwd <username>
|
||||||
|
```
|
||||||
|
|
||||||
|
and configure mosquitto to use it in `/etc/mosquitto/conf.d/default.conf`:
|
||||||
|
```
|
||||||
|
allow_anonymous false
|
||||||
|
password_file /etc/mosquitto/passwd
|
||||||
|
```
|
||||||
|
|
||||||
|
Now restart mosquitto to enable the protection
|
||||||
|
```bash
|
||||||
|
sudo systemctl restart mosquitto
|
||||||
|
```
|
||||||
|
Test the installation by uncommenting `client.username_pw_set(username="username",password="my_super_secret_pw")` and filling in your credentials.
|
||||||
|
The result code `0` indicates a valid connection. `5` indicates a authentication error.
|
||||||
|
|
||||||
|
|
||||||
|
I hope this helps setting up a MQTT broker. Hopefully I will have the time to write how to connect such a broker to Grafana via Telegraf and Influx DB.
|
BIN
static/uploads/raspi_small2.png
Normal file
BIN
static/uploads/raspi_small2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.0 MiB |
Loading…
Reference in New Issue
Block a user