6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS IoTボタンを買ってslackにポストしてみた

Last updated at Posted at 2019-07-26

zennに移行しました: https://zenn.dev/cumet04/articles/aws-iot-button-slack-post
qiita側の記事を消す予定は特にありませんが、更新することはありません。


あらまし

ふとネットをさまよっていると、こんなものを見つけました。
https://www.amazon.co.jp/dp/B075FPHHGG

「こっ...これは!」

翌日の午前中には届いていました。

AWS IoT ボタンとは

https://aws.amazon.com/jp/iotbutton/
Amazonダッシュボタンとほぼ同じハードウェアで、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で書きます。最近はランタイムの選択肢が増えてなによりですね。
今回用意したコードは以下のようになりました。

lambda.rb
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関数を指定しておきます。

作成できたらプロジェクトの画面に移り、プレイスメントを作成(デバイスを紐付ける的な)を行います。
プレイスメントに適当な名前をつけ、テンプレートに対してデバイスを選択します。

完了したら、おもむろにボタンを押します。

image.png

まとめ

「ボタンを押してLambda関数を発火させる」ことまでできました。

あとはアイデアの赴くままに処理を書けばなんでもできますね。

  1. あまり何も確認せずに購入したためWiFi以外が使えるのかは確認できていません。

  2. この時点で試行錯誤したため、スマートフォン側を先に完了すればブラウザ側での操作が必要なのかはわかりません。

  3. 取得方法はここでは割愛

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?