どこでも Amazon Dash Button を使えるようにしてみた


お家で、おふぃーすで、そして、お外でも Amazon Dash Button を利用できる環境を考えてみました。
無線LANルータや Raspberry Pi がなくても、どこでも Amazon Dash Button を使うことができます。
試しに、もういい加減話を切り上げたいから、Amazon Dash Buttonを押して、自分に電話が来たように振る舞ってみたの、どこでも使えるバージョンを構築してみました。

便利な仲間たち(動作確認環境)

  1. Androidスマホ(Nexus4, Nitrogen OS 7.1.2, root化済で動作確認。roo化必須です)
  2. Amazon Dash Button(好きなのを)

ポイント

  1. 無線LANルータの代わりは、AndroidスマホのWi-Fiテザリングを使います。
  2. Raspberry Piの代わりは、Androidアプリの Termux を使います。
  3. IFTTT - WebhooksIFTTT - VOIP Calls を使ってVOIPコールを実現します。

Termuxのインストール

スマホ上でLinux環境を構築し、無線LANルータや Raspberry Pi の機能を代替えします。

  1. Operation KiWi - スマホ上にLinux環境が作れるTermuxが最高に楽しいさん通りに Termux をインストールします。ssh のところまででOKです。リモート接続すると文字入力が簡単です。

  2. termux-sudo で sudo できるようにし、その後 tcpdump が動作するか確認します。

$ cd
$ pkg update
$ pkg upgrade
$ pkg install curl
$ pkg install ncurses-utils
$ pkg install git
$ git clone https://github.com/st42/termux-sudo
$ cd termux-sudo
$ cat sudo > /data/data/com.termux/files/usr/bin/sudo
$ chmod 700 /data/data/com.termux/files/usr/bin/sudo
$ pkg install tcpdump
$ sudo tcpdump

”sudo tcpdump" を実行すると、一旦スマホ側でスーパーユーザーリクエストが表示されるので、
【選択を記憶する】→【許可】します。その後パケット情報が表示されれば問題ありません。

AndroidスマホでWi-Fiテザリングの設定をする

1.【設定】→【無線とネットワーク】→【もっと見る】→【テザリングとポータブルアクセスポイント】→【Wi-Fiアクセスポイントをセットアップ】で、「ネットワーク名」や「パスワード」などを設定して【保存】します。

 ポータブルWi-Fiアクセスポイントを「ON」にします。

Amazonアプリで、Amazon Dash Button のWi-Fiアクセスポイントを、スマホのWi-Fiアクセスポイントに切り替える

  1. 一旦 Amazon Dash Button を無効にし、再セットアップします。

【アカウントサービス】→【Dash端末】→【端末を管理】→【Dash Button】→【このDash Buttonを無効にする】

【アカウントサービス】→【Dash端末】→【新しい端末をセットアップ】

【別のWi-Fiネットワークを選択】をクリックします。

「周辺のネットワーク」にスマホのWi-Fiアクセスポイントが表示されるので、それを選び、「パスワード」を入力します。

IFTTT で Amazon Dash Button が押されたら、VOIPコールするように設定する

「Webhooks」を選びます。

「Event Name」を入力します。

「VoIP Calls」を選びます。

「Voice Message」を入力します。日本語でも大丈夫です。

IFTTT - Webhooks】→【Settings】で、「secret key」を確認します。
スマホだと画面が小さいので途中までしか表示されません。パソコンで確認するのがよいと思います。

Termuxの設定

(注意)スクリプトを実行するときは、ポータブルWi-Fiアクセスポイントが「ON」になっているのを確認してください。

  1. スクリプト find_button.sh を作成し、Amazon Dash Button の Macアドレスを調べます。

uepon日々の備忘録 - RaspberryPiでも消臭力してみたさんを参考にしました。

find_button.sh
#!/data/data/com.termux/files/usr/bin/bash

tcpdump -i wlan0 -e | while read line
do
  if [[ $line = *Broadcast,\ *ethertype\ ARP*Request* ]]; then
    set -- $line
    echo "found" $2
  fi
done
$ chmod 700 ./find_button.sh
$ sudo ./find_button.sh
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlan0, link-type EN10MB (Ethernet), capture size 262144 bytes
found XX:XX:XX:XX:XX:XX
  1. スクリプト fire_button.sh を作成し、Amazon Dash Button を押すと VOIPコールが来るようにします。 変数 adb_mac, ifttt_event_name, ifttt_secret_key を環境に合わせて変更します。
fire_button.sh
#!/data/data/com.termux/files/usr/bin/bash

adb_mac="XX:XX:XX:XX:XX:XX"
ifttt_event_name="XXXXXXXX"
ifttt_secret_key="XXXXXXXXXXXXXXXXXXXXXX"

tcpdump -i wlan0 -e | while read line
do
  if [[ $line = *$adb_mac*Broadcast,\ *ethertype\ ARP*Request* ]]; then
    set -- $line
    echo "found" $2
    curl https://maker.ifttt.com/trigger/$ifttt_event_name/with/key/$ifttt_secret_key
  fi
done

```shell-session
$ chmod 700 ./fire_button.sh
$ sudo ./fire_button.sh

Amazon Dash Button を押すと VOIPコールが来ます。

「ACCEPT」を押すとこんな画面になります。

気になる点

  1. スマホのWi-Fiテザリングを使うと、スマホのバッテリ消耗が激しいです。
  2. 【設定】からWi-Fiテザリングを「ON」にすると動作しますが、ウィジェットから直接だと動作しないです。
  3. 定番の Dash Button for Node などを使いたかったのですが、うまくいきませんでした。

という訳で、とりあえず下記アプリをインストールし、使いたいときだけ「ON」にして運用しています。
Termux:Widget add-on
テザリングのショートカット
WiFi OnOff

最後に
まだ不完全ですが、とりあえずお外でも Amazon Dash Button を使える環境はできたので、後はいろいろと応用していきたいと思います。