Technologieaustausch

Aufbau einer Multiprotokoll-IoT-Cloud-Plattform basierend auf EMQX Flask InfluxDB Grafana: MQTT/HTTP-Gerätezugriff und Datenvisualisierungsprozess (mit Codebeispielen)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Zusammenfassung: In diesem Artikel werden Kernkonzepte wie das Internet der Dinge, Cloud-Plattform, MQTT, HTTP und Datenvisualisierung auf einfache und leicht verständliche Weise vorgestellt. Außerdem werden gängige Tools wie EMQX, Flask, InfluxDB und Grafana zum Unterrichten kombiniert Sie erfahren Schritt für Schritt, wie Sie eine Cloud-Plattform für das Internet der Dinge aufbauen, die mehrere Protokolle unterstützt. Der Artikel hat eine klare Struktur, Bilder und Texte, und der Code ist informativ und leicht verständlich. Er soll den Lesern helfen, die Kerntechnologie zum Aufbau einer IoT-Cloud-Plattform schnell zu beherrschen.

Schlüsselwörter:IoT, Cloud-Plattform, MQTT, HTTP, Datenvisualisierung, EMQX, Flask, InfluxDB, Grafana


1. Grundkenntnisse im Internet der Dinge

1.1 Überblick über das Internet der Dinge

Das Internet der Dinge (IoT, Internet der Dinge) bezieht sich auf die Echtzeiterfassung aller Objekte oder Prozesse, die über verschiedene Informationssensoren, Radiofrequenz-Identifikationstechnologie, globale Positionierungssysteme usw. überwacht, verbunden und interagiert werden müssen. die allgegenwärtige Kommunikation zwischen Dingen und Dingen sowie zwischen Dingen und Menschen zu realisieren. In Verbindung können wir eine intelligente Wahrnehmung, Identifizierung und Verwaltung von Gegenständen und Prozessen erreichen.

1.2 IoT-Architektur

Die IoT-Systemarchitektur ist üblicherweise in drei Schichten unterteilt:

  • Wahrnehmungsschicht:Verantwortlich für die Datenerfassung, einschließlich verschiedener Sensoren, RFID-Tags, GPS-Module usw.
  • Netzwerkschicht:Verantwortlich für die Datenübertragung, einschließlich verschiedener Netzwerkprotokolle, Kommunikationstechnologien usw. wie WLAN, Bluetooth, Zigbee, NB-IoT usw.
  • Anwendungsschicht:Verantwortlich für die Datenverarbeitung und Anwendungspräsentation, wie z. B. Datenanalyse, Fernsteuerung, intelligente Entscheidungsfindung usw.

2. Cloud-Plattform und Datenvisualisierung

2.1 Cloud-Plattform

Unter Cloud-Plattform versteht man das Hinzufügungs-, Nutzungs- und Bereitstellungsmodell internetbasierter Dienste, das in der Regel die Bereitstellung dynamisch skalierbarer und häufig virtualisierter Ressourcen über das Internet umfasst. Cloud-Plattformen können leistungsstarke Rechen-, Speicher- und Netzwerkressourcen für IoT-Anwendungen bereitstellen und so die Kosten für die Entwicklung und Bereitstellung von IoT-Anwendungen senken.

2.2 Datenvisualisierung

Unter Datenvisualisierung versteht man die Darstellung von Daten in visuellen Formen wie Grafiken und Diagrammen, um Benutzern ein intuitiveres Verständnis der Daten zu ermöglichen und Einblicke in die Muster und Trends hinter den Daten zu gewinnen.

3. Einführung in häufig verwendete Protokolle und Tools

3.1 MQTT-Protokoll

MQTT (Message Queuing Telemetry Transport) ist ein leichtes Nachrichten-Publish/Subscribe-Protokoll, das für Geräte und Netzwerke mit geringer Bandbreite und geringem Stromverbrauch entwickelt wurde. MQTT ist im Bereich des Internets der Dinge weit verbreitet und eignet sich besonders für Geräte mit eingeschränkten Ressourcen und unzuverlässige Netzwerkumgebungen.

3.2 HTTP-Protokoll

HTTP (Hypertext Transfer Protocol) ist ein Protokoll der Anwendungsschicht, das zur Übertragung von Informationen zwischen Webbrowsern und Webservern verwendet wird. Das HTTP-Protokoll ist einfach und benutzerfreundlich und wird häufig in verschiedenen Netzwerkanwendungen verwendet, einschließlich des Internets der Dinge.

3.3 EMQX

EMQX ist ein Open-Source-, leistungsstarker und skalierbarer MQTT-Nachrichtenserver, der Millionen gleichzeitiger Verbindungen und Nachrichtendurchsatz unterstützt.

3.4 Flasche

Flask ist ein leichtes, in Python geschriebenes Webanwendungs-Framework, das einfach zu erlernen und zu verwenden ist und sich für die schnelle Erstellung von Webanwendungen und API-Schnittstellen eignet.

3.5 InfluxDB

InfluxDB ist eine Open-Source-Zeitreihendatenbank zum Speichern und Abfragen von Zeitreihendaten. Sie eignet sich zum Speichern von IoT-Sensordaten, Überwachungsdaten usw.

3.6 Grafana

Grafana ist ein Open-Source-Datenvisualisierungstool, das mehrere Datenquellen verbinden kann, um schöne und leistungsstarke Dashboards zu erstellen und Daten in Echtzeit anzuzeigen.

4. Aufbau einer Multiprotokoll-IoT-Cloud-Plattform

Dieses Projekt wird eine IoT-Cloud-Plattform aufbauen, die MQTT- und HTTP-Protokolle unterstützt, um die folgenden Funktionen zu erreichen:

  • Unterstützung mehrerer Protokolle: Unterstützt den Gerätezugriff mit MQTT- und HTTP-Protokollen.
  • Datenerfassung und -speicherung: Sammeln Sie Daten von verschiedenen Protokollgeräten in Echtzeit und speichern Sie sie in der InfluxDB-Datenbank.
  • Datenvisualisierung: Verwenden Sie Grafana, um die gesammelten Daten visuell anzuzeigen.
4.1 Systemarchitektur

 

4.2 Code-Implementierung

1. HTTP-Serveraufbau (Flask)

  1. # 导入 Flask 库
  2. from flask import Flask, request, jsonify
  3. # 创建 Flask 应用
  4. app = Flask(__name__)
  5. # 定义 HTTP 接口,接收 POST 请求
  6. @app.route('/data', methods=['POST'])
  7. def receive_data():
  8. # 获取请求数据
  9. data = request.get_json()
  10. # 数据处理逻辑,例如数据校验、格式转换等
  11. # ...
  12. # 将数据写入 InfluxDB (示例)
  13. from influxdb import InfluxDBClient
  14. client = InfluxDBClient('localhost', 8086, 'user', 'password', 'iot_data')
  15. json_body = [
  16. {
  17. "measurement": "sensor_data",
  18. "tags": {
  19. "sensor_id": data.get("sensor_id")
  20. },
  21. "fields": {
  22. "temperature": data.get("temperature"),
  23. "humidity": data.get("humidity")
  24. }
  25. }
  26. ]
  27. client.write_points(json_body)
  28. # 返回响应
  29. return jsonify({'message': 'Data received successfully!'}), 200
  30. # 启动 Flask 应用
  31. if __name__ == '__main__':
  32. app.run(debug=True)

Codebeschreibung:

  • verwendenFlaskDas Framework erstellt einen HTTP-Server und definiert/dataDie Schnittstelle empfängt POST-Anfragen.
  • verwendenrequest.get_json()Rufen Sie die JSON-Daten in der HTTP-Anfrage ab.
  • Führen Sie eine Datenverarbeitung durch, z. B. Datenüberprüfung, Formatkonvertierung usw.
  • verwendenInfluxDBClientStellen Sie eine Verbindung zur InfluxDB-Datenbank her und schreiben Sie Daten in die Datenbank.
  • Geben Sie eine Antwort im JSON-Format zurück, um den Client darüber zu informieren, dass der Datenempfang erfolgreich war.

2. MQTT-Nachrichtenverarbeitung (Python)

  1. # 导入必要的库
  2. import paho.mqtt.client as mqtt
  3. from influxdb import InfluxDBClient
  4. import json
  5. # MQTT Broker 配置
  6. MQTT_BROKER = "localhost"
  7. MQTT_PORT = 1883
  8. MQTT_TOPIC = "sensor/data"
  9. # InfluxDB 配置
  10. INFLUXDB_HOST = "localhost"
  11. INFLUXDB_PORT = 8086
  12. INFLUXDB_USER = "user"
  13. INFLUXDB_PASSWORD = "password"
  14. INFLUXDB_DATABASE = "iot_data"
  15. # 创建 InfluxDB 客户端
  16. influxdb_client = InfluxDBClient(
  17. host=INFLUXDB_HOST,
  18. port=INFLUXDB_PORT,
  19. username=INFLUXDB_USER,
  20. password=INFLUXDB_PASSWORD,
  21. database=INFLUXDB_DATABASE
  22. )
  23. # 连接到 MQTT Broker
  24. def on_connect(client, userdata, flags, rc):
  25. print("Connected to MQTT Broker with result code " + str(rc))
  26. client.subscribe(MQTT_TOPIC)
  27. # 接收 MQTT 消息
  28. def on_message(client, userdata, msg):
  29. # 解析数据
  30. data = json.loads(msg.payload.decode())
  31. # 构建 InfluxDB 数据点
  32. influxdb_data = [
  33. {
  34. "measurement": "sensor_data",
  35. "tags": {
  36. "sensor_id": data.get("sensor_id"),
  37. },
  38. "fields": {
  39. "temperature": data.get("temperature"),
  40. "humidity": data.get("humidity"),
  41. }
  42. }
  43. ]
  44. # 写入 InfluxDB
  45. influxdb_client.write_points(influxdb_data)
  46. print("Data written to InfluxDB: " + str(influxdb_data))
  47. # 创建 MQTT 客户端
  48. mqtt_client = mqtt.Client()
  49. mqtt_client.on_connect = on_connect
  50. mqtt_client.on_message = on_message
  51. mqtt_client.connect(MQTT_BROKER, MQTT_PORT, 60)
  52. # 启动 MQTT 客户端
  53. mqtt_client.loop_start()
  54. # 保持程序运行
  55. while True:
  56. pass

Codebeschreibung:

  • verwendenpaho.mqtt.clientStellen Sie eine Verbindung zum MQTT-Broker her und abonnieren Sie das angegebene Thema.
  • Wenn eine MQTT-Nachricht empfangen wird, verwenden Siejson.loads()Analysieren Sie den Nachrichteninhalt.
  • Erstellen Sie die analysierten Daten im InfluxDB-Datenpunktformat.
  • verwendeninfluxdb_client.write_points()Schreiben Sie Daten in die InfluxDB-Datenbank.

3. Datenvisualisierung (Grafana)

  • Installieren Sie Grafana und konfigurieren Sie die Datenquelle für die Verbindung mit der InfluxDB-Datenbank.
  • Erstellen Sie Dashboards und fügen Sie dem Dashboard Diagramme hinzu, z. B. Liniendiagramme, Balkendiagramme usw.
  • Konfigurieren Sie die Datenquelle des Diagramms als InfluxDB und schreiben Sie Abfrageanweisungen, um Daten von InfluxDB abzurufen.
  • Konfigurieren Sie den Stil, den Titel, die Achse und andere Attribute des Diagramms nach Bedarf, um die Datenanzeige intuitiver und verständlicher zu gestalten.

Beispiel einer Grafana-Abfrageanweisung:

SELECT "temperature", "humidity" FROM "sensor_data" WHERE time > now() - 1h

Die Abfrage beginnt mitsensor_dataFragen Sie die Temperatur- und Luftfeuchtigkeitsdaten der letzten Messstunde ab.

Dieses Projekt kombiniert Tools wie Flask, EMQX, InfluxDB und Grafana, um eine IoT-Cloud-Plattform zu erstellen, die MQTT- und HTTP-Protokolle unterstützt und die Datenerfassung, -speicherung und -visualisierung realisiert. Die Plattform kann flexibel erweitert werden, um mehr Gerätetypen und Protokollzugriffe zu unterstützen, und ihre Funktionen können an die tatsächlichen Bedürfnisse angepasst werden.

Beachten:

  • Der obige Code dient nur als Referenz und muss entsprechend den spezifischen Anforderungen in tatsächlichen Anwendungen geändert werden.
  • Bitte stellen Sie sicher, dass alle abhängigen Bibliotheken installiert sind, z.B.paho-mqttinfluxdbflaskWarten.
  • Bei der tatsächlichen Bereitstellung müssen Faktoren wie Datensicherheit und Systemstabilität berücksichtigt werden.

Wenn Sie konkreten Code und Ideen wünschen, können Sie mir eine private Nachricht senden! ! !