Azure連携(3):IoT Hub受信データをCosmos DBへ自動保存

<< 前の記事:「Azure連携(2):デバイスからIoT HubへのMQTT送信(Python)」
>> 次の記事:「Azure連携(4):IoT Hub受信データをAzure Functionsで処理(C#)」

この記事は PLCnext Control に限らず一般的なパソコン等にも適用可能です。

前回の記事では、PLCnext Control デバイスから Azure IoT Hub へデータを送り、実際にクラウドへ届いている様子を確認しました。

実際の運用では多数のエッジデバイスから小さいデータが大量かつ並列にクラウドへ送られてくることが想定されますが、そのようなデータを効率的に保存・参照するにはデータベースの利用が最適です。
Azure では、特別な追加処理の開発を必要とせずに設定だけで受信データをデータベースへ保存することができます。

この記事では、デバイスから IoT Hub へ送られてきたデータを自動的に Cosmos DB へ保存する方法を紹介します。

目次

手順概要

データベースの使用イメージ

左の図のように、PLCnext Control からクラウドへデータを送信し、クラウド上で処理を行う前準備としてデータをデータベースへ保存することを考えます。

Azure では、IoT Hub サービス と Cosmos DB サービスのアカウントを作成し、IoT Hub サービスが持つメッセージルーティング機能を設定して IoT Hub 内のデバイスから Cosmos DB 内のコンテナへデータを直接転送することでこの目的を実現することができます。

主な手順
  1. Cosmos DB サービスの準備
  2. IoT Hub のメッセージルーティングの設定
Azureにおける受信データのデータベースへの保存

Cosmos DB サービスの準備

Cosmos DB アカウントの作成

まず Azure のポータルサイトへログインし、Cosmos DB アカウントを作成します。

アカウント作成時の「サブスクリプション」「リソースグループ」「場所」は、IoT Hub 作成時の内容と合わせて下さい。
参考リンク:PLCnext コントローラ-クラウド間データ転送実験の準備:Azure IoT Hubの設定

「場所」を選択するとき、West US と East US しか選択肢に表示されない、といったことが時々あります(原因はわかりません)。その場合は Azure ポータルサイトのホーム画面に一旦戻る等の操作を行い、もう一度 Cosmos DB アカウントの作成手順をやり直してみてください。

続いて、データベースのコンテナを作成します。

コンテナーの作成

デフォルト設定通りに Items というコンテナーを作成します。

これでコンテナーの作成は完了です。作成したコンテナーは以下の様に確認できます。

まだデータが入っていないのでデータ表示用のエリアは空になっていますが、次のセクションでメッセージルーティング設定を行うと、IoT Hub で受信したデータがここに反映されるようになります。

IoT Hub のメッセージルーティングの設定

Azure ポータルで IoT Hub のページを開き、メッセージルーティング用ルートの追加を行います。

以上でメッセージルーティングの設定は完了です。

動作確認

前回の記事で作成した Python コードを実行して PLCnext Control (デバイス) から Azure へデータを送信し、Azure ポータルのサイト上で Cosmos DB にデータが保存されていく様子をモニタしてみましょう。

Python のコードを実行するデバイスは PLCnext Control 以外のものでも構いません。
例:Windows/Linux/macOS パソコン、Python を実行可能な各種マイコンボードなど

Cosmos DB データエクスプローラを開く

Azure ポータルの Cosmos DB データエクスプローラのサイトをブラウザで開いてください。

デバイスから Azure IoT Hub へデータを送信

手持ちのデバイスから Azure IoT Hub へ JSON 形式のデータを MQTT で送信します。
前回の記事「Azure連携(2):デバイスからIoT HubへのMQTT送信(Python)」で作成した Python コードを実行して下さい。

受信データのモニタリング

データエクスプローラでデータベース上に新しい項目が追加されていくことを確認しましょう。

デフォルトではデータは古い順から格納されており、新着データを確認するには少々不便です。
Filter の SQL 文に項目を加えることで、データをタイムスタンプの新しい順にソートすることが出来ます。

データ id の指定と該当データの内容確認方法

データベースに登録されたデータの内容は、以下の様に確認することが出来ます。

データ id の選択 (画面左) とデータ内容の表示 (画面右)

データ id をタイムスタンプの新しい順にソート

Filter を編集して、データを新しい順に並べ替えることが出来ます。

表示の更新

新しい受信データがデータベースに保存されても、画面表示は自動的には切り替わりません。

更新アイコンをクリックして表示を更新したうえで、データの id を選択し直して下さい。

Python を実行しているデバイス側のコンソールには、送信したデータの内容が表示されているので、データエクスプローラに表示されているデータを見比べて見て下さい。

メッセージを送信中: { "DEVICE_NAME": "PHOENIX CONTACT PLCnext Control", "COUNT": 14, "TEMPERATURE": 14.00, "TEMP_WARN_H": 30.00, "TEMP_WARN_L": 15.00, "HUMIDITY": 70.00, "HUM_WARN_H": 60.00, "HUM_WARN_L": 20.00, "POWER": 80.00, "PWR_WARN_H": 50.00, "PWR_WARN_L": 15.00, "VOLTAGE": 100.00, "CURRENT": 0.80, "TIMESTAMP": "2024-08-07 18:08:39" }
メッセージが送信されました

デバイスから Azure へ送信されたデータが、確かに CosmosDB に自動的に保存されていることを確認できます。

IoT Hub受信データをCosmos DBへ自動保存する手順は以上で完了です。

次回は、C# で作成したプログラムを Azure Functions によりクラウド上で実行する方法の詳細を紹介します。

<< 前の記事:「Azure連携(2):デバイスからIoT HubへのMQTT送信(Python)」
>> 次の記事:「Azure連携(4):IoT Hub受信データをAzure Functionsで処理(C#)」

  • URLをコピーしました!
目次