AWS IoT ButtonのボタンイベントをFASTIOで表示する


こんにちは!
アドベントカレンダー15日目は、開発部の古川が担当します。

弊社のWEBサービスでもよくAWSが使用されていますが、関連して、先日、AWS re:Invent 2017 というイベントが開催されましたね。

様々な機能が紹介されており、弊社サービスにも色々と生かせる所があるのではないかとワクワクしていますが、その中から「IoT」の関連機能とFASTIOの連携ということで、AWS IoT Button と FASTIO LOGGER の連携を行ってみます!

AWS IoT Button

AWS IoT Buttonは、Amazonが提供するシンプルなプログラマブルなWi-Fiデバイスで、ボタンイベントをAWS IoTに連携して、AWSの各種サービスに伝搬することができます。
AWS IoT Button

初期のAWS IoT Buttonは、AWS re:Invent 2015 での発表後、米Amazon.comで2016年5月13日に発売され、約4時間後には初回発売分が完売したという盛況ぶりでした。


その後、AWS re:Invent 2016 で、AWS IoT Button Enterprise Program として、企業向けのIoT Buttonとして公開されました。
これは、第二世代のIoT Buttonと呼ばれ、米Amazon.com から購入することができます。

しかし、AWS IoT Button は日本の技適を通過していない為、日本国内でWi-Fiを用いた通信は行うことができませんでした。

しかし、今回の AWS re:Invent 2017 で、どうやら、この AWS IoT Button が日本で発売されるのではないか、という情報が出ていました!
https://dev.classmethod.jp/cloud/aws/aws-reinvent-aws-iot-button/

日本で発売されるなら、その前に弊社のFASTIOにも繋げておきたい!
ということで、本エントリです。

AWS IoT Button Emulator

とはいっても、前述の通り、日本国内では、通信状態で利用することはできないため、
 
Qiita – Amazon Dash ButtonをただのIoTボタンとして使う
といったやり方でしか、検証することはできませんでした。

クラスメソッドさんは、バンクーバーで動かしていますね!
【開封の儀 in バンクーバー】AWS IoT Buttonを使って東京リージョンのAWS IoTを動かしてみる

で、どうしようかな、と思っていたら、GitHub に ラズパイ向けの Emulator を公開してくれている人がいました!
https://github.com/ianmas-aws/iot-button-emulator

で、これを使って構成したのが以下です。(RaspberryPi 2 Model B+)

※弊社の岩津無理やり勧めを受けて購入させられたまま眠っていましたが、ようやく日の目を見るときが来ました。ありがとうございます!

セットアップの詳細は省略しますが、README に従って、インストールを進めればすんなりと動作しました。
ハードウェアも、Emulator の構成に従って、GPIO端子にタクトボタンを接続しています。
USBテザリングで通信させています。

システム構成

と、AWS IoT Buttonの動作確認が行えるようになった所で、今回作成するシステムの構成は次のようになります。

  • IoT Button は、 AWS IoT に MQTT Publish。
  • AWS IoTは、ルールで Lambda 関数を呼び出し
  • Lambda関数は、FASTIO LOGGER の DATALINK へ HTTPリクエストでデータを送信

システム構成はシンプルです。

AWS IoT & AWS Lambda

本来の AWS IoT Buttonであれば、AWS Lambdaの登録画面から、一発で登録できるようなのですが、DSN(Device Serial Number)を入力する必要があるようなので、

今回は、AWS IoT と AWS Lambda をそれぞれセットアップします。

AWS Lambda

Lambda関数を作成します。
AWS IoT からのイベントを受けて、FASTIO DATALINK にHTTPリクエストを送信するプログラムを作成します。
今回は、FASTIOには、「警報データ」という種類のイベントで送信してみます。
AWS IoT Buttonには、「SINGLE」「LONG」「DOUBLE」の3つのイベントが定義されていますが、それぞれ、「60」,「61」, 「62」 という番号を割り当てます。実際、番号はどの番号でも構いません。

Lambda には、IoT Button のイベントを受けてE-mailを送信する関数のテンプレートがあるので、これをベースに作成します。

関数の全文は以下の通りです。

requestモジュールを使って、FASTIO DATALINK のフォーマットに則ってリクエストを送信します。
※FASTIO DATALINK のAPI仕様は公開していますので、アカウントの申し込みと共に担当窓口までお問い合わせください

また、Lammbdaの画面で各環境変数を設定しておきます。

※最近、Lambdaのコンソール画面がまた変わって、使いやすくなりましたね!

Lambda側はこれで準備完了です。
必要に応じて、テストを実行しておきます。

result: OK が返っていますね!

AWS IoT

セットアップの詳細は省略しますが、今回接続する AWS IoT Button Emulator 用の Things を一つ追加しています。

証明書とエンドポイントを、iot-button-emulator に設定します。
また、デバイスからの接続、通信を許可するポリシーも、設定しておきます。

AWS IoT から、Lambadaへイベント連携するルールを作成します。
ルールの新規アクションで、先程作成したLambda関数を選択します。

は、iotbutton-emulator の指示Topic(ヘッダファイルで変更可)で、トピック配下の全てのメッセージをLambda関数に送信します。

これで、AWS IoT 側の設定も準備完了です。簡単ですね!

FASTIOでボタンイベント受信!

では、実際にAWS IoT Button(Emulator)の動作を確認してみましょう!
RaspberryPiに接続したタクトスイッチをON/OFFしてみます。

今回、FASTIO LOGGER には、「警報データ」というデータ種別で連携していますので、メッセージ画面にメッセージが表示されます。

ボタンイベントを受信できていますね!
Emulator が、シリアル番号とバッテリー状態を通知してくれています。

AWS単体でも、E-mail等のイベント送信が行えますが、もちろんFASTIOでもメール送信やHTTPリクエストの発行等のイベント連携が行えます。

おわりに

AWS re:Invent 2017 に先立って、AWS IoT の価格引き下げが発表されました。
AWS IoT の更新 – 新しい料金モデルでより優れた価値を提供

これも嬉しいニュースでした。
今までの価格体系では、リアルタイムに近い頻度で計測するデバイスのコストは月間数千円程にもなる試算で、20~40% のコスト削減というのはとても大きいです。

そして、AWS re:Invent 2017 で、IoT関連のソリューションとして、次のような機能が紹介され、Lambdaを中心としたエコシステムが構築されようとしています。

  • あらかじめ登録されたLambda関数を紐づけて、AWS IoT Enterprise Buttonを購入するサービス
    AWS IoT 1-Click

  • サーバレスアプリケーションを公開し、検索し、デプロイできるサービス
    AWS Serverless Application Repository

Repositoryには、上記で作成したLambda関数も是非登録したいですね!
そうすると、AWS IoT Enterprise Buttonを持っているお客様は、FASTIOに簡単にイベント連携ができるようになります。

その他、様々なIoT関連機能が発表され、IoT への力のかけ方が伺えますね。
https://aws.amazon.com/jp/new/reinvent/#iot

弊社の入澤が作成している「指ロイド」で、AWS IoT Button を押して、FASTIOにデータ送信、FASTIOから指ロイドを操作して、指ロイドが AWS IoT Buttonを・・(略
というクラウドと現実世界の無限ループを構築することなんかもできますね!

ということで、弊社では AWS IoT Buttonの受け入れ態勢は万全なので笑
日本での正式発売を心待ちにしています!