こちらは SORACOM Advent Calendar 2023 19日目の記事です。
今回もSoracom LTE-M Buttonの話です。
そして、SORACOM UGのカレンダーなのにSORACOM成分薄めです。
前回までのお話
開封の儀まで行なって、その後、SORACOM DiscoveryのナイトイベントでLTまでしたんですが・・・
色々やっていて、連携とかしてなかったので、LT内でハンズオンコンテンツ作るぜー!とぶち上げたこともあり、
まずは、初級ということで、通知をしてみようと思った次第。
通知先どうしようか?
日本だと、通知先として、LINEを選択するケース多いと思うんですが、
グローバル向けって考えた時に・・・どこに送る?ってなりました。
SORACOM UGのメンバーとも話したんですが、とりあえずはSlack使っている人は多そうなので、Slack向けで良いのでは?となりましたので、今回はSlackに向けてメッセージを送ります。
実装
今、自分の環境では、GPSマルチユニットからの情報をSORACOM FunkからAWS Lambdaに送り、そこからSlackのWebhook URLにPostするというのが動いていますので、そちらを流用します。
Node.js v12で作ったものなので、Node.js v20でも動くように変えたりはしました。
Soracom LTE-M Button と SORACOM LTE-M Button for Enterpriseの違い
ボタンからのパラメータはeventの中に入ってきますが、Harvestでもわかりますが、
Soracom LTE-M Button と SORACOM LTE-M Button for Enterpriseで差異があります。
- Soracom LTE-M Button
{
"prod_type": 1,
"f_ack": true,
"msg_type": "event",
"seq_number": 65,
"detect_type": "Single short click",
"crc8": true,
"binaryParserEnabled": true
}
- SORACOM LTE-M Button for Enterprise
{
"batteryLevel": 0.75,
"binaryParserEnabled": true,
"clickType": 1,
"clickTypeName": "SINGLE",
"imsi": "123456789012",
"inside_area": 0,
}
SORACOM LTE-M Button for Enterpriseだと、clickType
or clickTypeName
を使いますが( clickType
が無難ですね)、
Soracom LTE-M Buttonでは、 detect_type
になっており、文字列で渡ってきます。
シングルクリック : Single short click
ダブルクリック : Double short click
長押し : Single long click
なので、どのクリックタイプで押されたかは、文字列でチェックすることになりそうです。
もし、Soracom LTE-M Button と SORACOM LTE-M Button for Enterprise で共用の通知を作るとしたら、
パラメータに detect_type があったら、Soracom LTE-M Buttonの形式でチェック、
なかったら or clickType があったら、SORACOM LTE-M Button for Enterpriseの形式でチェック。
となりそうですが、SORACOM Orbitを使って、どちらも共通で使えるパラメータにして渡す・・・とかかな。ちょっとやってみようかなと思います(ああ、久しくOrbitも使っていない)
余談ですが、Soracom LTE-M Buttonはseq_numberを持っているので、押した回数がわかりやすいです。
SORACOM LTE-M Button powered by AWSを銀河系最速で1000回押した人としては、早く押したいものですが、まだ65回とかです。
通知してみた。
通知するとこんな感じです。
現状は、Soracom LTE-M Buttonのみ対応しています。
No Message!
となっているのは、SORACOM LTE-M Button for Enterpriseから呼び出した時のものです。
とりあえず公開してます。
通知用のLambda等をAWS CDK v2で構築するための一式を以下で公開しています。
SlackのWebhookのURLはSecret Managerに格納して、Lambda関数内で取得しています。
https://docs.aws.amazon.com/ja_jp/secretsmanager/latest/userguide/retrieving-secrets_lambda.html
SlackのWebhook URLは
lib/soracom-lte-m-button-handson-stack.ts 内の
<Your Use Slack Webhook Url>
の部分を書き換えてセットしてください。
また、
AWS Parameters and Secrets Lambda Extension のLayerを使っていますので、
Labmdaをデプロイするリージョンと同じリージョンにあるExtension のLayerを使う必要がありますので、
https://docs.aws.amazon.com/systems-manager/latest/userguide/ps-integration-lambda-extensions.html#ps-integration-lambda-extensions-add
を参考に、
<Deploy Region AWS-Parameters-and-Secrets-Lambda-Extension ARN>
を書き換えてください。
※オレゴンリージョンでデプロイしようとして、東京リージョンのLayerのARNをセットしていたダメな人です。
今後
とりあえずざっくりですが、Slack通知できるのはできました。
これをグローバルに向けて、公開できるように早急にドキュメント整理しようと思います。
公開しているものもアップデートしていくと思います。
あ、Amazon Location Service使ったハンズオン資料も整備しないと・・・。