Amazon Dash Button ハックで、コーヒー豆を(人力で)取り寄せる

今回の記事は、こんな人が書いてるもぐー!
タネマキ運営者
横浜駅のコワーキングスペース タネマキを運営しています。コーヒー部、ジャグリング部。いつの間にかに2児の父で毎日てんやわんや。最近、クロスフィットを始めました。

今更感ありますが、Amazon Dash Button(アマゾンダッシュボタン)を使って、「コーヒー豆が切れたよ」「コーヒー飲む人いる?」機能を実現してみました。

1ヶ月ちょい使ってますが、そこそこ便利です(押すのすら忘れるので自動化したい。)。ボタンを押すと、タネマキのコーヒーレンジャーが各地で豆を買ってきてくれるので嬉しい!

先日は、コーヒー部長が「もうすぐお届け。Amazon Freshよりも速いのではなかろうか(๑•̀ㅂ•́)و✧」と、Amazon に挑みつつコーヒー豆を持ってきてくれました。

Amazon Dash Button ってなんぞやー

Amazon Dash Button の詳しい説明は端折りますが、ボタンを押すと、Amazonからあらかじめ設定した荷物が届くボタンです。本来は、洗濯洗剤とかを発注するデバイスです。

Amazon Dash Button がアメリカで発売されてすぐ、ドミノピザを発注できるボタンに変えた人がいて、話題になり、その後も Amazon Dash Button をハックする人が続々といたりしました。

日本でも、年末か今年になってくらいに発売され、Amazon Dash Button を魔改造する人が記事を書いたりしているので、興味ある人は、ググってみてください。

AWS IoT ボタン

ちなみに、日本では、まだ未発売ですが、「AWS IoT ボタン」ってのがあり、ハックせずに使いたい方は、こちらを待つのが良いかと。まぁ個人が遊ぶ程度なら、とりあえず、Amazon Dash Button でも良いかもですが、監視用のデバイスが必要になります。ラズパイとか。「AWS IoT ボタン」であれば、単体で動作できますが。

AWS IoT ボタン (プログラミング可能な Dash Button) | AWS

こちらは、AWS といろいろ連携が出来て便利そう。楽しみ。

シェアコーヒー

それでですね、タネマキでは、シェアコーヒーってのがあって、月額メンバーの人とかが、豆を買ってきて、お互いの豆をシェアしてたりします。挽きたてのコーヒーが飲めて幸せです。(ちなみに、豆代金を払えば誰でも飲めるよ!)

豆が切れる度に、「豆買ってきてー!」と slack に書き込んでいたのですが、色々面倒なので、Amazon Dash Button を押したら、slackにつぶやくようにしました。

ついでに、コーヒーを入れる時に、数人分まとめて入れたりするので、それもslackにつぶやいていたので、押したらコーヒー同志を募るようにしてみました。連れションならぬ連れコーヒー。

tcpdump

んでで、もうハック方法は、qiita とかで既出なので、詳しく書きませんが、ライブラリなど使わずに、tcpdump とシェルスクリプトを使って手軽にできそうな方法を載せておきます。dasher などのライブラリも使ってみましたが、なかなか便利。お好きな方を!

前提として、Raspberry Pi などで、監視用のデバイスが必要です。今回は、そのデバイスで動かし続けるコードになります。

なお、今回は、Raspberry Pi Zero を使っています。特に問題なく稼働しています。

tcpdump でのMACアドレスの特定は、

$ sudo tcpdump arp -e

とか

$ sudo tcpdump udp -n

とか

$ sudo tcpdump -vv udp | grep DHCP

で探せるかと思います。あ、ダッシュボタンを押してくださいね。

tcpdump の後ろに arp とかのプロトコルを指定すると、そのプロトコルをフィルターしてくれます。-e で、MACアドレスが出力されました。

-n は、名前解決を行わないオプション。その分ちょっと速くなるはず。

AmazonDashButton.sh
#!/bin/bash -x
sudo tcpdump udp -nl | while read line; do
if [[ echo ${line} | grep "MACアドレス" ]] ; then
echo "ブラウン"
fi
done
exit 0

上記で、とりあえずは、動くかと思われます。あとは、systemd でサービス化しておけば良いかと。

追記 2019/04/10
ボタン1押しにつき、2回くらいリクエストが飛ぶことがあるので、不都合な場合は、1回しかリクエストが飛ばない処理すると良いかと。
追記 ここまで

tcpdump のオプション、-l で、一行ごとに出力できるようです。これないと、ループで取得できなかった。

tcpdump を調べたことなかったのですが、いろいろなオプションがあって、奥が深いなぁと。

おしまい。

タネマキのSNS

モグ雄の Twitter タネマキの Facebook ページ タネマキの LINE