LoginSignup
14

More than 5 years have passed since last update.

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

Posted at

お家で、おふぃーすで、そして、お外でも 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 を使える環境はできたので、後はいろいろと応用していきたいと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14