[おうちハック]Amazon Dash Button をお風呂場で使う呼び出しボタンとして使う
こんにちは、たるこすです。
今回もおうちハックネタです。
Amazon Dash Button が届いたので、正式な使い方ではなく、お風呂場で使う呼び出しボタンとして使ってみます。
子供をお風呂に入れる際、妻に子供を連れてきてもらいたいタイミングになった時にボタンを押すと、居間のRaspberry Pi から音声メッセージが流れるようにします。
以前の記事(Slack経由でGoogle Calendarの予定をRaspberry Piに音声通知させる)に書いた通り、
Slack のメッセージをRaspberry Piに音声通知させる仕組みは以前作りました。
そのため、Amazon Dash Button を押したらSlackにメッセージが投稿される部分を新しく作成します。
Amazon Dash Button のハックの仕組みとしては、ボタンが押されたときにARPプローブと呼ばれるパケットを送信するので、 同一ネットワークにいるマシンでこのパケットを検知し何らかの動作をさせれば良いようです。
参考にしたページ: Amazon Dash ButtonをただのIoTボタンとして使う - Qiita
今回はRaspberry Pi でパケットを検知し、Slack の Incoming Webhooks という仕組みを使ってメッセージをPOSTします。
Amazon Dash Button のセットアップ
ボタンに付属した説明書の通り、スマートフォンのAmazonアプリを使ってセットアップします。
注意しなければいけないのは、注文する商品の設定をしないことです。
設定をしてしまうと、ボタンを押したら Amazonから商品が届いてしまいます。
以下のような画面になったら、右上の×ボタンを押して設定を中止します。
Slack の Incoming Webhooks の設定
Slack の アプリ連携の一つに、Incoming Webhooks というものがあります。 これを設定すると、以下のような Webhook 用のurlが作成されます。
https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX
このurlに以下のようなJSON形式のデータをPOSTすると、Slack にメッセージを送信できます。
{"text": "This is a line of text in a channel."}
作成されたURLは、後で作成する dasher のコンフィグファイルで使用します。
Raspberry Pi で dasher を使う
ARPプローブを検知しSlackへのPOSTするため、dasher というリポジトリを使います。
必要なパッケージのインストール
まずは、必要なパッケージをインストールします。
$ sudo apt-get install libpcap-dev
また、nodejs, npm がインストールされていない場合には、インストールします。
リポジトリのクローンとライブラリのインストール
以下のコマンドで、リポジトリのクローンとライブラリのインストールを行います。
$ git clone https://github.com/maddox/dasher.git $ cd dasher $ npm install
Dash Button の MAC アドレスを調べる
dasher の script フォルダに入っている find_button を実行すると、以下のようになります。
$ ./script/find_button Watching for arp & udp requests on your local network, please try to press your dash now Dash buttons should appear as manufactured by 'Amazon Technologies Inc.'
この状態で Dash Button を押すと、以下のように検知された Mac アドレスが表示されます。
Possible dash hardware address detected: 68:54:fd:xx:xx:xx Manufacturer: unknown Protocol: udp
スクリプト実行時に表示される説明では、manufacturer が 'Amazon Technologies Inc.'と表示されるとのことでしたが、 実際には unknown となりました。
コンフィグファイルの作成
dasher の config フォルダ内に config.json を作成します。
config.example.json を参考にして、以下のような json ファイルを作成しました。
address 欄には、スクリプトで調べた Dash Button の MACアドレスを設定します。
url 欄には、Slack の Webhook URL を設定します。
{"buttons":[ { "name": "Come Here", "address": "68:54:fd:xx:xx:xx", "url": "https://hooks.slack.com/services/xxxxxxx/xxxxxxxx/xxxxxxxxxxxxxxxxxxxxx", "method": "POST", "json": true, "body": {"text": "お風呂場に来てください"} } ]}
実行
以下のコマンドで dasher を実行します。
$ sudo npm run start
Dash Button を押すと、数秒たって slack にメッセージが投稿され、音声アナウンスが流れるようになりました。
動作している様子(2017/1/22追記)
Amazon Dash Button をお風呂場で使う呼び出しボタンとして使う
おわりに
Amazon Dash Button は外部電源不要でサイズも小さいので、単純なボタンとして使うには非常に便利でした。