SORACOM LTE-M Button のサンプルコード集 "j3tm0t0/1-click" を使いこなす


SORACOM LTE-M Button powered by AWS (以下 Button ※) のアドベントカレンダーのバックアップ担当 ソラコム松下(Max) です。

Button を本格的に使うためには AWS Lambda を使ってコードを書く必要がありますが、サクっと使いたい!と思ってる方にはハードルになっているようです。

そんな中、同じくソラコムのなかのひと j3tm0t0 が j3tm0t0/1-click というリポジトリで以下のサービスとの連携をするためのコードを公開してくれています。

今回は使い方をサクッと紹介していきます。

AWS IoT Core を MQTT ブローカーとして使う

https://github.com/j3tm0t0/1-click/tree/master/functions/aws-iot
README.md に詳細な説明が書かれているので、そちらだけで大丈夫です。

注意点

apex を使わずに index.js をコピペする場合は AWS Lambda の設定でランタイムを Node.js 8.10 に、そしてハンドラを index.handle にしておいてください。(標準では index.handle r と末尾に r が付きます)

環境変数 ENDPOINT が無い場合は東京リージョン(ap-northeast-1) の AWS IoT Core に接続しようとします。他のリージョンにしたい場合は ENDPOINT を設定するようにしてください。

qos は 0 もしくは 1 のみです。要するに AWS IoT Core が受けられる QoS 以上は設定できません。

topic に hoge/bar と設定した場合、実際に送信される topic 先は hoge/bar/<DSN> となるので、subscribe 側は hoge/bar/# としておくと良いでしょう。

AWS IoT Core の Device Shadow を更新する

https://github.com/j3tm0t0/1-click/tree/master/functions/aws-iot-shadow
README.md に詳細な説明が書かれているので、そちらだけで大丈夫です。

Device Shadow に対する動作

AWS IoT Core の Device Shadow に対しては、AWS IoT 1-Click のプレイスメント属性 SINGLE DOUBLE LONG の設定が存在するか否かで動作が変わります。

存在する場合

設定されている値 (JSON) が AWS IoT Core の /update トピックに送信されます。

この時 statereported でも desired どちらでも設定可能ですし、その中のペイロードも自由に設定できます。

存在しない場合

以下の JSON がAWS IoT Core の /update トピックに送信されます。

(SINGLE の部分は DOUBLE や LONG にもなります)

{"state":
  {"reported" :
    {"clickType" : "SINGLE" }
  }
}

Device Shadow を subscribe する

/update/delta トピックを subscribe するのが定石です。

注意点

apex を使わずに index.js をコピペする場合は AWS Lambda の設定でランタイムを Node.js 8.10 に、そしてハンドラを index.handle にしておいてください。(標準では index.handle r と末尾に r が付きます)

AWS IoT Core を MQTT ブローカーとして使う 時と同様に、東京リージョン以外の AWS IoT Core と通信したい場合は環境変数 ENDPOINT を設定するようにしてください。

この Lambda 関数を配置したリージョンと Device Shadow の操作対象のモノがある AWS IoT Core のリージョンは一致している必要があります。

AWS IoT 1-Click のプレイスメント属性上で thingName が未設定だった場合は DSN がそのまま利用されます。よって thingName もしくは DSN と一致する "モノ" を、あらかじめ AWS IoT Core 上に作っておいてください。

Amazon CloudWatch のメトリクスに送信する

https://github.com/j3tm0t0/1-click/tree/master/functions/cloudwatch
README.md がありませんが、準備は Lambda 関数の実行時ロールに cloudwatch:PutMetricData がついている事を確認するだけです。

注意点

apex を使わずに index.js をコピペする場合は AWS Lambda の設定でランタイムを Node.js 8.10 に、そしてハンドラを index.handle にしておいてください。(標準では index.handle r と末尾に r が付きます)

IFTTT の Webhooks を呼び出す

https://github.com/j3tm0t0/1-click/tree/master/functions/ifttt
README.md に詳細な説明が書かれているので、そちらだけで大丈夫です。

SINGLE / DOUBLE / LONG で呼び出す Webhooks を切り替えたい

自作だっしゅボタンを SORACOM LTE-M Button powered by AWS に置き換えた事でわかったことでも同じ解説しています。

IFTTT の Webhooks 設定では(受け付けの際の)イベント名を GARAGEOPEN_DOUBLE としています。

一方 AWS IoT 1-Click のプレイスメント属性では event に GARAGEOPEN_$clickType と設定します。

これはプレイスメント属性に入っている $clickType を実際の clickType に置き換えるといった実装がされており、例えばシングルクリックなら GARAGEOPEN_SINGLE という IFTTT の Webhooks イベントを起動します。これで Lambda 関数を書き換えることなく、3種類の Webhooks を起動できるようになります。

注意点

apex を使わずに index.js をコピペする場合は AWS Lambda の設定でランタイムを Node.js 8.10 に、そしてハンドラを index.handle にしておいてください。(標準では index.handle r と末尾に r が付きます)

SORACOM Harvest にデータ送信する

SORACOM Harvest というデータ収集・蓄積サービスがあります。
2018年7月からインターネット越しに SORACOM Harvest へデータが入れられるようになりました。

https://github.com/j3tm0t0/1-click/tree/master/functions/inventory
実際の設定方法は README.md に詳細な説明が書かれているので、そちらだけで大丈夫です。

注意点

apex を使わずに index.js をコピペする場合は AWS Lambda の設定でランタイムを Node.js 8.10 に、そしてハンドラを index.handle にしておいてください。(標準では index.handle r と末尾に r が付きます)

README.md では地図が表示されていますが Button には GPS 等の位置を特定する仕組みは入っていません。この地図は AWS IoT 1-Click のプレイスメント属性に lat = 35.xxxxxlon = 139.xxx という固定の値を入れておき、それを表示させているという例です。

Slack の Webhook を呼び出す

https://github.com/j3tm0t0/1-click/tree/master/functions/slack
README.md がありませんので、こちらで解説します。

必要な情報と設定先

※設定先が2つ以上ある場合はどちらか1つでOKです

  • Slack の Webhook URL
    • Lambda 関数の環境変数 SLACK_URL
    • AWS IoT 1-Click のプレイスメント属性 slackUrl
  • Slack 上での送信時ボットの画像
    • AWS IoT 1-Click のプレイスメント属性 iconEmoji
    • AWS IoT 1-Click のプレイスメント属性 iconUrl
  • 送信先の Slack チャンネル
    • AWS IoT 1-Click のプレイスメント属性 slackChannel

実際に設定する値は Slack APIでメッセージ送信 を参考にしてみてください。

注意点

apex を使わずに index.js をコピペする場合は AWS Lambda の設定でランタイムを Node.js 8.10 に、そしてハンドラを index.handle にしておいてください。(標準では index.handle r と末尾に r が付きます)

LINE の Bot と連携する

https://github.com/j3tm0t0/1-click/tree/master/functions/line-bot_py
上記で紹介しているのは LINE Messaging API (後述する2番目の方法)です。Bot の作り方から解説してあります。

ちなみに LINE との連携方法は2つあります。
1つ目が LINE Notify です。その人のアカウントを使って成り代わって送信するといったものになります。
2つ目が LINE Messaging API です。通称 LINE Bot と呼ばれるようで、要するに Bot という人格を作り、そいつと会話するといったものになります。

注意点

Runtime は Python 3.6 をお選びください。

あとがき

これらのコードをそのまま使うも良し、fork して改良したら是非 P-R をお待ちしております!(私がレビューするわけじゃないけれど)

EoT