IoT Edgeデバイスを使った IoT Centralアプリケーション

この記事は2021/08/21に開催した[『Azure IoT Central』全方位解説セミナー！](https://algyan.connpass.com/event/218214/)で行ったデモの手順を説明しています。


Azure IoT Centralでは様々なデバイスを接続することができます。すでにデバイステンプレートが用意されている場合では数分でモニタリングアプリケーションを作成することもできます。

IoT Edgeデバイス用デバイステンプレートはありませんが、IoT Edge のマニュフェスト（具体的にはdeployment.xxxx.jsonファイル）を読み込むことで簡単にデバイステンプレートを作ることができるようになっています。

今回は温度、湿度、Co2濃度、位置情報を送信するIoT EdgeデバイスをIoT Centralに登録して、モニタリングするためのアプリケーションを作成してみます。

##接続するIoT Edgeデバイス
・RaspberryPi4+SCD30(Co2センサー)+GPS
・RaspberryPi OS buster 32bit (2021/05/07)
・Python3.7
・IoT Edge Ver1.1
・お好きなターミナルソフトウェア（WindowsTerminal等）

デバイスからセンサーデータをIoTHubに送信するようにプログラムしています。
IoT Edge開発の説明は省略。興味のある人は参考URLを参照してください。

それではIoT Centralアプリケーションを作成していきましょう。

##スタート
・[IoTCentralサイト](https://apps.azureiotcentral.com/)にアクセスして、有効なアカウントでサインインします。
![00.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/fb068977-7886-c46d-3974-01dfd17bff88.png)
・左側メニューの「マイアプリ」をクリックします。

![00-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/ec98ec50-dfcb-3e0e-33dc-096ef90518eb.png)
・左上の「+新しいアプリケーション」をクリックします。

![00-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/3af5dbe8-dbe8-e97f-fb65-7852acc779b0.png)
・カスタム アプリの「アプリの作成」をクリックします。

![00-3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/c831ace2-d3ba-cf47-2b14-4d6ce49699fa.png)
・アプリケーション名は一意の名称を入力します。
・URLは一意のURLを入力します。入力できるのは小文字、数字、ハイフンが使えます。
・料金プランは無料を選択します。（1週間以上利用するならStandard2を選ぶといいでしょう。）

![00-4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/9d2c85d3-f2ca-fb44-0b8d-1e1f79f0a820.png)
・ディレクトリ、Azureサブスクリプションは利用しているAzureサブスクリプション、ディレクトリを選びます。
・場所はどこでもいいですが、やはり一番近い「東日本」がいいでしょう。
・入力出来たら「作成」をクリックします。

![00-5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/37492138-7cae-d3b6-1bf2-284bee6ab672.png)
・画面左側のデバイステンプレートをクリックします。

![00-6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/c14e4255-0a67-844b-e4e4-70aeb384667f.png)
・画面左上の「+新規」ボタンをクリックします。

![02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/7dd08300-9cc5-8a60-1504-a8a8f3d9ab6e.png)
・カスタムデバイステンプレートの「Azure IoT Edge」を選択してから「次へ：カスタマイズ」をクリックします。

![03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/cd41052d-2904-4c64-5c51-e993ba12f86e.png)
・デバイステンプレート名を入力し、「参照」をクリックします。

![04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/9beb90df-ac4c-3a35-471d-a72767e02de5.png)
・IoTEdgeモジュールのソースディレクトリ>config>deployment.xxxx.jsonを選択します。（xxxxはデバイスのアーキテクチャで変わります。）

![05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/d3de7746-48d6-0175-926e-dcb83388d474.png)
・読み込んだデプロイマニュフェストに問題なければ「検証済み」と表示されます。次に「次：レビュー」をクリックします。

![06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/6115ab86-f6a8-7f62-4ba1-92531a9d7ffa.png)
・モジュールに作成したカスタムモジュールの名前が表示されます。最後に作成ボタンをクリックします。

![071.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/5985eddf-b3ef-e97d-ac8b-2b772d9a8673.png)
・モジュールに機能を追加します。（具体的にはデータを受け取る項目の設定をします。）
・「機能の追加」をクリックし、次の項目を入力します。

![08.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/fbdb966f-540c-391a-7774-dc58094f455f.png)
・入力する項目は「temperature」、「humidity」、「co2」、「tracking」になります。セマンティックは該当する内容を選択します。（「co2」は該当するものがないので空欄のままにします。）入力ができたら画面上部の保存をクリックします。

![09.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/ea430027-3b65-a90e-0f54-1711683d397e.png)
・次に「ビュー」をクリックして、「デバイスの視覚化」をクリックします。

![10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/05b28f98-d9d7-1f5b-c85a-b81653560081.png)
「折れ線グラフ」タイルを右側にドラッグします。同様に「最後の既知の値(LKV)」タイル、「マップ（テレメトリ）」タイルもドラッグします。

![11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/7e190b1a-b408-2e17-7359-3a39cf97f277.png)
・折れ線グラフタイルの「設定」をクリックします。

![12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/7d825bc8-efe8-ccfd-42d4-109bea4e34d2.png)
・テレメトリの「＋機能」をクリックして、「temperature」、「humidity」、「co2」を追加して「更新」をクリックします。「最後の既知の値(LKV)」には「temperature」、「humidity」、「co2」、「tracking」を追加します。「マップ（テレメトリ）」には「tracking」を追加します。

![13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/d1132772-22f3-8adb-4096-f6d812413150.png)
・「保存」をクリックしてから「←戻る」をクリックします。

![13-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/ec2c153b-e688-4fb0-ef13-aed3f8299fe5.png)
・デバイステンプレートが出来上がったので「↑公開」をクリックします。

![14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/08e8944a-1b53-172b-17d8-eed76f85554b.png)
・「公開」ボタンをクリックします。

![14-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/b29d2e4b-3615-4616-dd11-fcbddd5966f1.png)
・続いてデバイスの登録をします。左側メニューの「デバイス」をクリックして、画面上部の「＋新規」をクリックします。

![16.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/bcf81a12-4669-2125-956e-2908630044d2.png)
・デバイス名は自由に入力できます。省略するとデバイスIDと同じになります。
・デバイスIDは一意の値を入力します。
・デバイステンプレートは先ほど作成したテンプレートをリストから選択します。
・入力ができたら「作成」をクリックします。

![16-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/e5557a22-fc57-9e9e-6659-3fe36543954b.png)
・作成したデバイス名をクリックします。

![16-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/edb8d213-d4d2-873b-548d-1004cd3e8188.png)
・画面上部の「接続」をクリックします。

![19.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/8dccc74e-580b-5ca1-b906-c11ec8b42207.png)
・「IDスコープ」、「デバイスID」、「主キー」の各項目をメモしておきます。

![20.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/1a25fd54-2f44-a606-2013-320ce4486f1f.png)
・次にターミナルを起動して、IoTEdgeデバイスにログインします。
・「sudo nano /etc/iotedge/config.yaml」と入力します。
・開いたファイル内の「# DPS provisioning with symmetric key attestation」より後の行のコメントアウトを解除します。
・「scope_id」には先ほどメモした「IDスコープ」の値を入力します。
・「registration_id」には「デバイスID」を入力します。
・「symmetric_key」には「主キー」を入力します。
・入力が終了したらファイルを保存したのちエディタを終了します。
・「sudo systemctl restart iotedge」と入力しIoTEdgeランタイムを再起動します。

![21.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/04a558f5-fdce-0c00-50fd-014b66d4defa.png)
・IoTCentralに戻って、デバイスからデータが送信されていることを確認します。


以上がIoTCentralにIoTEdgeデバイスを登録する方法でした。

##参考URL

[メモ：RaspberryPiにAzure IoTEdge ランタイムをインストール](https://qiita.com/linyixian/items/f0da0df8f5f9cb034988)
[メモ：RaspberryPi上のAzure IoTEdgeランタイムの設定](https://qiita.com/linyixian/items/39a15c8a85db2f43f090)
[Azure IoT Edge カスタムモジュールの作成（RaspberryPi & Python）](https://qiita.com/linyixian/items/f79702961f7547e15b49)
今回のIoTEdgeデバイスのソースコード　[https://github.com/linyixian/IoTCentral_IoTEdge](https://github.com/linyixian/IoTCentral_IoTEdge)