AWS IoTボタンを買ってslackにポストしてみた
あらまし
ふとネットをさまよっていると、こんなものを見つけました。
「こっ...これは!」
翌日の午前中には届いていました。
AWS IoT ボタンとは
WiFiなど[1]でインターネットにつないでボタン押下イベントを送信することができます。
ボタン押下イベントはAWS IoTで取得し、そこからSNSやLambda起動などができます。
Lambdaが起動するということはつまりなんでもできます。夢が広がりますね。
動かしてみる
本記事では、サンプルとして「ボタンを押したらslackにメッセージをポストする」ということを行います。
ボタンをAWS IoTに認識させる
最近のこの手のデバイスの初期設定はスマートフォン経由で行うことが多いですが、こちらも例に漏れずアプリから接続します。
スマートフォンのアプリストアよりAWS IoT 1-Clickというものを探し、インストールして起動します。
AWSアカウントを入力してログインし「デバイスIDで登録」よりバーコードスキャンを起動し、IoTボタン裏をスキャンすれば登録できました。
次にPCブラウザにてAWSコンソール > AWS IoT 1-Clickのサービスを開き、デバイスが見えないようであれば[2]登録画面より登録します。
デバイスIDはスマートフォンアプリ側で確認できる英数16文字のものです。なおこれはAmazonの注文メールにも書いてありました。
サイドメニューの管理 > デバイス にIoTボタンが登録されていればOKです。
slackにポストするlambda関数を用意する
ボタン押下イベントから発火させる関数を用意します。
slackにてincoming webhookのURLを取得しておき[3]、そこにメッセージをポストする処理を書きます。
自分はrubyを使うことが多いのでrubyで書きます。最近はランタイムの選択肢が増えてなによりですね。
今回用意したコードは以下のようになりました。
require "net/https"
require "uri"
def lambda_handler(event:, context:)
uri = URI.parse('https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/xxxxxxxxxxxxxxxxxxxxxxxx')
res = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == "https") { |http|
http.request(Net::HTTP::Post.new(uri).tap { |req|
req.body = {
channel: 'random',
username: 'dash',
text: 'time',
}.to_json
})
}
{ statusCode: 200, body: res.to_s }
end
テスト実行し、メッセージがポストされていればOKです。
ボタンから関数を発火させる
AWS IoT 1-clickサービスの画面にもどり、プロジェクトを作成します。
基本的にダイアログに従って適当に入力していけば問題ないです。デバイステンプレートにて作成したLambda関数を指定しておきます。
作成できたらプロジェクトの画面に移り、プレイスメントを作成(デバイスを紐付ける的な)を行います。
プレイスメントに適当な名前をつけ、テンプレートに対してデバイスを選択します。
完了したら、おもむろにボタンを押します。
まとめ
「ボタンを押してLambda関数を発火させる」ことまでできました。
あとはアイデアの赴くままに処理を書けばなんでもできますね。
Discussion