前回の記事では、PLCnext Control デバイスから Azure IoT Hub へデータを送り、実際にクラウドへ届いている様子を確認しました。
実際の運用では多数のエッジデバイスから小さいデータが大量かつ並列にクラウドへ送られてくることが想定されますが、そのようなデータを効率的に保存・参照するにはデータベースの利用が最適です。
Azure では、特別な追加処理の開発を必要とせずに設定だけで受信データをデータベースへ保存することができます。
この記事では、デバイスから IoT Hub へ送られてきたデータを自動的に Cosmos DB へ保存する方法を紹介します。
手順概要
左の図のように、PLCnext Control からクラウドへデータを送信し、クラウド上で処理を行う前準備としてデータをデータベースへ保存することを考えます。
Azure では、IoT Hub サービス と Cosmos DB サービスのアカウントを作成し、IoT Hub サービスが持つメッセージルーティング機能を設定して IoT Hub 内のデバイスから Cosmos DB 内のコンテナへデータを直接転送することでこの目的を実現することができます。
- Cosmos DB サービスの準備
- IoT Hub のメッセージルーティングの設定
Cosmos DB サービスの準備
Cosmos DB アカウントの作成
まず Azure のポータルサイトへログインし、Cosmos DB アカウントを作成します。
アカウント作成時の「サブスクリプション」「リソースグループ」「場所」は、IoT Hub 作成時の内容と合わせて下さい。
参考リンク:PLCnext コントローラ-クラウド間データ転送実験の準備:Azure IoT Hubの設定
続いて、データベースのコンテナを作成します。
コンテナーの作成
デフォルト設定通りに Items というコンテナーを作成します。
これでコンテナーの作成は完了です。作成したコンテナーは以下の様に確認できます。
まだデータが入っていないのでデータ表示用のエリアは空になっていますが、次のセクションでメッセージルーティング設定を行うと、IoT Hub で受信したデータがここに反映されるようになります。
IoT Hub のメッセージルーティングの設定
Azure ポータルで IoT Hub のページを開き、メッセージルーティング用ルートの追加を行います。
以上でメッセージルーティングの設定は完了です。
動作確認
前回の記事で作成した Python コードを実行して PLCnext Control (デバイス) から Azure へデータを送信し、Azure ポータルのサイト上で Cosmos DB にデータが保存されていく様子をモニタしてみましょう。
Cosmos DB データエクスプローラを開く
Azure ポータルの Cosmos DB データエクスプローラのサイトをブラウザで開いてください。
デバイスから Azure IoT Hub へデータを送信
手持ちのデバイスから Azure IoT Hub へ JSON 形式のデータを MQTT で送信します。
前回の記事「Azure連携(2):デバイスからIoT HubへのMQTT送信(Python)」で作成した Python コードを実行して下さい。
受信データのモニタリング
データエクスプローラでデータベース上に新しい項目が追加されていくことを確認しましょう。
デフォルトではデータは古い順から格納されており、新着データを確認するには少々不便です。
Filter の SQL 文に項目を加えることで、データをタイムスタンプの新しい順にソートすることが出来ます。
データ 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へ自動保存する手順は以上で完了です。