Node-RED、EMQX、QuestDB、DuckDB、Grafana、PowerBIを用いたエンドツーエンドのIoTデータパイプライン構築

# 

![Node-RED、EMQX、QuestDB、DuckDB、Grafana、PowerBIを用いたエンドツーエンドのIoTデータパイプライン構築](https://assets.emqx.com/images/fa91a3b9b257864bbe08cbdf9d64b11a.jpg?x-image-process=image%2Fresize,w_3040,h_1368%2Fformat,webp)

*このゲストブログはEMQXコミュニティによって提供されました。*

## **はじめに**

インターネット・オブ・シングズ（IoT）の台頭により、物理デバイスからのデータの収集、保存、分析、可視化の方法が劇的に変革されました。スマートファクトリーからリアルタイムの健康モニタリングに至るまで、さまざまなアプリケーションでIoTが採用される中で、膨大なデバイス接続性と増加するデータフローを効率的に処理するためのセキュアでスケーラブルなソリューションが重要な課題となっています。本ブログでは、複数の先端技術を活用して、産業デバイスからデータを取り込み、エッジで処理し、効率的に保存し、分析を可視化する完全なデータパイプラインを構築する実際のIoTプロジェクトの実装について詳述します。

## **システムアーキテクチャの概要**

![システムアーキテクチャ](https://assets.emqx.com/images/451b2e1e01e5dbbc4370f62f3ea77124.png?x-image-process=image/resize,w_1520/format,webp)

このプロジェクトでは、データが産業デバイスからOPC-UAを介してリアルタイムシステムに流れる相互接続されたアーキテクチャを採用しています。以下に、使用されているコンポーネントとその役割をステップバイステップで説明します：

1. **Node-REDによるOPC-UA統合**：Node-REDはデータ抽出レイヤーとして機能し、OPC-UAサーバー（産業オートメーション用の機械間通信プロトコル）からセンサーデータを取得します。ローコード環境でIoTワークフローを構築でき、広範なコーディングを必要とせずにデバイスの統合を簡素化します。
2. **EMQX MQTTブローカーによるデータ転送**：OPC-UAから抽出されたセンサーデータは、MQTT（メッセージキューイング・テレメトリー・トランスポート）を使用してMQTTブローカーに送信されます。MQTTは、低帯域幅や高遅延、不安定なネットワーク環境に最適化された軽量プロトコルです。高いスケーラビリティと分散性を持つEMQXブローカーは、複数のセンサーからのデータを効率的かつ信頼性高く伝送することを保証します。
3. **PythonによるMQTTクライアントとデータ処理**：PythonプログラムはMQTTクライアントとして機能し、MQTTブローカーのトピックにサブスクライブしてリアルタイムのセンサーデータを読み取ります。このプログラムは、未処理データの読み取り、初期変換を行い、歴史的な保存およびさらなる分析のためにQuestDBにデータを保存する処理層として機能します。
4. **QuestDBによる時系列データの保存**：QuestDBはセンサーデータを保存するために使用されるデータベースです。これはリアルタイムの、時間が重要なデータを処理するために特化した高性能な時系列データベースです。QuestDBのリアルタイム性は、IoTデータを効率的に保存し、低遅延でクエリを実行できるため、リアルタイムダッシュボードに最適です。
5. **Grafanaによるリアルタイム可視化**：GrafanaはQuestDBに接続し、リアルタイムのセンサーデータを直感的でリアルタイムなビジュアルダッシュボードに表示します。これにより、ステークホルダーはデバイスの状態を継続的に監視し、トレンドを観察し、パフォーマンス指標を追跡できます。
6. **エッジアナリティクスによるオンサイトインテリジェンス**：このプロジェクトの大部分はエッジアナリティクスに関与しており、Pythonプログラムがデータソースに近い場所でリアルタイム分析を実行します。エッジでデータを分析することで、すべての生データをクラウドに送信する必要が減少し、レイテンシが低減し、即時のインサイト（異常検知や故障予測など）を確保できます。
7. **DuckDBによる集約ストレージ**：アナリティクスパイプラインの一部として、集約および処理されたデータがDuckDBに保存されます。DuckDBは高速で埋め込み可能なSQLデータベースであり、分析用に設計されています。DuckDBは大規模な構造化アナリティクスワークロードを処理するのに優れており、エッジで処理された結果を保存する軽量なソリューションを提供します。
8. **PowerBIによるビジネスインテリジェンス**：最後に、DuckDBからの集約データがPowerBIを使用して可視化されます。Grafanaがリアルタイムの運用監視に焦点を当てる一方で、PowerBIは月次のパフォーマンストレンド、デバイス使用パターンなどのビジネスレベルのインサイトを提供します。DuckDBに接続することで、PowerBIは意思決定者に対して詳細でインタラクティブなダッシュボードやレポートを作成します。

## **コンポーネントの詳細説明**

### **Node-REDとOPC-UAの統合**

Node-REDは、IoTデバイスの統合プロセスを簡素化するオープンソースのフローベース開発ツールです。ユーザーは、デバイス、API、サービスを表すさまざまなノードを接続するフローをグラフィカルインターフェースで設計できます。

このケースでは、**OPC-UA**は産業オートメーションにおけるデータ交換のための広く使用されている通信プロトコルです。Node-REDのOPC-UAノードを使用することで、産業用機械やセンサーとインターフェースし、貴重な運用データを抽出できます。

抽出されたデータは、次のステップとして**MQTTブローカー（EMQX）**に送信されます。

### **EMQXブローカーによるMQTTの利用**

[**MQTT**](https://www.emqx.com/en/blog/the-easiest-guide-to-getting-started-with-mqtt)は、その効率性からIoTプロジェクトで広く採用されているプロトコルです。特に、帯域幅が制約され、高遅延または信頼性の低いネットワーク環境で最適化されています。プロトコルはパブリッシュ・サブスクライブモデルで動作し、デバイス（パブリッシャー）が特定のトピックにデータを送信し、消費者（サブスクライバー）がこれらのトピックをサブスクライブしてデータを受信します。

このアーキテクチャでは、**EMQX**がMQTTブローカーとして機能し、Node-RED（パブリッシャー）とPythonプログラム（サブスクライバー）の間の通信を処理します。このブローカーは、IoTデバイスからのデータ伝送を安全でスケーラブルかつ迅速に行うことを保証します。

> Node-REDとMQTTの使用に関する包括的なガイドについては、以下を参照してください：[MQTT with Node-RED: A Beginner's Guide with Examples](https://www.emqx.com/en/blog/using-node-red-to-process-mqtt-data)

### **データ処理のためのPython**

PythonクライアントはMQTTトピックにサブスクライブし、MQTTブローカーからストリーミングされるデータを読み取ります。このPythonプログラムの主なタスクは以下の通りです：

- 受信メッセージのパース。
- 初期データ処理（データクレンジング、正規化、変換など）。
- データを**QuestDB**に転送して保存、または即時のエッジアナリティクスを実行。

### **時系列データの保存におけるQuestDB**

**QuestDB**のような時系列データベースは、時間が重要なコンポーネントであるデータの保存に最適化されています。これはIoTセンサーデータに非常に適しており、大量の高頻度データを効率的に保存および高速クエリを実行できます。リアルタイムダッシュボードにおいて、最新のデータポイントに即座にアクセスできるため、データの正確性を確保するために不可欠です。

### **可視化のためのGrafana**

**Grafana**はQuestDBに接続し、直感的でリアルタイムなビジュアルダッシュボードを作成します。これにより、デバイスの健康状態、パフォーマンス指標、センサーの読み取り値をリアルタイムで監視できます。Grafanaの柔軟なクエリと多様な可視化オプションは、リアルタイムのIoTアナリティクスに最適です。

### **エッジアナリティクス**

**エッジアナリティクス**は、データソース（エッジ）に近い場所で分析を実行することを指し、すべてのデータを中央のクラウドやサーバーに送信する必要がなくなります。このアプローチには以下の利点があります：

- **レイテンシの低減**：データをローカルで分析するため、インサイトを即座に生成し、リアルタイムの意思決定を可能にします。
- **帯域幅の最適化**：すべての生データをクラウドに送信するのではなく、価値のある前処理済みまたはフィルタリングされたデータのみを送信することで、ネットワークの混雑を大幅に削減します。
- **セキュリティの強化**：センシティブなデータをローカルで分析することで、必要なデータのみを送信し、露出のリスクを減少させます。

このプロジェクトでは、PythonプログラムがMQTTブローカーから到着したデータを即座にリアルタイムで分析します。エッジアナリティクスの例としては、異常検知（範囲外の値の検出）、シンプルなイベントベースのルール（温度が閾値を超えた場合にアラートをトリガー）、データの要約（時間窓ごとの平均値の計算）などがあります。

### **集約アナリティクスストレージのためのDuckDB**

**DuckDB**は、分析環境に埋め込むことを目的とした高性能な分析用SQLデータベースです。エッジアナリティクスが完了した後、集約されたデータ（例えば、日次平均、トレンド、主要なインサイトなど）がDuckDBに保存されます。

DuckDBは軽量で、複雑なアナリティクスクエリを処理するように設計されており、PowerBIのような包括的なレポーティングツールに送信される前のエッジでの集約IoTデータの処理に最適です。

### **ビジネスインテリジェンスのためのPowerBI**

最後に、**PowerBI**はDuckDBに保存された集約データを可視化するために使用されます。Grafanaがリアルタイムの運用監視に焦点を当てる一方で、PowerBIは以下のようなビジネスレベルのインサイトを提供します：

- 時間を通じた集約トレンド。
- 詳細な使用レポート。
- デバイスや期間ごとのパフォーマンス比較。

PowerBIをDuckDBに接続することで、意思決定者に対して詳細でインタラクティブなダッシュボードやレポートを作成し、リアルタイムおよび歴史的データの両方を分析することで、より深いインサイトと優れた意思決定能力を提供します。

## **まとめ**

このプロジェクトでは、**Node-RED**によるデバイスデータ抽出、**EMQX**をMQTTブローカーとして、**Python**によるデータ処理、**QuestDB**によるリアルタイムデータ保存、**Grafana**による可視化、**DuckDB**によるアナリティクスストレージ、そして**PowerBI**によるビジネスインテリジェンスレポーティングといった複数の技術を統合した効率的なリアルタイムIoTパイプラインを構築しました。

**エッジアナリティクス**の活用により、データ処理がソース近くで行われ、レイテンシが低減し、システムの応答性が向上します。また、**IoTアナリティクス**はリアルタイムおよび歴史的データの両方を分析することで、より深いインサイトと優れた意思決定能力を提供します。このアーキテクチャを活用することで、産業界はIoTワークフローを効率化し、デバイスから強力なインサイトを引き出し、効率とイノベーションを促進することができます。