SORACOM Developers

Getting Started

SORACOM Funnel AWS IoT アダプターを使用してデータを送信する

はじめに

SORACOM Funnel(以下、Funnel)は、デバイスからのデータを特定のクラウドサービスに直接転送するアダプターです。

当ガイドでは、デバイスから送信するデータをAWS IoTに集約し、AWS IoT のルールエンジンでデータのフィルタリングを行い、Amazon SNS(Simple Notification Service)での通知を行う設定手順を例に、Funnel の AWS IoT アダプターの基本的な使い方を解説します。

overview

AWS IoT にはデバイス管理など様々な機能がありますが、当ガイドでは、データの振り分けを行う「ルールエンジン」という機能を利用して Funnel から送ったデータの処理を行います。ルールエンジンの設定を変更すれば、システムの用途に合わせてデータの振り分けとアクションを指定することができます。例えば、センサで取得した温度が特定の値を上回ったときに通知を出す、といった用途で利用できます。

サービスの詳細は 「SORACOM Funnelサービス概要ページ」 を参照ください。より詳細な技術仕様は「SORACOM Funnel機能詳細」をご覧ください。

ここではセットアップから動作確認までの流れを以下のステップに沿って解説します。

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

AWS SNS のセットアップ

このガイドでは、AWS IoT に届いたデータをルールエンジンで振り分け、条件に一致したデータがあれば SNS でメール通知します。始めにメール通知に使う Amazon SNS をセットアップします。

AWS のドキュメントを参考に SNS トピックの作成とサブスクライブを行ってください。

AWS IoT のセットアップ

続いて、Funnel からのデータを受け取る AWS IoT をセットアップします。

エンドポイントの確認

AWS IoT のマネジメントコンソールを開き、メニュー画面左下の Settings をクリックします。

setting

ご自分の AWS アカウントに割り当てられたエンドポイントが表示されますので、内容をメモしてください。例えば、AWS 東京リージョンで AWS IoT をセットアップすると以下のようなエンドポイントが割り当てられます。

<ランダムな文字列>.iot.ap-norththeast-1.amazonaws.com
endopoint

ルールの作成

AWS IoT では、IoT デバイスから送られたデータをルールに沿って処理し、アクションを実行します。今回は、デバイスの IMEI が特定の値の場合にSNSに通知をするようルールを作成します。

画面左のメニューから Rule>Create a rule ボタンをクリックし、以下のように入力します。myTopic という名前のトピック配下に配信されたメッセージのうち、特定の IMEI が含まれるものだけフィルタリングし、該当するものがあった場合に SNS のメール機能でメッセージ全体を送信する、というルールになっています。

overview
action list

IAM Role Name に aws_iot_sns を指定できたら、「Update Role」をクリックします。最後に「Add Action」ボタンをクリックします。

action list

Action の設定が終わると始めの画面に戻ります。最後に「Create Rule」ボタンをクリックするとルール作成完了です。

action list

ルールの作成手順は AWS のドキュメントも参考にしてください。

Funnel のセットアップ

Amazon SNS と AWS IoT の設定が終わったら、SORACOM 側の設定に移ります。

認証情報の登録

SORACOM では、証明書や外部クラウドサービスの認証情報などを「認証情報ストア」に登録し、Beam や Funnel の認証に使います。今回は Funnel から AWS IoT にアクセスするために、AWS アカウントのCredential(Access Key, Secret Access Key)をユーザーコンソールに登録します。手順は以下のとおりです。

credetial registration

SIM グループ設定

Funnel の設定は SIM グループ単位で行います。AWS IoT にデータ転送するよう以下の手順で設定を行います。

項目 設定内容
ON/OFF スイッチ ON にセット(設定を有効化)
転送先サービス AWS IoT を選択
転送先 URL {ご自分のAWSアカウントに割り当てられたエンドポイント}/myTopic/#{imsi} を入力
認証情報 先のステップで登録したものを指定
送信データ形式 (指定しない) を選択
funnel group setting

プレースホルダ機能

Funnel の 転送先 URL にはプレースホルダを使うことができます。プレースホルダを使うと IMSI, IMEI, LoRa デバイス ID を URL に自動的に入れ込むことができます。利用できるプレースホルダは以下の通りです。通信方法によって利用できるものが異なる点に注意してください。

動作確認

こまでの手順で、Funnel から AWS IoT へデータを転送し、SNS で通知を送る準備が整いました。最後に動作確認を行います。

今回の動作確認には、Air SIM で通信しているデバイスと AWS IoT の MQTT クライアントを使います。

AWS IoT のマネジメントコンソールを開き、画面左のメニューから「Test」を選択し、MQTT クライアントを開きます。この画面では AWS IoT に対してデータを受信・送信するテストができます。詳しくは AWS のドキュメントを参照してください。

※初めて MQTT クライアントにアクセスする場合、操作できる状態になるまでしばらく時間がかかることがあります。その場合は少し待ってからアクセスしてみてください。

MQTT クライアントが表示されたら、Subscribe to a topic のセクションで myTopic/# と入力します。これで myTopic という名前のトピック配下に配信されたメッセージすべてを受信できるようになります。

aws mqtt client

これでデータの受信状況を確認できる環境が整いました。次に、Air SIM で通信できるデバイスから Funnel 宛てにデータを送信します。

今回は次のような JSON 形式のデータをリクエストボディとして、HTTP で送信してみましょう。

{
    "deviceid": "iot123",
    "temp": 54.98,
    "humidity": 32.43,
    "coords": {
        "latitude": 47.615694,
        "longitude": -122.3359976
    }
}

以下は Raspberry Pi に USB ドングルをセットして HTTP でデータ送信した場合のリクエストとレスポンスの例です。レスポンスとして 204 No Content が返ってくれば、データ送信成功です。他の HTTP レスポンスコードが返ってきた場合には、エラーコードを元に送信データの形式などを確認してください。

pi@raspberrypi:~ $ curl -v -H Content-Type:application/json -d '{"deviceid" : "iot123",    "temp" : 54.98, "humidity" : 32.43, "coords" : { "latitude" : 47.615694,  "longitude" : -122.3359976 }}' funnel.soracom.io

* Rebuilt URL to: funnel.soracom.io/
* Hostname was NOT found in DNS cache
*   Trying 100.127.65.43...
* Connected to funnel.soracom.io (100.127.65.43) port 80 (#0)
> POST / HTTP/1.1
> User-Agent: curl/7.38.0
> Host: funnel.soracom.io
> Accept: */*
> Content-Type:application/json
> Content-Length: 156
>
* upload completely sent off: 156 out of 156 bytes
< HTTP/1.1 204 No Content
< Date: Thu, 30 Mar 2017 11:12:43 GMT
< Connection: keep-alive
<
* Connection #0 to host funnel.soracom.io left intact

このとき、AWS IoT マネジメントコンソールの MQTT クライアントでは、以下のようにメッセージが表示されます。Funnel の設定でプレースホルダを指定したので、トピックには自動的に Air SIM の IMSI が入っています。また、ルールが正しく設定できていれば SNS からメールも送信されます。どちらも確認できれば動作確認は完了です。

aws mqtt client

もしもメッセージが受信できなかったり、メールが届かない場合には以下のポイントを確認してください。

利用例

Funnel の AWS IoT アダプタの長所は、デバイスから送信したデータを Funnel のエントリポイントに送信するだけで、AWS IoT によって様々なAWSサービスとの連携が可能となる点です。また、TCP/UDP/HTTP のプロトコルに対応しており、デバイスやシステムの要件に合ったプロトコルで通信することができます。さらに、Funnel の設定項目の中では、転送先URL として#{imsi}, #{imei}を変数として URL のパスに埋め込むことができます。この機能を使うと、SIM の IMSI や IMEI を自動的にトピック名とすることが可能となり、特定の SIM やデバイスとのを簡単に行うことができます。

具体的な利用例としては以下のようなものが挙げられます。

なお、Funnel はデータをクラウドサービスにアップロードする機能に特化しており、デバイス宛の通信(下り通信)には対応していません。AWS IoT の Thing Shadow 機能を使う場合には SORACOM 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 Gate

SORACOM Harvest

SORACOM Inventory

SORACOM Junction

サービス機能詳細

Developer Tools

pagetop