※注意事項※
このブログは2021年7月26日時点のものです。Microsoft Azureの環境を構築する手順の一例としてご紹介しており、設定や手順等を推奨するものではありません。
また、仕様等が変更されていたとしても、弊社ではお問い合わせには対応できかねますので、ご了承願います。
詳しい手順や説明等は、公式のドキュメントをご参照願います。
Cactusphere RS485 モデルに下記の温湿度センサーを接続し取得した温度・湿度を Azure IoT Hub に送信、 Azure SQL Database のテーブルに格納してみました。
・Prament RS485 RTU 温度・湿度トランスミッタ温度センサ XY-MD02
Azure SQL Database は Azure SQL (SQLクラウドデータベース)ファミリの一つであり、フルマネージド・スケーラブルなリレーショナルデータベースです。Azure SQL Database に蓄積したデータはWebアプリケーションで可視化したり、機械学習のモデル作成に用いることができます。
システムの構成
今回ご案内する手順は、以下の方を対象としております。
①MSアカウント作成済であること ②Azureアカウント作成済であること ③Cactusphereソフトウェアマニュアルのチュートリアルを既に実行済みであること
事前準備
1. ハードウェア接続・設定
1-1. Cactusphere DIPスイッチ設定
Cactusphere 100シリーズ ハードウェアマニュアル を参考に、Cactusphere の DIPスイッチ設定を行ってください。
今回は半二重(1,2ピン)、また終端抵抗をONに設定します(4ピン)。
1-2. Cactusphere と 温湿度センサー間の信号線接続
CactusphereRS485モデルを使ってアプリケーションを構築してみました(温湿度編) を参考に Cactusphere と温湿度センサーを信号線を接続してください。なお、こちらの記事で紹介している温湿度センサーと、本記事で使用している温湿度センサーは別の製品となります。ご注意ください。
詳細についてはCactusphere 100シリーズ ハードウェアマニュアル を参照してください。
2. Azure IoT Hub への接続
Cactusphere接点入力モデルをAzure IoT Hubに接続してみました を参考に、「②起動時に送信するデバイス情報の確認」までの手順を行い、Azure IoT Hub に接続してください。
ただし、「2. アプリケーションマニフェストの修正」に記載している内容はその後のアップデートで変更されているため、下記の通り置き換えてください。
"CmdArgs": [ "--ConnectionType", "DPS", "--ScopeID", "<DPSのスコープID>" ], "AllowedConnections": [ "global.azure-devices-provisioning.net", "<DPSリンク設定済み Azure IoT HubのURL>" ], "DeviceAuthentication":"Azure Sphere テナントID",
なお、本記事では Azure IoT Hub インスタンス名を cactusphere-iothub-atmark としています。
3. Azure SQL Database の設定
3-1. 単一データベースを作成
クイック スタート:Azure SQL Database の単一データベースを作成する を参考に、Azure SQL Database に単一データベースを作成してください。なお、手順中でファイアウォールの設定を行いますが、「Azure サービスおよびリソースにこのサーバー グループへのアクセスを許可する」については「はい」を設定してください。また、「追加設定」セクションの「データソース」は「なし」のままで問題ありません。
3-2. サーバーレベルのファイアウォール規則を作成
ファイアウォール設定については、データベース作成時に設定しています。
設定内容確認方法は クイック スタート:Azure Portal でサーバーレベルのファイアウォール規則を作成する を参照してください。
3-3. データ格納先テーブルを作成
データ格納先のテーブル CactusphereRS485Envsensor を作成します。
カラム名 | 概要 |
---|---|
Temperature | 温度 |
Humidity | 湿度 |
DeviceID | デバイスID |
EnqueuedUtcTime | Azure IoT Hubでイベントを受信した時間 |
Azure SQL Database メニューからクエリエディターを起動し、下記のクエリを入力、実行してください。
CREATE TABLE dbo.CactusphereRS485Envsensor ( Temperature FLOAT NULL, Humidity FLOAT NULL, DeviceID NVARCHAR(150) NOT NULL, EnqueuedUtcTime DATETIME NOT NULL )
メッセージに「クエリが成功しました: Affected rows: 0」と表示されたら作成成功です。
テーブルリストの中に dbo.CactusphereRS485Envsensor テーブルが追加されています。
手順
1. Cactusphere通信設定
Azure IoT Hub の 「IoTデバイス」 画面で使用している Cactusphere のデバイスIDを選択し、「デバイスツイン」から Modbus RTU の 通信設定を行います。デバイスツインの設定方法についてはCactusphere接点入力モデルをAzure IoT Hubに接続してみました を参考にしてください。
今回は10秒おきに Data1 で温度・ Data2 で湿度を取得するため、デバイスツインの Desired properties セクションを以下のように設定しています。
(省略) "desired": { "ModbusDevConfig": "{\"ModbusDevConfig\":{\"01\":{\"baudrate\":9600,\"parity\":\"None\",\"stop\":1}}}", "ModbusTelemetryConfig": "{\"ModbusTelemetryConfig\":{\"Data1\":{\"devID\" : \"01\",\"registerAddr\":\"0001\",\"registerCount\":\"1\",\"funcCode\":\"04\",\"interval\":\"10\",\"devider\" : 10,\"asFloat\":true},\"Data2\":{\"devID\":\"01\",\"registerAddr\":\"0002\",\"registerCount\":\"1\",\"funcCode\":\"04\",\"interval\":\"10\",\"devider\":10,\"asFloat\":true}}}", (省略)
2. Stream Analytics ジョブ作成・実行
Azure Stream Analytics 統合を使用して Azure SQL Database にデータをストリーム配信する (プレビュー) の記述を参考に、Azure IoT Hub が受信したデータを Azure SQL Database のテーブルにデータをストアする Stream Analytics ジョブを作成・実行していきます。なお、この機能については現在 Preview となります。
以降の作業はCactusphereからAzure IoT Hubにデータを送信している状態で行ってください。
2-1.ジョブ作成
Stream Analytics ジョブを作成します。
入力・出力設定
入力
入力の種類はIoT Hubを選択、イベントハブ名ではCactusphereが接続するIoT Hubインスタンスを選択、エンドポイントは「メッセージング」を選択してください。
出力
データベースとサーバーについては、現在作業中のデータベース名とサーバー名が自動的に登録されています。
テーブルは「既存のものを使用」を選択し、作成したテーブル CactusphereRS485Envsensor を指定してください。
なお、「新規作成」を選択するとジョブ実行時にテーブルを自動作成することができます。
クエリ作成・テスト実行
設定が完了すると、クエリエディタが表示されます。
「入力のプレビュー」には Azure IoT Hubから受信したデータのスナップショットが表示されます。
クエリはジョブ作成時に入力した内容がINTO句やFROM句に自動的に適用されています。
SELECT句に指定されている「*」を下記の内容に置き換えてください。
Data1 AS [Temperature], Data2 AS [Humidity], IoTHub.ConnectionDeviceId AS [DeviceID], EventEnqueuedUtcTime AS [EnqueuedUtcTime]
クエリが下記の内容になっていることを確認し、「クエリのテスト」を実行してください。
SELECT Data1 AS [Temperature], Data2 AS [Humidity], IoTHub.ConnectionDeviceId AS [DeviceID], EventEnqueuedUtcTime AS [EnqueuedUtcTime] INTO [CactusphereRS485Envsensor] FROM [<IoT Hub名>]
クエリの結果が「テスト結果」に表示されます。
テスト結果が問題無い場合、「クエリの保存」を実行してください。
2-2.ジョブ実行
クエリの保存が完了すると、ジョブを実行できるようになります。
「Stream Analytics ジョブの開始」を実行し、ジョブを開始してください。
3.確認
ジョブを開始すると、実行中のジョブが一覧に表示されます。
「出力テーブルのプレビュー」では、クエリエディターでテーブルをプレビューすることができます。
正常に動作している場合、クエリに下記を入力して実行すると、Cactusphereから送信した温度・湿度のデータがデータベースに格納されていることがわかります。
SELECT TOP (25) * FROM [CactusphereRS485Envsensor] ORDER by EnqueuedUtcTime DESC
ジョブを停止する場合は、「Stream Analyticsで開く」を選択しジョブを停止してください。