たるこすの日記

たるこすの日記

リアルからバーチャルへ、バーチャルからリアルへ

[おうちハック]Amazon Dash Button をお風呂場で使う呼び出しボタンとして使う

こんにちは、たるこすです。

今回もおうちハックネタです。

Amazon Dash Button が届いたので、正式な使い方ではなく、お風呂場で使う呼び出しボタンとして使ってみます。
子供をお風呂に入れる際、妻に子供を連れてきてもらいたいタイミングになった時にボタンを押すと、居間のRaspberry Pi から音声メッセージが流れるようにします。

f:id:tarukosu:20170115203833j:plain

以前の記事(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から商品が届いてしまいます。

以下のような画面になったら、右上の×ボタンを押して設定を中止します。

f:id:tarukosu:20170115183248p:plain

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 は外部電源不要でサイズも小さいので、単純なボタンとして使うには非常に便利でした。