Azure IoT Hubで受け取ったデータを利用する方法(Azure function)


概要

 Azure IoT Hub でエッジデバイスからデータをAzureに送信することに成功したのですが、そこからどう使うかかを模索した話です。

【前回記事】
M5Stackとクラウドを直接連携してみる(Azure IoT hub入門)

今回はこちらを参考に、「Azue function」を使用して、Azure IoT Hubで取得したデータを利用することができました。

Azure IoT HubとAzure functionを接続

 Azure Functionを使う準備をしていきます。Azure portalを開き、Azure IoT Hubと同じリソースグループに、関数アプリを追加します。

関数アプリを作成できたらリソースに入り、関数を作っていきます。

画面右側に関数のテンプレート選択が現れるので、「IoT Hub」を選択します。

 関数テンプレート作成時に初期設定を行います。名前は適当。Event Hub connectionをIoT Hubにします。この時、IoT Hubのリソースが作成済みでないといけません。

 関数作成後、次のような画面となれば作成完了です。

接続確認

 画面左の欄から、「コードとテスト」を選択します。次のようにIoT Hubからメッセージを受け取ったら、コンソールログに出力するコートになっています。

 IoT Hubへメッセージを送るデバイスを起動し、次のようにログにメッセージが表示されれば接続Okです!

 例えば、次のようにするとM5Stackから送信された温度データをログに表示できます。

module.exports = function (context, IoTHubMessages) {
//    context.log(`JavaScript eventhub trigger function called for message array: ${IoTHubMessages}`);

    IoTHubMessages.forEach(message => {
        context.log(`Processed message: ${message.Temperature.toFixed(1)}`);
    });

    context.done();
};

 

おわりに

 この方法は特に回りくどい事せずことをせず、設定するのみだけなので簡単かなと思います。
ただし、あまりに頻繁にデータを送信していると課金になるかもしれないので気を付けましょう。

参考

Azure Functions の Azure IoT Hub トリガー
Azure IoT Hub と Windows 10 IoT Core とRaspberry Pi 3 Model B+ とでテレメトリーの収集をしてみた
IoT Hub メッセージ ルーティングを使用して device-to-cloud メッセージを別のエンドポイントに送信する