Monitorizarea unui Sistem IoT Industrial cu MQTT și Grafana

Configurare noua (How To)

Situatie

Sistemele IoT industriale (IIoT) colectează date în timp real de la senzori pentru:

  • Monitorizarea temperaturii, umidității, vibrațiilor etc.

  • Detectarea defectelor (predictive maintenance)

  • Optimizarea operațiunilor.

Solutie

Arhitectura generală a sistemului

[Senzor] --> MQTT Publisher --> [Mosquitto Broker] --> MQTT Subscriber --> [InfluxDB] --> [Grafana Dashboard]

Ce este MQTT?

  • Protocol de mesagerie ușor, bazat pe TCP/IP

  • Folosește o arhitectură broker-based

  • Topic-uri ierarhice (factory/machine1/temp)

  • Ideal pentru conexiuni instabile sau consum redus de rețea

Scenariu de lucru

Obiectiv:
Construim un flux IoT care:

  1. Simulează un senzor ce trimite date la fiecare 5 secunde

  2. Transmite date prin MQTT către broker

  3. Salvează datele într-o bază de date time-series (InfluxDB)

  4. Vizualizează în timp real în Grafana

Pași de implementare

Pasul 1: Instalare componente

# Instalare Mosquitto (broker MQTT)
sudo apt install mosquitto mosquitto-clients

# InfluxDB + Grafana (via Docker recomandat)
docker run -d --name=influxdb -p 8086:8086 influxdb:2.7
docker run -d --name=grafana -p 3000:3000 grafana/grafana

Pasul 2: Simulare senzor MQTT (Python)

import paho.mqtt.client as mqtt
import time
import random
import json

client = mqtt.Client()
client.connect("localhost", 1883)

while True:
temp = round(random.uniform(20, 40), 2)
data = {"sensor_id": "machine1", "temperature": temp}
client.publish("factory/machine1/temp", json.dumps(data))
print(f"Sent: {data}")
time.sleep(5)

Pasul 3: Subscriber + salvare în InfluxDB

from influxdb_client import InfluxDBClient, Point, WriteOptions
from paho.mqtt.client import Client
import json

influx = InfluxDBClient(url="http://localhost:8086", token="my-token", org="my-org")
write_api = influx.write_api(write_options=WriteOptions(batch_size=1))

def on_message(client, userdata, msg):
payload = json.loads(msg.payload.decode())
point = Point("temperature") \
.tag("machine", payload["sensor_id"]) \
.field("value", payload["temperature"])
write_api.write(bucket="factory", record=point)

mqttc = Client()
mqttc.connect("localhost", 1883)
mqttc.subscribe("factory/machine1/temp")
mqttc.on_message = on_message
mqttc.loop_forever()

Configurarea Grafana

  1. Accesează http://localhost:3000 (user: admin, pass: admin)

  2. Adaugă sursa de date: InfluxDB

    • URL: http://localhost:8086

    • Token + Bucket + Org

  3. Creează un dashboard nou:

    • Query: from(bucket: "factory") |> range(start: -1h) |> filter(fn: (r) => r._measurement == "temperature")

    • Adaugă grafice liniare, gauge-uri etc.

Grafana oferă:

  • Actualizare live (refresh automat la 5s)

  • Filtrare pe mașini/senzori

  • Alerte dacă temperatura depășește pragul (ex: 35°C)

  • Export rapoarte PDF sau CSV.

Tip solutie

Permanent

Voteaza

(5 din 14 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?