こんにちは。katoです。
前回に引き続きIoT Enterprise Buttonを触っていきたいと思います。
前回ブログ
xp-cloud.jp
今回はIoT Enterprise Buttonのクリックタイプの利用方法についてご紹介したいと思います。
概要
IoT Enterprise Buttonには、「シングルクリック」、「ダブルクリック」、「長押し」の3種類のクリックタイプが備わっております。
Lambda連携を行うことで、これらのクリックタイプをイベント情報として取得することが可能となり、クリックタイプに応じた処理の分岐を行うことが可能となります。
今回はSNSと連携して、クリックタイプに応じて送信するメッセージを変更する仕組みをご紹介します。
手順
設定は簡単です。
Lambda関数を用意して、IoT 1-ClickのコンソールからデバイスとLambda関数を関連づけるのみになります。
IoT Enterprise Buttonのセットアップに関しては、今回も省略させていただきます。
弊社下記ブログにて設定方法を記載しておりますので、こちらをご参照ください。
AWS IoT Enterprise Buttonを使ってみよう
それでは今回使用するLambda関数を作成していきます。
今回はPython 3.6にて関数を作成しております。
import boto3 import json sns = boto3.client('sns') def lambda_handler(event, context): clicktype = event['deviceEvent']['buttonClicked']['clickType'] print(clicktype) if (clicktype == "SINGLE"): message = "ボタンが1回押されました" elif (clicktype == "DOUBLE"): message = "ボタンが2回押されました" elif (clicktype == "LONG"): message = "ボタンが長押しされました" else: message = "clickTypeを正常に取得できませんでした" sns_publish(message) def sns_publish(message): request = { 'TopicArn': "arn:aws:sns:ap-northeast-1:123456789012:sns-topic", 'Message': message, 'Subject': "[IoT Enterprise Button]clickType test" } sns.publish(**request)
クリックタイプに応じてメッセージを作成、SNSにてPublishという簡単なLambda関数になります。
クリックタイプはLambda関数に対してイベント情報として渡され、下記のように記載することでクリックタイプのみを取得することが可能となります。
event['deviceEvent']['buttonClicked']['clickType']
Lambda関数に対して渡されるIoT Enterprise Buttonのクリックタイプは、「SINGLE」、「DOUBLE」、「LONG」の3種類となります。
これらのクリックタイプに応じて処理を分岐させることが可能です。
関数の作成が完了したら、IoT Enterprise Buttonと連携させて動作を見てみましょう。
動作確認
ボタンのクリックタイプに応じて下記のようなメールが送られてきます。
シングルクリック
ダブルクリック
長押し
1点注意点として、IoT Enterprise Buttonは6秒間以上長押しすると、デバイスのセットモードに移行してしまい、再度6秒間の長押しを行うまではクリックを受け付けなくなってしまいます。
長押し時の処理を追加する場合には、運用面での注意も必要になってきます。
おまけ
IoT Enterprise ButtonではLambda連携時に、Buttonのライフ情報もイベントとしてLambda関数に渡しています。
IoTボタンがいきなり使えなくなったりしないか心配、といった場合には、Lambda側にてボタンのライフをチェックするような仕組みを設けることも可能です。
今回ご紹介したSNS通知のLambda関数にボタンの残ライフも通知するよう設定したものが下記になります。
import boto3 import json sns = boto3.client('sns') def lambda_handler(event, context): clicktype = event['deviceEvent']['buttonClicked']['clickType'] relife = event['deviceInfo']['remainingLife'] print(clicktype) if (clicktype == "SINGLE"): message = "ボタンが1回押されました" elif (clicktype == "DOUBLE"): message = "ボタンが2回押されました" elif (clicktype == "LONG"): message = "ボタンが長押しされました" else: message = "clickTypeを正常に取得できませんでした" sns_publish(message, relife) def sns_publish(message, relife): request = { 'TopicArn': "arn:aws:sns:ap-northeast-1:123456789012:sns-topic", 'Message': message + "\n\nデバイスの残ライフ: " + str(relife), 'Subject': "[IoT Enterprise Button]clickType test" } sns.publish(**request)
ボタンのライフは1クリックごとに0.05%減っていくようです。 2000回のクリックで100%となるので、IoT Enterprise Buttonの耐久回数2000回というのに一致します。
まとめ
今回はIoT Enterprise Buttonでのクリックタイプに応じた処理の分岐方法についてご紹介いたしました。
1つのボタンで複数の処理を実現することが可能となるので、様々なシーンでお使いいただけると思います。
IoT Enterprise ButtonからLambdaに対しては、デバイスIDなどもイベント情報として渡されるので、DB連携などを行い複数のデバイスを一括で管理、利用者との紐づけといったことも可能となります。
ご興味のある方は是非お試しになってみてはいかがでしょうか。