Amazon Dashボタンでこれ買ってきてボタンを作る
Amazon Dashボタンについて
Amazon Dashボタンをご存知でしょうか。
Amazonが提供している物理ボタンで、ボタンを押すことで設定した商品をお手軽に購入することができる便利グッズです。最近、対応商品が大幅に増えて計100点を越えたらしいので今後ますます拡大されていくのかもしれません。
Amazon Dash Button お気に入りの商品をワンプッシュで
しかし、それだけ商品が増えても、欲しい商品がない、商品はあるが近所のスーパーで買った方が安い、など(個人的には)いろいろあったりします。我が家の朝食はだいたい食パンなのですが、AmazonDashボタンには食パンボタンはありませんし。
そんなこんなを解消すべく、自分の好きな商品を好きな場所で購入出来るように、設定した商品名をタスクリストに追加するボタン、を作ってみました。これで食パンがない場合にボタンを押せばタスクリストに追加され買い忘れを防ぐ事が出来ますね!
概要
タスクリストはWunderlistを家族で共有して利用しているので、Zapierで連携させ、同時にSlackにも投げるようにしました。(IFTTTにはWunderlistがありませんでした)
ですので、既存のライブラリやサービスの組み合わせのみで実現可能です。設定のJSONくらいしか書きません。(黒い画面でコマンドは打ちますが)
- Wunderlist | To-do リスト、リマインダー、タスク管理 - App of the Year!
- The best apps. Better together. - Zapier
- Learn how IFTTT works - IFTTT
- Slack: Where work happens
Amazon Dashボタンのセットアップ
購入
Dashボタンのページから普通に購入します(プライム会員限定です)。500円かかりますが、初回の商品注文時に500円差し引かれるため、通常は実質ボタン代は0円、という触れ込みです。
結構ちゃんとした箱に入っていて満足感があります。
設定
購入出来たらWi-Fiに接続すべく設定します。設定はスマートフォンのamazonアプリ上で行います。付属の説明書にも記載がありますので簡単です。(ちなみにDashボタンはWi-Fiの5GHz帯には対応していないようです)
Wi-Fi接続後、商品を選択する画面まで来たところで、おもむろに右上の×ボタンで画面を閉じ、セットアップを終了します。これで、Wi-Fiには接続されているが、商品は注文されない、という状態になります。(ただし、設定してしまった後でも解除することは出来るので、最初からやり直す事は可能です。なので初回分だけ注文してその後解除…(略))
ボタンを押して、白く光った後に赤く点滅する状態になったらOKです。
RaspberryPi
Dashボタンが押された事を検知するための仕組みは、以下のようにIPアドレス取得のタイミングを監視することで実現しているようです。
通常の動作の中で、Amazon Dash Buttonが「DHCPでIPを付与してもらうために頑張る」というところがキーです。
DHCPでIPを取得するなかで、割り当てられたIPが他のマシンと重複してないかを確認するときにARP要求をブロードキャストします。
Amazon Dash ButtonのMACアドレスからARP要求が飛んでくる事を監視するサーバをネットワーク内に置いておけば、ボタンを押されたタイミングでそのサーバから何かしらのアクションを起こすことができます。
http://qiita.com/dkawashi/items/e6621c4b712b509c73ec
そのため、常に起動しDashボタンの起動を監視するためのサーバが必要となります。今回はRaspberryPi2 ModelBを使用しました。
サーバの設定
RaspberryPiの起動やOSのインストールなどは以下などを参考にしてください。
Raspbianが起動して、sshでアクセス出来るようになっていればOKです。
dasher
RaspberryPi側にて、Dashボタンの監視には、dasherというDashボタン用の便利パッケージを使用します。
maddox/dasher: A simple way to bridge your Amazon Dash buttons to HTTP services
インストール
以下の手順でインストールを行います。dasherはNode.js製になるので、RaspberryPiにNode.jsなどを入れていきます。
$ sudo apt-get install libpcap-dev
$ sudo apt-get install npm
Node.jsはラズパイ用に簡単にインストール出来るという、node-arm、を利用します。
$ wget http://node-arm.herokuapp.com/node_latest_armhf.deb
$ sudo dpkg -i node_latest_armhf.deb
dasherをクローンしてインストールします。
$ git clone https://github.com/maddox/dasher.git
$ cd dasher
$ sudo npm install
これでインストールは完了です。
Macアドレス
Dashボタンからのアクセスであることを識別するために、設定したいDashボタンのMacアドレスを取得します。dasherにはMacアドレスを取得するために仕組みが組み込まれているのでそちらを利用します。
$ sudo ./script/find_button
上記を実行すると接続待ちの状態となるので、その状態でDashボタンのボタンを押します。上手くいくと以下のように取得出来ます。
$ sudo ./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.'
Possible dash hardware address detected: xx:xx:xx:xx:xx:xx Manufacturer: unknown Protocol: udp
manufacturedに、Amazon Technologies Inc.
と表示されるとの説明が出ていますが、実際にはunknown
で表示されました。この、 xx:xx:xx:xx:xx:xx
の部分がMacアドレスとなりますのでメモしておきます。
設定ファイル
監視するDashボタンのMacアドレス、送信先のURLなどを記述したJSON形式の設定ファイルを作成します。config
ディレクトリ以下に config.json
というファイルを作成します。
中身は以下のように記述します。
{"buttons":[
{
"name" : "NAME",
"address": "xx:xx:xx:xx:xx:xx",
"url": "https://your.request.uri.com/",
"method": "POST",
"json": true,
body": {"value1": "any value", "value2": "another value", "value3": "wow, even more value"}
}
]}
name
: 処理の名前address
: 監視するDashボタンのMacアドレスurl
: リクエスト先のURLmethod
: リクエストメソッドjson
: JSON形式なのでtruebody
: 送信内容
Zapier
あとは、ZapierにWebhookとWunderlistを連携するZap(Zapierでは設定をそう呼ぶ)を作成するだけです。
Webhook
まずはRaspberryPiから送信する先のURLをWebhookを使って設定します。
Catch Hookを選択します。
Edit Optionsは何も設定しなくてよいです。
設定が完了したらWeb Hook用のURLが表示されるのでコピーしておきます。
生成されたWeb Hook用のURLは一度送信しておかないと有効となりません。また、その際に送信された内容も読み取ってくれるため、RaspberryPiからこのURLに送信しておきます。送信するJSONファイルは以下のように設定しました。
{"buttons":[
{
"name": "Zapier web hook",
"address": "xx:xx:xx:xx:xx:xx",
"url": "https://hooks.zapier.com/hooks/catch/xxxxxx/xxxxxx/",
"method": "POST",
"json": true,
"body": {"text": "送信内容"}
}
]}
dasherを起動し、ボタンを監視状態にします。
$ sudo npm run start
> dasher@1.4.1 start /home/pi/dasher
> node app.js
[2017-07-21T05:53:28.481Z] Slack web hook added.
この状態でDashボタンを押すと上記設定ファイルより、WebHookへPOST送信されます。
送信後、設定が完了出来るようになっているはずですので、完了します。
しばらく待つと確認が完了します。
Wunderlist
次に起動するサービスを設定します。Wunderlistを選択します。
Wunderlistのアカウントと連携します。
連携完了後、どのようなタスクを作成するのかの設定を行います。
タスクを追加する先のリストはあらかじめ作成しておいた、「買い物リスト」という名前のリストに設定しました。追加するタスクの内容は、Webhookで受け取ったリクエスト内容の、 text
を入れるようにします。
最後にタスクの動作をテストし、ZAPをオンにしたら完了です!
Zapierは一つのトリガから複数の動作を設定出来るため、Wunderlistへのタスク追加と同時に、Slackへの投稿も設定してやることも出来ます。Slackへの投稿の設定も同じようにポチポチしていけば出来ると思いますので割愛させて頂きます。
Dashボタンのカスタマイズ
こちらにDashボタンのテンプレートを公開してくださっている方がいますので、そちらを使わせてもらいDashボタンのラベルを作成しました。
Dashボタンのテンプレート(PDF)
( Amazon Dash Buttonを(正しくない方向で)使ってみた - Qiita より)
アイコンはいらすとやさんを利用させてもらいました。
食パンのイラスト「一斤」 | かわいいフリー素材集 いらすとや
丸の部分を切り抜くのがなかなか大変でしたが、切り取ってはりつけます。シールに印刷して貼り付けるのが一番キレイだと思いますが、普通の紙に印刷して、のりで貼り付けても大丈夫でした。
稼働
最後に食パンボタンが押されたら食パンが追加タスクに追加されるようにするため、設定のJSONファイルを食パンに変更します。
{"buttons":[
{
"name": "shoku-pan button",
"address": "xx:xx:xx:xx:xx:xx",
"url": "https://hooks.zapier.com/hooks/catch/xxxxxx/xxxxxx/",
"method": "POST",
"json": true,
"body": {"text": "食パン"}
}
]}
(もし複数登録したい場合は、 buttons
の中身を設定したいボタンの数だけ記述してやればよいです。)
前述の通り、Dasherを起動します。
$ sudo npm run start
おもむろにボタンを押し、タスクに登録されれば完成です!
(Slackへ投稿されている様子)
すごく長くなってしまいましたが以上となります。
お疲れ様でした。
まとめ
このようにRaspberryPiのセットアップが少し大変な印象もありますが、結構お手軽に作る事が出来ました。さらにRaspberryPi Zeroを使えばDashボタンと合わせても1000円程度で環境を揃える事ができるという安さも驚きです。
今回はZapierでお手軽に設定しましたが、自分でプログラムを書くことも出来るようなので組み合わせなどによってはもっと面白いことも出来そうです。
実はAmazonが公式に出している、IoT用のDashボタンなるものが存在しており、このボタンを使えばAWSとの連携などが簡単に出来たりするようです。ただし、日本未発売な上に、$19.95 とそれなりの値段がします。
AWS IoT ボタン (プログラミング可能な Dash Button) | AWS
ですので、このハック方式だといつまで使えるのかは正直不明(未設定のまま放置されているボタンは無効化される、とか)ですので、その辺は自己責任でよろしくお願いします。
とはいえ、まずはきっかけとして試してみてはいかがでしょうか。