技術共有

EMQX Flask InfluxDB Grafana に基づくマルチプロトコル IoT クラウド プラットフォームの構築: MQTT/HTTP デバイス アクセスとデータ視覚化プロセス (コード例付き)

2024-07-12

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

まとめ:この記事では、モノのインターネット、クラウド プラットフォーム、MQTT、HTTP、データ視覚化などの中心的な概念をシンプルかつわかりやすい方法で紹介し、EMQX、Flask、InfluxDB、Grafana などの主流ツールを組み合わせて説明します。複数のプロトコルをサポートするモノのインターネットのクラウド プラットフォームを構築する方法を段階的に説明します。この記事は明確な構造、画像、テキストを備えており、コードは有益で理解しやすいものであり、読者が IoT クラウド プラットフォームを構築するためのコア テクノロジをすぐに習得できるように設計されています。

キーワード:IoT、クラウド プラットフォーム、MQTT、HTTP、データ視覚化、EMQX、Flask、InfluxDB、Grafana


1. モノのインターネットに関する基礎知識

1.1 モノのインターネットの概要

モノのインターネット (IoT、モノのインターネット) とは、さまざまな情報センサー、無線周波数識別技術、全地球測位システムなどを介して監視、接続、対話する必要があるオブジェクトまたはプロセスのリアルタイムの収集を指します。モノとモノの間、モノとヒトの間のユビキタスなコミュニケーションを実現することで、アイテムとプロセスのインテリジェントな認識、識別、管理を実現できます。

1.2 IoT アーキテクチャ

IoT システム アーキテクチャは通常、次の 3 つの層に分かれています。

  • 知覚層:各種センサー、RFIDタグ、GPSモジュールなどのデータ収集を担当します。
  • ネットワーク層:WiFi、Bluetooth、Zigbee、NB-IoTなどのさまざまなネットワークプロトコル、通信技術などのデータ伝送を担当します。
  • アプリケーション層:データ分析、リモート制御、インテリジェントな意思決定などのデータ処理とアプリケーションのプレゼンテーションを担当します。

2. クラウドプラットフォームとデータの可視化

2.1 クラウドプラットフォーム

クラウド プラットフォームとは、インターネット ベースの関連サービスの追加、使用、配信モデルを指し、通常、インターネット上で動的にスケーラブルで仮想化されたリソースの提供が含まれます。 クラウド プラットフォームは、IoT アプリケーションに強力なコンピューティング、ストレージ、ネットワーク リソースを提供し、IoT アプリケーションの開発と展開のコストを削減します。

2.2 データの視覚化

データの視覚化とは、ユーザーがデータをより直観的に理解し、データの背後にあるパターンや傾向についての洞察を得るのに役立つ、グラフィックやチャートなどの視覚的な形式でデータを表示することを指します。

3. 一般的に使用されるプロトコルとツールの紹介

3.1 MQTTプロトコル

MQTT (Message Queuing Telemetry Transport) は、低帯域幅、低電力のデバイスおよびネットワーク向けに設計された軽量のメッセージ パブリッシュ/サブスクライブ プロトコルです。 MQTT はモノのインターネットの分野で広く使用されており、特にリソースに制約のあるデバイスや信頼性の低いネットワーク環境に適しています。

3.2 HTTPプロトコル

HTTP (Hypertext Transfer Protocol) は、Web ブラウザと Web サーバーの間で情報を転送するために使用されるアプリケーション層プロトコルです。 HTTP プロトコルはシンプルで使いやすく、モノのインターネットなどのさまざまなネットワーク アプリケーションで広く使用されています。

3.3 EMQX

EMQX は、数百万の同時接続とメッセージ スループットをサポートする、オープン ソースの高性能かつスケーラブルな MQTT メッセージ サーバーです。

3.4 フラスコ

Flask は、Python で書かれた軽量の Web アプリケーション フレームワークで、学習と使用が簡単で、Web アプリケーションと API インターフェイスを迅速に構築するのに適しています。

3.5 インフルエックスDB

InfluxDB は、時系列データの保存とクエリのために設計されたオープンソースの時系列データベースで、IoT センサー データや監視データなどの保存に適しています。

3.6 グラファナ

Grafana は、複数のデータ ソースを接続して美しく強力なダッシュボードを作成し、リアルタイムでデータを表示できるオープン ソース データ視覚化ツールです。

4. マルチプロトコルIoTクラウドプラットフォームの構築

このプロジェクトでは、MQTT および HTTP プロトコルをサポートする IoT クラウド プラットフォームを構築し、以下の機能を実現します。

  • マルチプロトコルのサポート: MQTT プロトコルと HTTP プロトコルの両方を使用したデバイス アクセスをサポートします。
  • データの収集と保存: さまざまなプロトコル デバイスからデータをリアルタイムで収集し、InfluxDB データベースに保存します。
  • データの視覚化: Grafana を使用して、収集したデータを視覚的に表示します。
4.1 システムアーキテクチャ

 

4.2 コードの実装

1.HTTPサーバー構築(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)

コードの説明:

  • 使用Flaskフレームワークは HTTP サーバーを作成し、以下を定義します/dataインターフェイスは POST リクエストを受け取ります。
  • 使用request.get_json()HTTPリクエストでJSONデータを取得します。
  • データ検証やフォーマット変換などのデータ処理を行います。
  • 使用InfluxDBClientInfluxDB データベースに接続し、データベースにデータを書き込みます。
  • データ受信に成功したことをクライアントに通知するため、JSON形式でレスポンスを返します。

2. MQTTメッセージ処理(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

コードの説明:

  • 使用paho.mqtt.clientMQTT ブローカーに接続し、指定されたトピックをサブスクライブします。
  • MQTT メッセージを受信した場合は、json.loads()メッセージの内容を解析します。
  • 解析されたデータを InfluxDB データ ポイント形式に構築します。
  • 使用influxdb_client.write_points()InfluxDB データベースにデータを書き込みます。

3. データ視覚化 (Grafana)

  • Grafana をインストールし、InfluxDB データベースに接続するようにデータ ソースを構成します。
  • ダッシュボードを作成し、折れ線グラフ、棒グラフなどのグラフをダッシュ​​ボードに追加します。
  • チャートのデータ ソースを InfluxDB として構成し、InfluxDB からデータを取得するクエリ ステートメントを作成します。
  • 必要に応じてグラフのスタイル、タイトル、軸、その他の属性を構成して、データ表示をより直感的で理解しやすくします。

Grafana クエリ ステートメントの例:

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

クエリはから始まりますsensor_data測定中の過去 1 時間の温度と湿度のデータを問い合わせます。

このプロジェクトは、Flask、EMQX、InfluxDB、Grafanaなどのツールを組み合わせて、MQTTおよびHTTPプロトコルをサポートし、データの収集、保存、ビジュアル表示を実現するIoTクラウドプラットフォームを構築します。このプラットフォームは、より多くの種類のデバイスとプロトコル アクセスをサポートするために柔軟に拡張でき、実際のニーズに応じて機能をカスタマイズできます。

知らせ:

  • 上記のコードは参照のみを目的としており、実際のアプリケーションでは特定のニーズに応じて変更する必要があります。
  • すべての依存ライブラリがインストールされていることを確認してください。paho-mqttinfluxdbflask待って。
  • 実際の導入では、データのセキュリティやシステムの安定性などの要素を考慮する必要があります。

特定のコードやアイデアが必要な場合は、私にプライベート メッセージを送ってください。 ! !