Azure IoT Hub と接続する
はじめに
このドキュメントでは、SORACOM Beam (以下、Beam) を使用して、Azure IoT Hub にデータを送信します。当ガイドの前提は以下のとおりです。
- SORACOM のアカウントを作成済みで、SORACOM IoT SIM をお持ちであること
- MQTT を使用できるデバイス (Raspberry Pi + AK-020 / Wio LTE など) をお持ちであること
- Microsoft Azure アカウントをお持ちであること
ステップ 1: Azure IoT Hub を準備する
IoT Hub を作成する
Microsoft Azure Portal から、IoT Hub を開き、"IoT Hub の作成" から IoT Hub を作成します。(既に作成済みのものがある場合には、そちらを利用ください。)
IoT Device を作成する
- IoT Hub の Explores メニューから "IoT Devices" をクリックします。
- "+ New" ボタンから、デバイスを新規作成します。
- Authentication Type は、Symmetric Key を選択します。
認証情報を確認する
認証情報としては、以下のいずれかを使用できます。
デバイスごとにクレデンシャル情報を登録しなくてよいので、デバイス数が多い場合には「共有アクセスポリシーを利用する」をお勧めします。
共有アクセスポリシーを利用する
- IoT Hub の SETTINGS メニューから Shared acess policies を開きます。
- 使用する POLICY を選択します。(デフォルトで作成済みの "device" など)
- Shared access keys の Primary key か Secondary key を使います。(右のボタンをおしてクリップボードにコピーしておくと便利です)
各デバイスごとに発行される認証情報を利用する
デバイスを選択した際に表示される Primary key または Secondary Key を使います (右のボタンをおしてクリップボードにコピーしておくと便利です)。
ステップ 2: SORACOM Beam を有効にして MQTT エントリポイントを設定する
Beam の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作ついて詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
→ の順にクリックします。
以下を入力します。
- 設定名 (任意の文字列)
- 種別から Azure IoT Hub を選択
- ホスト名に、<IoT Hub 名>.azure-devices.net を入力
- オプションの IMSI 付与を ON に
- 認証情報を右の+を押す
認証情報では、以下を入力します。
- 認証情報 ID (任意文字列) を入力
- Shared access key にコピーしておいた Primary key または Secondary key をペースト
- もし共有アクセスポリシーの鍵である場合には、ポリシー名を Access policy name に入力
Azure IoT Hub の認証で「各デバイス毎に発行される認証情報を利用する」を選択した場合は
Access policy name
はブランクです。をクリックして、認証情報が選択されていることを確認します。
をクリックします。
IoT SIM の Beam の設定が完了しました。
ステップ 3: Beam を使用して Azure IoT Hub にデータを送信する
デバイスの準備
当ガイドでは、Mosquitto のクライアントを利用します。Raspbian であれば、下記コマンドでインストール可能です。
sudo apt-get install mosquitto-clients
送信されたデータ確認の準備
送信されたデータは、以下のようなツールを使用して確認します。
- Azure IoT Explore (Azure IoT エクスプローラー)
- Azure IoT extension for Azure CLI (Azure CLI 向けの IoT 拡張機能)
当ガイドでは、Azure IoT extension for Azure CLI を利用します。Azure Cloud Shell での利用も可能です。
下記のコマンドより、デバイスから送信されたメッセージをモニターできます。
$ az iot hub monitor-events -n ${iothub-name} -g ${resource-group}
Starting event monitor, use ctrl-c to stop...
${iothub-name}
には IoT Hub 名を、${resource-group}
にはリソースグループ名を設定してください。デバイスからデータを送信
デバイスからクラウドへデータを送信します。
デバイスからのデータは、devices/<デバイスID>/messages/events/
というトピックに Publish する必要があります。また、MQTT のクライアント ID として、作成した device の、deviceId を指定する必要があります (-i オプション)。
pi@raspberrypi: ~$ deviceId=myDevice
pi@raspberrypi: ~$ mosquitto_pub -d -h beam.soracom.io -i $deviceId -t "devices/$deviceId/messages/events/" -m "Hello from SORACOM Beam!" -V mqttv311
Client myDevice sending CONNECT
Client myDevice received CONNACK
Client myDevice sending PUBLISH (d0, q0, r0, m1, 'devices/myDevice/messages/events/', ... (24 bytes))
Client myDevice sending DISCONNECT
Azure IoT extension for Azure CLI 側で以下のように表示されることが確認できます。
{
"event": {
"origin": "myDevice",
"module": "",
"interface": "",
"component": "",
"properties": {
"application": {
"imsi": "44010XXXXXXXXXX"
}
},
"payload": "Hello from SORACOM Beam!"
}
}
なお、今回は Beam の設定で、「IMSI 付与」を ON としたので、プロパティとして、IMSI (IoT SIM の固有番号) も一緒に送信されているのを確認できます。
ステップ 4: Azure IoT Hub からのデータを受信する
次に、クラウドからデバイスへデータを送信します。
クラウドからのデータは、devices/デバイスID/messages/devicebound/#
というトピックに Subscribe する必要があります。また、MQTT のクライアント ID として、作成した device の、deviceId を指定する必要があります (-i オプション)。
pi@raspberrypi: ~$ mosquitto_sub -d -h beam.soracom.io -i $deviceId -t "devices/$deviceId/messages/devicebound/#" -V mqttv311
Client myDevice sending CONNECT
Client myDevice received CONNACK
Client myDevice sending SUBSCRIBE (Mid: 1, Topic: devices/myDevice/messages/devicebound/#, QoS: 0)
Client myDevice received SUBACK
Subscribed (mid: 1): 0
この状態で、Azure Portal のデバイス画面から、"Message To Device"をクリックし、メッセージ送信画面からデータを送信してみましょう。
デバイスの方にメッセージが届き、下記のように表示されます。
Client myDevice received PUBLISH (d0, q0, r0, m0, 'devices/myDevice/messages/devicebound/%24.to=%2Fdevices%2FmyDevice%2Fmessages%2FdeviceBound', ... (24 bytes))
Hello from Azure Portal!