Webinar
Unifying Data from Vehicle to Cloud | Register Now →

Node-REDでMQTT使用ガイド

Shifan Yu
Jun 12, 2024
Node-REDでMQTT使用ガイド

Node-REDとは?

Node-REDは、ハードウェアデバイス、API、オンラインサービスをつなぐためのプログラミングツールです。さまざまなノードを使ってフローを作成できるブラウザベースのエディタを提供しています。フローは1クリックでランタイムにデプロイできます。

Node-REDは、データ入力用の mqtt-in ノードとデータ出力用の mqtt-out ノードでMQTTプロトコルをサポートしています。

Node-REDの主な特長:

  • フローベースのプログラミング: ノードを視覚的に配線することでアプリケーションを作成できます。
  • 幅広いノード: 様々な入力、出力、処理タスク用のノードが含まれています。
  • メッセージパッシング: ノードはワイヤに沿ってメッセージを渡すことで通信します。
  • ブラウザベースのエディタ: フローの構築とデプロイに使いやすいインターフェイスです。
  • 拡張性: カスタムノードを作成して機能を拡張できます。
  • ソーシャル開発: JSONベースのフローにより、オンラインフローライブラリを通じて簡単にインポート、エクスポート、共有できます。

MQTTとは?

MQTT (Message Queuing Telemetry Transport) は、リソース制約のあるデバイスや低帯域、高遅延、または信頼性の低いネットワークのための、パブリッシュ・サブスクライブ型の軽量メッセージングプロトコルです。IoT(モノのインターネット)アプリケーションで広く使用されており、センサー、アクチュエータ、その他のデバイス間の効率的な通信を提供します。

MQTTを使用するには、中央のブローカーが必要です。例えば、EMQXは、確実なメッセージ配信とシステムの効率的なスケーリングを保証する機能を持つブローカーとして考えられます。

MQTT PUB SUB

Node-REDでMQTTを使う理由

MQTTとNode-REDを組み合わせることで、特にIoTやリアルタイムデータ処理などの様々なアプリケーションに強力なソリューションを提供します。その理由は以下の通りです。

  1. 効率的なデータ処理: Node-REDはMQTTメッセージをリアルタイムで処理するため、センサーデータなどの入力に即座に対応できます。
  2. 使いやすさ: Node-REDの視覚的なプログラミングインターフェースにより、高度なコーディング知識がなくても複雑なワークフローの作成とデプロイが容易になります。
  3. IoTに最適化: Node-REDの柔軟性と幅広いノードライブラリにより、様々なIoTデバイスとのシームレスな接続とデータ処理が可能です。MQTTは、Quality of Service (QoS) レベル、保持メッセージlast will (LWT)などの機能を使って、低帯域、高遅延、または信頼性の低いネットワークでの効率的な通信を保証します。
  4. 汎用性: Node-REDはIoTに限定されません。ホームオートメーション、産業オートメーション、データ可視化、クラウドサービスとの統合などにも役立ちます。
  5. スケーラビリティ: Node-REDとMQTTは、多数のデバイスと大量のデータを効率的に処理し、スケーラブルなソリューションをサポートします。

Node-REDの視覚的なフローベースの開発環境とMQTTの堅牢な機能と軽量性を組み合わせることで、様々な領域でスケーラブルで信頼性が高く効率的なアプリケーションを迅速に構築できます。

Node-REDのインストール

Node-REDは、PCやRaspberry Piなどのデバイス、クラウドサーバーにインストールでき、素早くインストールして使用できます。インストールの一般的な方法は2つあります。

npm を使ってグローバルにインストールする:

npm install -g --unsafe-perm node-red

Docker を使ってインストールする:

docker run -it -p 1880:1880 --name mynodered nodered/node-red

Node-REDの環境起動

npmでグローバルインストールした場合、インストールが成功したとプロンプトが表示されたら、node-redコマンドをグローバルに実行するだけで、すぐにNode-REDを起動できます。

DockerでもnpmでもNode-REDの起動に成功すると、ブラウザを開いて現在のアドレスに1880ポート番号を加えるだけで、Node-REDのブラウザエディタページを開くことができます。例えばローカルで実行している場合は、ブラウザを開いて http://127.0.0.1:1880 と入力します。次の図のようなページが表示されたら、Node-REDが正常に起動したことを意味します。

Node-RED

Node-REDでのMQTTの使用

このガイドでは、EMQが提供するEMQX プラットフォームで構築された無料の公開MQTTブローカーを利用します。サーバーのアクセス詳細は以下の通りです。

  • Broker: broker.emqx.io
  • TCP Port: 1883
  • SSL/TLS Port: 8883
  • WebSocket Port: 8083
  • SSL/TLS Port: 8883
  • Secure WebSocket Port: 8084

この記事では、Node-REDでのMQTTを2つのパートで紹介します。基本的なパートではMQTTノードの設定とMQTTブローカーへの接続を、応用的なパートではデータ処理に焦点を当てています。

基本パート: MQTTノードの設定とMQTTブローカーへの接続

まず、ブラウザで http://host:1880 を開き、デフォルトの Flow 1 を作成します。次に、以下の手順を実行します。

1. サブスクリプションノードの設定: Message In

1.1. MQTT-inノードの追加: パレットから mqtt-in ノードを中央のキャンバスにドラッグし、ダブルクリックして設定ページを開きます。

1.2. MQTTブローカーの設定: "Server" フィールドの横にある編集ボタンをクリックして新しいMQTTブローカーを追加し、ブローカーのアドレス broker.emqx.io やその他の接続詳細を入力し、Addをクリックしてブローカーの設定を保存します。

Configure MQTT Broker

1.3. トピックのサブスクライブ: サブスクライブするトピックを入力します(例: test/node_red/in)。希望のQoSレベルを選択し、Doneをクリックしてノードの設定を保存します。

Subscribe to a Topic

2. パブリッシュノードの設定: Message Out

2.1. MQTT-outノードの追加: mqtt-out ノードを中央のキャンバスにドラッグし、ノードをダブルクリックして設定ページを開きます。

2.2. MQTTブローカーの設定: 前に設定したMQTTブローカーが選択されていることを確認します。

2.3. トピックへのパブリッシュ: パブリッシュするトピックを入力します(例: test/node_red/out)。希望のQoSレベルを選択し、メッセージを保持するかどうかを設定し、Doneをクリックしてノードの設定を保存します。

Publish to a Topic

3. デプロイとテスト

3.1. ノードの接続: キャンバス上で mqtt-in ノードを mqtt-out ノードに接続し、右上のDeployボタンをクリックしてフローをデプロイします。

Connect Nodes

3.2. 接続の確認: デプロイ後、各ノードの下に "connected" というステータスが表示され、MQTTブローカーへの接続が成功したことを示します。

3.3. MQTTXクライアントでのテスト: MQTTXMQTTクライアントとして使用してセットアップをテストします。test/node_red/inトピックにメッセージをパブリッシュし、test/node_red/outトピックをサブスクライブして、メッセージが受信されることを確認します。

Test with MQTTX Client

以上の手順で、Node-REDでMQTTノードを設定し、メッセージの受信と送信を処理できるようになりました。次に、受信データの処理についてのより高度なチュートリアルに進みます。

応用パート: MQTTデータの処理

1. データアクセス

1.1. JSONノードの追加: JSONノードをキャンバスにドラッグ&ドロップし、ダブルクリックして設定ページを開きます。

1.2. JSON変換の設定: アクションを "Always Convert to JavaScript Object" に設定し、受信メッセージがJSON形式に変換されるようにします。

1.3. ノードの接続: JSONノードを mqtt-in ノードに接続します。

Connect Nodes

2. データフィルタリング

2.1. フィルターノードの追加: フィルターノードをキャンバスにドラッグ&ドロップし、ダブルクリックして設定ページを開きます。

2.2. フィルターのルール設定: モードを "block unless value changes" に設定し、プロパティを msg.payload.temperature に設定して、温度値に基づいてメッセージをフィルタリングします。

2.3. ノードの接続: フィルターノードをJSONノードに接続します。

Connect the filter node to the JSON node

3. テンプレートの使用

3.1. テンプレートノードの追加: テンプレートノードをキャンバスにドラッグ&ドロップし、ダブルクリックして設定ページを開きます。

3.2. テンプレートの設定: テンプレートの内容を入力し、フィルタリングされたデータをフォーマットします。

3.3. オプションのステップ: 直接出力する場合は、テンプレートノードを追加せずにスキップできます。

Optional Step

4. 処理したデータの送信

4.1. MQTT-outノードの追加: mqtt-out ノードをキャンバスにドラッグ&ドロップし、ダブルクリックして設定ページを開きます。

4.2. MQTTブローカーの設定: 前に設定したMQTTブローカーが選択されていることを確認します。

4.3. トピックの設定: 処理したデータをパブリッシュするトピックを入力します(例: test/node_red/out)。希望のQoSレベルを選択します。

4.4. ノードの接続: MQTT-outノードをテンプレートノードに接続します。

Connect the MQTT-out node to the template node

5. デプロイとテスト

5.1. フローのデプロイ: 右上のDeployボタンをクリックしてフローをデプロイします。

5.2. MQTTXクライアントでのテスト:

  • test/node_red/in トピックにメッセージをパブリッシュし、Node-REDがデータを受信できるようにします。
  • test/node_red/out トピックをサブスクライブし、設定したテンプレートに従って処理されたメッセージが受信されることを確認します。
  • Node-REDのフィルタリングロジックを検証し、同じメッセージを複数回送信しても受信されないことを確認します。温度値が変更された場合は、変更を示す新しいメッセージを受信するはずです。

Test with MQTTX Client

以上の手順で、Node-REDでMQTTデータを処理・フィルタリングし、処理したデータをMQTTで送信するように設定できました。

まとめ

これで、Node-REDを使ってMQTTクラウドサービスとのインストールと接続、MQTTメッセージデータのフィルタリングと処理、最終的に処理したデータメッセージの送信までの一連の流れが完了しました。Node-REDのUIを使って一般的なビジネスロジックを記述することで、非専門の開発者でも取り組みやすい敷居の低さを実現しています。ユーザーは、視覚的なツールを使って単純なノードをつなぐだけで、複雑な実行タスクを素早く作成できます。これは、特にIoTアプリケーションのシナリオに役立ちます。

次に、EMQが提供するThe Easy-to-understand Guide to MQTT Protocolシリーズの記事をチェックして、MQTTプロトコルの機能について学び、MQTTのより高度な応用例を探り、MQTTアプリケーションとサービス開発を始めることができます。

専門家と話します
お問い合わせ →