IoT Connect Gateway を使ってみた 第2回 〜AWS IoTCoreに接続してみよう〜


はじめに


こんにちは、データプラットフォームサービス部でIoT Connect Gateway開発チームのTech Leadをしている栗原良尚(@yoshinao)です。

前回の記事投稿からしばらく時間が経過してしまいました。 今回は、実際にRaspberry Piのセットアップならびに ICGWの設定、AWSにデータを転送するところまでご紹介したいと思います。

また、2021年10月18日のニュースリリースでご案内しておりますように、IoT Connect Gatewayの新機能の提供を開始しました。

f:id:NTTCom:20211021092424p:plain

今回の機能拡充によってNTT ComのIoTプラットフォームであるThings Cloudのサポートを開始しました。

新規メニューとして、従来メニューのIoTプラットフォームに接続できるスタンダードに加え、 イベントファンクションというラインナップが追加されました。

f:id:NTTCom:20211021092431p:plain

  • スタンダード

各種クラウドサービスのIoTプラットフォームに接続するために 必要な暗号変換機能とクラウドアダプタ機能が利用可能です。 今回のリリースでThings Cloudのほかに、お客様のオンプレミス環境 に対応できるよう汎用HTTPサーバにも対応しています。

  • イベント

各種クラウドのメッセージングサービスに接続することで、クラウドで提供しているAI/MLといったようなPaaSやSaaSサービスをより簡単に活用できる機能

  • ファンクション

各種クラウドのサーバーレスコンピューティングサービスやFaaS(Function as Service)に接続することで、データの前処理やより開発に注力することを目的とした機能


準備する物


f:id:NTTCom:20211021092438j:plain

1. ICGWに対応したSIM

ICGWをご利用の場合は、別途ICMS対応SIMが必要となります。 申し込み、トライアルのご相談は記事下部にあるご連絡先よりお問い合わせください。

2. USBドングル(UX302NC)またはモバイルルータ

今回はUX302NCRとAtermの設定を紹介しています

3. IoTデバイスとして利用できる機器(Raspberry Pi4)

今回はRaspberry Pi4を利用していますが、省電力化、小型化が必要な場合は、Raspberry Pi zeroのほうがおすすめです。 Linuxが動作すれば同様の手順で接続は可能です。


Raspberry Piのセットアップ


Raspberry Pi OSインストール作業

Raspberry Pi を使うためには、SDカードにOSを インストールが必要になりますが、公式の Raspberry Pi Imagerを使うことで簡単にインストールが可能になります。

Raspberry Pi Imagerダウンロード先

1. Raspberry Pi Imagerの起動

OSのインストールはRaspberry Pi Imagerを利用するのが一番簡単です。

f:id:NTTCom:20211021092448p:plain

2. OSの選択

今回はRaspberry Pi純正のOSを選択しましたが、サードパーティ製のOSも選択可能です。

f:id:NTTCom:20211021092455p:plain

3. インストール先のMicro SDの選択

書き込みをおこなうSDカードを選択してください

f:id:NTTCom:20211021092501p:plain

4. 書き込み開始

Writeボタンを押して、SDにイメージを書き込みを開始します。 たったこれだけでOSのインストールが可能です。本当に便利になりましたね。

f:id:NTTCom:20211021092508p:plain


モバイル網への接続


Raspberry PiをICMSのSIMを利用してICGWに接続するには、以下の2通りの方法があります。 モバイル回線接続用パラメータは下記ページをご参照の上設定をお願いいたします。

ICGW IoT Device設定情報

1.Raspberry PiとモバイルルータをWifi接続利用

モバイルルータがある場合は、簡単に試すことが可能な方法です。 ここでは、Atermを使った場合の設定例を示します。

下記の設定のようにICGW IoT Device設定情報に記載されて いる情報を設定することで、Raspberry PiからWifi経由でICGWに接続が可能です。

f:id:NTTCom:20211115194233p:plain

確認画面でWAN側状態の項目でIPアドレスが付与されていると正常に接続されています。

f:id:NTTCom:20211115194240p:plain

2.Raspberry PiにUSBドングル接続して利用

こちらの方法は、設定が多少複雑ですが、Raspberry Piと一体化することで 給電の簡素化可能です。

設定手順の概要は以下の通りです。

  1. Raspberry PiにUSBドングルを設定
  2. wvdalを利用し、モバイル網に接続
  3. Raspberry Pi起動時、USB接続時に自動接続する設定

USBドングルの設定方法に関しては、別記事にてご紹介したいと思います。

f:id:NTTCom:20211116003619p:plain

接続確認

  • Raspberry Piが NTT Comのネットワークに接続されていることを確認
pi@raspberrypi:~ $ whois `curl inet-ip.info`

--snip--

Network Information: [ネットワーク情報]
a. [IPネットワークアドレス]     210.225.74.128/25
b. [ネットワーク名]             VUTM-NW3
f. [組織名]                     エヌ・ティ・ティ・コミュニケーションズ株式会社
g. [Organization]               NTT Communications Corporation
                                Customer Service Department
m. [管理者連絡窓口]             RS22452JP
n. [技術連絡担当者]             RS22452JP


ICGW設定手順


ここではICGWを利用して、AWS IoTCoreに接続する設定をご紹介します。作業ステップは以下の通りです。

  1. SIMの情報登録
  2. 認証情報の登録
  3. データ転送先設定

Step1.SIMの情報確認&設定

DeviceName, Optionデータを必要に応じて設定可能です。 これらの情報ならびに、IMSI, MSISDN, IMEI, HSNの情報は、MQTTのトピックや、転送先URL、データで置換可能になります。

f:id:NTTCom:20211020020144p:plain

Step2.認証情報の登録

各種クラウドごとに提供されている認証情報を登録します。 AWS IoTCoreの場合はX.509を選択してください。 AWS IoTCoreの認証鍵はAWS IoTCoreのモノの作成の際に一度しかダウンロードできませんのでご注意ください。

f:id:NTTCom:20211020020151p:plain

Step3.データ転送先設定

下記は、AWS IoTCoreにHTTPで接続する場合の設定方法です。 MQTTも同様の設定をすることで利用可能になります。 ICGWを利用することで、既存のデバイス設定を変更することなく、本ポータルより設定変更や、データ転送先の変更、暗号鍵の交換などが簡単に行うことが可能です。 また、本設定画面からSIM設定画面で保持している個別デバイスの識別情報をトグルスイッチのON/OFFで付加しデータ転送が可能です。

f:id:NTTCom:20211020020158p:plain

f:id:NTTCom:20211020020205p:plain


ICGW経由でメッセージを送信


IoT機器で利用されるプロトコルは様々ありますが、ICGWでは現在のところ最もメジャーに利用されているHTTP、これから需要が見込まれるMQTTに対応しています。 TCPなどの他プロトコルに関しては、ご要望が多ければ優先して対応していきたいと考えております。 ぜひ、ブックマークのコメントやブログ末尾の連絡先に、ご意見を聞かせていただければ幸いです。

ICGWの送信先のEndPointは以下の通りです。

  • HTTP
http://an1.icgw.ntt.com/
  • MQTT
an1.icgw.ntt.com:1883

HTTPの場合は、ICGWのEndPoint以下のPathを任意に設定が可能です。 またMQTTの場合は、topicを指定することで、複数の用途を切り替えて ご利用が可能です。

HTTPを利用してデータを送信

curlを利用してHTTPを使ってデータを送信

以下では、デバイスからHTTPメッセージをICGW経由でAWS IoTCoreに 送信するコマンドと、実行結果を示します。 レスポンスメッセージには、AWS IoTCoreのレスポンスがそのまま返却されます。

  • 送信コマンド
curl -X POST \
--data '{"message": "TEST AWS HTTP"}' \
"http://an1.icgw.ntt.com/"
  • 実行結果
pi@raspberrypi:~ $ curl -X POST \
> --data '{"message": "TEST AWS HTTP"}' \
> "http://an1.icgw.ntt.com/"

{"statusCode":200,"body":{"result":"ok","detail":{"message":"OK","traceId":"ac0f5453-a268-048b-f965-2f2a270de847"}}}

MQTTを利用してデータを送信

MQTTのメッセージを送信する場合は、mosquittoコマンドが利用できるように 下記パッケージのインストールを実施してください。 mosquitto以外にも様々なパッケージやSDKがありますので、お好みに合わせて ご利用ください。

  • インストールパッケージ
sudo apt-get install mosquitto-clients

Mosquittoを利用してICGWにPublishする方法

以下では、デバイスからMQTTメッセージをICGW経由でAWS IoTCoreに送信するコマンドと、実行結果を示します。

  • 送信コマンド
mosquitto_pub \
 --host an1.icgw.ntt.com \
 --port 1883 \
 --id hoge \
 --debug \
 --topic hoge \
 --message '{"message": "TEST AWS MQTT Pub"}'
  • 実行結果
pi@raspberrypi:~ $ mosquitto_pub \
>  --host an1.icgw.ntt.com \
>  --port 1883 \
>  --debug \
>  --topic hoge \
>  --message '{"message": "TEST AWS MQTT Pub"}'

Client mosqpub|12805-raspberry sending CONNECT
Client mosqpub|12805-raspberry received CONNACK (0)
Client mosqpub|12805-raspberry sending PUBLISH (d0, q0, r0, m1, 'hoge', ... (32 bytes))
Client mosqpub|12805-raspberry sending DISCONNECT

Mosquittoを利用してICGWにSubscribeする方法

以下では、デバイスでAWS IoTCoreから送信されるメッセージを デバイス側で待受るためのコマンドと、実行結果を示します。

  • 待受コマンド
mosquitto_sub \
 --host an1.icgw.ntt.com \
 --port 1883 \
 --debug \
 --topic hoge
  • 実行結果
    • AWS IoTCoreからテストデータを送信した場合の実行結果
pi@raspberrypi:~ $ mosquitto_sub  --host an1.icgw.ntt.com  --port 1883  --debug  --topic hoge

Client mosqsub|13732-raspberry sending CONNECT
Client mosqsub|13732-raspberry received CONNACK (0)
Client mosqsub|13732-raspberry sending SUBSCRIBE (Mid: 1, Topic: hoge, QoS: 0)
Client mosqsub|13732-raspberry received SUBACK
Subscribed (mid: 1): 0
Client mosqsub|13732-raspberry received PUBLISH (d0, q0, r0, m0, 'hoge', ... (33 bytes))
{"message": "TEST AWS MQTT Sub"}

AWS IoT Coreでの確認方法

AWSでRaspberry Piから送信したデータを確認

AWS IoT CoreのMQTTテストクライアントのトピックをサブスクライブするを利用することで、HTTPやMQTTで送信したデータを確認できます。 上記HTTPとMQTTのPublishで送信した内容がhogeというtopicでSubscribeできる 事を確認します。

f:id:NTTCom:20211020020212p:plain

AWSでRaspberry Piから送信したデータを確認

同様にAWS IoT CoreのMQTTテストクライアントのトピックに公開するを利用することで、データをクラウド側からRaspberry Piに送信可能です。 上記MQTTのSubscribeでデバイスに送信した場合の送信内容を示しています。

f:id:NTTCom:20211020020221p:plain

今回は、AWS IoT Coreにデータ送受信を行う方法をご紹介しましたが、GCP、Azure、Things Cloudの各種サービスも同様の手順で、簡単にデバイスとクラウドサービス間のデータ送受信が可能です。

これらの機能を利用することで、センサデバイスのデータの可視化が可能になります。 また、収集したデータをクラウドサービスで分析させ、結果をデバイスにフィードバック制御することも可能になります。

この記事を見て頂いて、なにか作ってみようかな?とイメージが湧きましたら幸いです。

次回予告

次回は、センサからのデータ取得方法、クラウド側にアップロードしたデータを利用した可視化などをご紹介したいと思います。

to be continued...

f:id:NTTCom:20211020020229p:plain ※この画面は、Raspberry Piに接続したGPSモジュールで位置測位データをICGW経由で ThingsCloudにて可視化した内容です。

ICGWに関するお問い合わせ先

  • トライアル、サービス導入に関するお問い合わせ

  • 開発チームへのお問い合わせ

    • icgw-dev@ntt.com までメールでお寄せください。
      ※お手数ですが@を半角文字に置き換えてください
© NTT Communications Corporation All Rights Reserved.