はじめに
AWS IoT エンタープライズボタンが一般販売され、個人用に1つポチりました。
どんな使用方法があるかを検討している中で、「とりあえずラズパイにMQTTで何かしらのメッセージをPublishしてみるか」ということで試してみました。
AWS IoT エンタープライズボタンって?
要するに「AmazonDashButtonのエンタープライズバージョン」です。
簡単な設定を行うだけで、Lambda関数をコールしたり、SMSを送信したりすることができます。
おそらく、ボタン本体の中に証明書などを持っていて、紐づけたAWSアカウントのAWSIoTにリクエストを送信するような仕組みになっているのかなーと思ってます。
ちなみに今回はLambda関数をコールします。
やること
至って簡単です。
- ボタン押す
- Lambdaがコールされる
- ラズパイがSubってるトピックにメッセージをPubる
- 以上!
ラズパイの設定
この記事を参考にして、MQTTを扱えるようにしてください。
SORACOMでAWSIoTにメッセージをBeamする
ラズパイ側はトピック名 demodemo/#
でSubっておいてください。
Lambda関数のデプロイ
ランタイムは Node.js 8.10
最低限必要な権限は、 AWSIoTのPublish iot:Publish
ソースコードはこんな感じです。
const AWS = require("aws-sdk");
const iotData = new AWS.IotData({
endpoint: "aclhlxe7k1bjt.iot.ap-northeast-1.amazonaws.com"
});
const TOPIC_NAME = "beamdemo/IoTbutton";
exports.handler = async (event) => {
console.log(JSON.stringify(event));
try {
const clickType = event["deviceEvent"]["buttonClicked"]["clickType"]
const params = {
topic: TOPIC_NAME,
payload: JSON.stringify({ "message": `Button Clicked ${clickType}` }),
qos: 0
};
await iotData.publish(params).promise();
console.log("Success!!");
return null;
} catch (err) {
console.error(err);
throw err;
}
};
Eventにボタンをクリックした回数などが含まれているので、どのようなボタンのクリック方法をしたのかをメッセージとして、 トピック名 demodemo/IoTButton
にPublishしています。
// message例
{"message":"Button Clicked SINGLE"}
{"message":"Button Clicked DOUBLE"}
{"message":"Button Clicked LONG"}
SINGLE=ボタンを1回押す、DOUBLE=ボタンを2回押す、LONG=ボタンを1.5~6秒未満長押しする、といった感じで取れます。
AWS IoT エンタープライズボタンの設定
まず「AWS IoT 1-Click」というスマホアプリからWiFiの設定を行ってください。
画面の通りに進めていけばボタンがWiFi経由でインターネットに出ていくことが可能になります。
その後、AWSコンソール画面に戻り、アカウントとボタンの紐づけ、ボタンをクリックされたあとのイベントの設定を行っていきます。
ボタンを登録する
↑この画面になったらボタンを押してください
これでボタンとAWSアカウントが紐付きました。
ボタンを有効化する
ボタンが有効になりました。
プロジェクト / プレイスメントの作成
これでボタンをクリックしたときにLambda関数がコールされるようになりました。
確認
ラズパイでトピック名 demodemo/#
をSubります。
$ mosquitto_sub -h beam.soracom.io -t demodemo/#
この状態でボタンをクリックします。
無事メッセージが届きました!
さいごに
AWS IoT エンタープライズボタンの登場で、かなり簡単にIoT(っぽいこと)に触れることができるようになりました。
Lambda関数をキックできるので、実質かなり応用が効きますし夢がかなり広がります。
また、Lambda関数以外にもSMSやEmailを送信することができます。
ただボタンに寿命がある(リクエストを送信できるのが約2000回)ので、実際にプロダクションレベルで使用する際には、ボタンの交換などについても考慮しなければいけないです。
簡単に試すことができるので、いろんな利用方法を考えて試していこうと思います。
ではまた!