いまさらかもしれないですが AWS IoT Enterprise Buttonを買ってみたので、ちょっといじってみたレポート。
かなり簡単に AWS アカウントと AWS IoT エンタープライズボタンを紐づけられた
この状態で AWS IoT のマネジメントコンソールをみると以下のように機器が登録された状態になる
つづいて、マネジメントコンソールから AWS IoT 1-Click プロジェクトを作成できます。ここでは単純にイベント発生時に Lambda をフックできるようです。 Email や SMS を送る選択肢がでてきますが、これを選ぶと結局のところ用意された Lambda 関数を叩くようなので、まあ基本的に裏側は Lambda とする作りのようです。
プロジェクトにデバイスプレイスメントを紐づけると、デバイスからのイベントに応じて各種処理が走ります。ためしに IoT ボタンをクリックしてみましょう。なお、私の手元だときちんと IAM ロール作って Lambda に設定してあげないと SMS が届かなかったので、SMS が届かない方はそのあたりを確認してみてください。ちゃんと設定をやってあげると以下のような感じで SMS が無事到達しました。うさぎを注文しました。
デバイスのイベントログに以下のような出力がでました。
// 2018/5/26 15:37:58 シングルクリック 100% { "device": { "type": "button", "deviceId": "*********", "attributes": { "projectRegion": "ap-northeast-1", "projectName": "Test", "placementName": "MyFirstPlacement", "deviceTemplateName": "SendEmail" } }, "stdEvent": { "clickType": "SINGLE", "reportedTime": "2018-05-26T06:37:58.510Z", "certificateId": "*********", "remainingLife": 99.85000000000001, "testMode": false } } // 2018/5/26 15:42:57 ダブルクリック 100% { "device": { "type": "button", "deviceId": "*********", "attributes": { "projectRegion": "ap-northeast-1", "projectName": "Test", "placementName": "MyFirstPlacement", "deviceTemplateName": "SendEmail" } }, "stdEvent": { "clickType": "DOUBLE", "reportedTime": "2018-05-26T06:42:57.296Z", "certificateId": "*********", "remainingLife": 99.8, "testMode": false } } // 2018/5/26 15:43:47 長押しクリック 100% { "device": { "type": "button", "deviceId": "*********", "attributes": { "projectRegion": "ap-northeast-1", "projectName": "Test", "placementName": "MyFirstPlacement", "deviceTemplateName": "SendEmail" } }, "stdEvent": { "clickType": "LONG", "reportedTime": "2018-05-26T06:43:47.595Z", "certificateId": "*********", "remainingLife": 99.75, "testMode": false } }
電池(remainingLife)ガンガン減ってくな w という感想を抱きました。シングル/ダブル/長押しの 3 種類のイベントを検知できるようで。これらの組み合わせで例えば、モールス信号をダッシュボタンで打つと、その内容をテキストに起こして S3 に保存したり Slack に通知したりできそうですね。やっている人いそうだなと思って調べてみたら、まあやっぱりいた。
こちらの記事ではダッシュボタンを 3 つ用意しているようですが、3 種類のイベントを表現できるのでデバイスは 1 個でも実現できそう。ただすぐ電池切れるでしょうね...。
SMS を送る Lambda のコードをちらっとみておく。
from __future__ import print_function import boto3 import json import logging logger = logging.getLogger() logger.setLevel(logging.INFO) sns = boto3.client('sns') def lambda_handler(event, context): logger.info('Received event: ' + json.dumps(event)) attributes = event['placementInfo']['attributes'] phone_number = attributes['phoneNumber'] message = attributes['message'] for key in attributes.keys(): message = message.replace('{{%s}}' % (key), attributes[key]) message = message.replace('{{*}}', json.dumps(attributes)) sns.publish(PhoneNumber=phone_number, Message=message) logger.info('SMS has been sent to ' + phone_number)
ちな、Lambda に到達する json イベントメッセージはこんなかんじ
{ "deviceInfo": { "deviceId": "******", "type": "button", "remainingLife": 99.55, "attributes": { "projectRegion": "ap-northeast-1", "projectName": "Test", "placementName": "Placement", "deviceTemplateName": "OrderRequest" } }, "deviceEvent": { "buttonClicked": { "clickType": "SINGLE", "reportedTime": "2018-05-26T07:15:09.131Z" } }, "placementInfo": { "projectName": "Test", "placementName": "Placement", "attributes": { "phoneNumber": "******", "message": "Is the order a rabbit?", "room": "amausa" }, "devices": { "OrderRequest": "******" } } }
わずか 300 円で IoT ボタンを作る方法 - Qiita という記事が面白かった。IoT エンタープライズボタン、2500 円もしたのだけれど、同じようなことを 300 円で実現している。こちらも試してみたい。
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです