SORACOM Developers

Getting Started

SORACOM Beam を使用して Azure IoT Hub と X.509 証明書で認証した接続をする

はじめに

このドキュメントでは、SORACOM Beam(以下、Beam) を使用して、Azure IoT Hubにデータを送信します。

当ガイドの前提は以下のとおりです。

SORACOM Beam とは

Beam は SORACOM Air の SIM を使用したデバイスからのデータ・アップロード時にクラウド側でデータ処理を行うためのプロキシーサービスです。

Beam概要

Beam を使用することで、以下が可能となります。

ステップ 1: Azure IoT Hub を準備する

IoT Hub を作成する

Microsoft Aure Portal から、IoT Hub を開き、"IoT Hub の作成" から IoT Hub を作成します。(既に作成済みのものがある場合には、そちらを利用ください。)

CA 証明書をアップロード・認証する

上記の詳細な手順については Azure のドキュメント をご参照ください。

IoT Device を作成する

デバイス証明書を作成する

(参考) IoT Hub の作成からデバイス証明書の作成までを Azure CLI と openssl コマンドで実施する手順

# Azure CLI と拡張機能のインストール
curl -L https://aka.ms/InstallAzureCli | bash
az extension add --name azure-cli-iot-ext

# Azure CLI でログイン
az login

# IoT Hub の作成
# リソースグループ名・IoT Hub 名は適宜指定してください
RgName=[リソースグループ名]
HubName=[IoT Hub 名]
az group create --name ${RgName} -l japaneast
az iot hub create -n ${HubName} -g ${RgName} --sku F1

# ルート証明書の作成
# subject は適宜修正してください
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem  -subj "/C=JP/ST=Tokyo/O=TestOrg/OU=TestOu"

# ルート証明書のアップロード
# 証明書名は適宜指定してください
CertName=[証明書名]
az iot hub certificate create --hub-name ${HubName} --name ${CertName} --path ./rootCA.pem -g ${RgName}

# verification code の取得
etag=`az iot hub certificate show -n ${CertName} --hub-name ${HubName} -o tsv --query etag`
VeriCode=`az iot hub certificate generate-verification-code --etag ${etag} --name ${CertName} --hub-name ${HubName} -o tsv --query properties.verificationCode`

# verification code をもとに Verification Certificate (検証証明書) を作成する。
# Common Name を verification code にする。その他の subject は適宜修正してください
openssl genrsa -out verificationCert.key 2048
openssl req -new -key verificationCert.key -out verificationCert.csr -subj "/C=JP/ST=Tokyo/O=TestOrg/OU=TestOu/CN=${VeriCode}"
openssl x509 -req -in verificationCert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out verificationCert.pem -days 500 -sha256

# Verification Certificate (検証証明書) をアップロードする
etag=`az iot hub certificate show -n ${CertName} --hub-name ${HubName} -o tsv --query etag`
az iot hub certificate verify --etag ${etag} --name ${CertName} --path ./verificationCert.pem --hub-name ${HubName}

# 以下のコマンドで True となっていれば Verificate できています。
az iot hub certificate show -n ${CertName} --hub-name ${HubName} --query properties.isVerified

# デバイスの作成
# デバイス名は適宜指定してください
deviceId=[デバイス名]
az iot hub device-identity create --device-id ${deviceId} --hub-name ${HubName} --auth-method x509_ca

# デバイス証明書の作成
openssl genrsa -out deviceCert.key 2048
openssl req -new -key deviceCert.key -out deviceCert.csr -subj "/C=JP/ST=Tokyo/O=TestOrg/OU=TestOu/CN=${deviceId}"
openssl x509 -req -in deviceCert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out deviceCert.pem -days 500 -sha256

ステップ 2: SORACOM Beam を設定する

グループを作成する

SIMを登録した際にグループを作成していない場合には、左上の[MENU]→[SIMグループ]を開き、+追加 から新規のグループを追加します。 SIM一覧画面から SIM を選択し、操作から所属グループ変更で、作成したグループを紐付けます。

グループで Beam を設定する

作成したグループを選択し、グループ詳細画面から[SORACOM Beam 設定]タブを開き、[+]ボタンから「MQTTエントリポイント」を選択します。

以下を入力します。

認証情報では、以下を入力します。

登録を押して、認証情報が選択されていることを確認して、保存を押します。

ステップ 3: Beam を使用して Azure IoT Hub にデータを送信する

デバイスの準備

当ガイドでは、Mosquitto のクライアントを利用します。Raspbian であれば、下記コマンドでインストール可能です

sudo apt-get install mosquitto-clients

送信されたデータ確認の準備

送信されたデータは、以下のツールを使用して確認します。

当ガイドでは、Azure CLI を利用します。上記を参考にしてインストールするか、Azure CLI を利用ください。

下記のコマンドで送信されたデータの確認ができます。IoT Hub 名とデバイス ID は指定したものを入力してください。

$ az iot hub monitor-events -n "IoT Hub 名" -d "デバイス ID" -p all

デバイスからデータを送信

デバイスからクラウドへデータを送信します。

デバイスからのデータは、 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 CLI 側で以下のように表示されることが確認できます。

{
    "event": {
        "origin": "デバイス ID",
        "payload": "Hello from SORACOM Beam!"
    }
}

ステップ 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!

(参考) Beam を使用せずに直接 Azure IoT Hub と接続する

データの送信が上手くいかない場合、Azure IoT Hub に直接接続できるかが切り分けとなります。参考までに手順を紹介します。

Beam を使用しない場合は以下のように証明書ファイル等を指定して送信する必要があります。 cafile は Azure IoT Hub のルート証明書です。Azure 側の CA 証明書は Baltimore CyberTrust Root です。デフォルトで入っているクライアントも多いですが、ない場合はこちらからダウンロードします。

HubName=[IoT Hub 名]
deviceId=[デバイス名]
mosquitto_pub -d -h ${HubName}.azure-devices.net -p 8883 \
--cafile /etc/ssl/certs/Baltimore_CyberTrust_Root.pem \
--cert ./deviceCert.pem --key ./deviceCert.key \
-i ${deviceId} -u "${HubName}.azure-devices.net/${deviceId}" \
-t "devices/${deviceId}/messages/events/" \
-m '{"message": "Hello IoT Hub!"}' -V mqttv311

ここまでの解説により、直接 Azure IoT Hub に接続する時と異なり Beam で接続する時はデバイスに証明書の付与が不要なことがわかります。証明書の変更があった際も、Beam の設定を変更するのみで対応することが可能となります。

Getting Started

SORACOM Air for セルラー

SORACOM Air for LoRaWAN

SORACOM Air for Sigfox

SORACOM Beam

SORACOM Canal/Direct/Door

SORACOM Endorse

SORACOM Funnel

SORACOM Funk

SORACOM Gate

SORACOM Harvest

SORACOM Inventory

SORACOM Junction

SORACOM Krypton

SORACOM Lagoon

SORACOM Napter

Gadgets

Device

サービス機能詳細

Developer Tools

pagetop