[Mac][Keyboard Maestro] Amazon Dash Button で Slack 通知

Amazon Dash Button を IoT ボタンとして使うことが流行っていたようで、私もボタンを押すと Slack に通知するようにしたい。

以前も挑戦しようとしていたが Dash Button の端末登録の時点で行き詰まっていた。

Amazon Dash Button で端末登録できない – with a Christian Wife
https://wacw.cf/2018/04/18/cannot-register-amazon-dash-button/

Amazon Dash Button で端末登録できない2 – with a Christian Wife
https://wacw.cf/2018/07/05/cannot-register-amazon-dash-button-2/

ただこれは自宅のネットワーク構成に問題があったようで、ネットワーク構成をシンプル化した現在ではうまくいくはず。ということで、Amazon Dash Button で Slack 通知に再挑戦した。

***

調べてみた結果、以下のような方法がネット上で見つかった。

(A)Raspberry Pi で Amazon Dash Button を監視、通知する。
(B)Windows ソフトで Amazon Dash Button を監視、通知する。
(C)DHCP サーバーで Amazon Dash Button を監視、通知する。

***

(A)Node.js で Raspberry Pi で Amazon Dash Button を監視、通知する。

これが一番情報が多い。なのでそれらを参考にすればすぐにできると思った。たいていが Node.js を使った方法だ。参考にしたのは以下のページ。

[おうちハック]Amazon Dash Button をお風呂場で使う呼び出しボタンとして使う – たるこすの日記
https://tarukosu.hatenablog.com/entry/2017/01/15/204044

【Raspberry Pi】Amazon Dash Buttonを押すとLineにメッセージ投稿する方法|CGメソッド
https://www.cg-method.com/entry/2017/05/03/203402/

Amazon Dash Button + Raspberry Piでお弁当屋さんが来たことを通知
https://www.ecomottblog.com/?p=2492

Amazon Dashボタンを使ったIoTデバイス「からあげDashボタン」の作り方 – karaage. [からあげ]
https://karaage.hatenadiary.jp/entry/karaage-dash-button

Post a message to Slack using your Raspberry Pi and an Amazon Dash Button – howchoo
https://howchoo.com/g/nzmxngzizjd/post-a-message-to-slack-using-your-raspberry-pi-and-an-amazon-dash-button

Raspberry Pi と Amazon Dash ButtonでLチカ | きのこタイムズ
http://kinokotimes.com/2018/03/11/raspberry-pi-%E3%81%A8-amazon-dash-button%E3%81%A7l%E3%83%81%E3%82%AB/

Raspberry PiとAmazonダッシュボタンでSwitchBot(スイッチボット)を操作する|ラズパイIoT | TAKEIHO
https://www.takeiho.com/raspberry-dash-to-switch

いつか役立つ! Amazon Dash Buttonで作った「紙がない助けてボタン」でトイレの緊急事態に備える – ICS MEDIA
https://ics.media/entry/15342

でもなぜかどれもうまくいかなかった・・・。

(B)Windows ソフトで Amazon Dash Button を監視、通知する。

これは簡単そう。Windows ソフトを起動しておくだけで監視とできる。ただ肝心の Windows マシンがないので断念。VMware Fusion で起動しておくのも手だけど、このためだけに VMware Fusion を立ち上げ続けるのはコスパが良くない。

参考:
Amazon Dash Buttonを間違った使い方をしてみる – どんちゃんのひまつぶし
https://www.d0nchan.com/entry/amazon-dash-button

アマゾンダッシュボタンを改造しておっぱいボタンにする方法 – teraiのブログ
http://teraino.hatenablog.com/entry/2017/07/30/145337

Amazon Dash Button Hack: 4 Steps (with Pictures)
https://www.instructables.com/id/Amazon-Dash-Button-Hack/

(C)DHCP サーバーで Amazon Dash Button を監視、通知する。

A、B はサーバーとなるマシンが必要となるが、DHCP サーバーを使った Amazon Dash Button の監視なら、ルーターにスクリプトを仕込んでおけばいい。なるほどと思ったけれど、ファームウェアをいじれるルーターが手元にない。Raspberry Pi を DHCP サーバーにする方法もあるようだが、それを使ってスクリプトを実行する方法が分からなかったので断念した。

参考:
Amazon Dash ButtonをIoTボタンとして使う第三の方法:DHCPサーバ設定でスクリプトを起動する – Qiita
https://qiita.com/hnw/items/f7172dd295f04701c38d

***

1日掛かりで試行錯誤を続けていくなかで、自分で解決方法を見つけた!

それは Dash Button の仕組みを理解することで分かった。Dash Button はボタンを押したときだけ通信をし、それ以外は電源が入っていない状態なのだ。

だったら、ping で検知すればいい!

Dash Button に対して ping を定期的に打ち続けて、応答があれば Slack へ通知すればいい。すごく単純な仕組みだ。このの仕組みを使えば、自分のスマートフォンが自宅ネットワークに入ったかどうかを調べて在宅状態を確認したり、サーバーの死活監視もできたりもできる。

ただ以下のサイトを参考にしてスクリプトを作ろうとしたんだけど、知識がなくてどうもうまくできない・・・。

自分が帰宅しているかをRaspberryPiで検知する簡単な方法 – ちぎっては投げるブログ
http://denpa-shinbun.com/entry/ping-phone

Raspberry Pi からスマホにping送信 – 帰宅チェック – Nu
https://nu25.wordpress.com/2017/02/05/raspberry-pi-%E3%81%8B%E3%82%89%E3%82%B9%E3%83%9E%E3%83%9B%E3%81%ABping%E9%80%81%E4%BF%A1-%E5%B8%B0%E5%AE%85%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF/

帰宅したらPCが自動で起動するようにするまでの過程 – 雅さんの忘備録
http://blog.miyabins.net/?p=20

pingの応答が帰ってくるようになったらメールで通知するrubyスクリプト – くろの雑記帳
https://kurochan-note.hatenablog.jp/entry/2014/08/11/231431

でも結局 ping を打っているだけなんだから、Mac の Keyboard Maestro でもできそう。これならプログラミングを理解していない私でもできそうだ。

Keyboard Maestro 8.2.4: Work Faster with Macros for macOS
https://www.keyboardmaestro.com/main/

以下がその方法だ。

(1)Amazon Dash Button の初期設定をする。

私は iPad の Amazon アプリを使った。「左上のハンバーガーアイコン>アカウントサービス>バーチャル—と Dash Button 端末>メニュー>設定>Dash Button 端末>新しい端末の設定」とタップし、画面に従って Wifi に接続する。

そして、最後の注文する商品の画面になったらバツボタンを押してキャンセルする。

(2)Mac の LanScan、iOS の Fing 等のネットワークツールを使って Dash Button の IP アドレスを調べる。

「LanScan」をMac App Storeで
https://itunes.apple.com/jp/app/lanscan/id472226235?mt=12

「Fing (フィング) – ネットワークツール」をApp Storeで
https://itunes.apple.com/jp/app/fing-%E3%83%95%E3%82%A3%E3%83%B3%E3%82%B0-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%84%E3%83%BC%E3%83%AB/id430921107?mt=8

その際、Vendor が Amazon Technologies Inc. になっているものが Dash Button だ。

あるいはボタンを押している間に Terminal で $ sudo tcpdump | grep BOOTP/DHCP を実行する方法もある。

参考:
Amazon Dash Buttonで出社する – iberianpigsty
https://iberianpig.github.io/posts/2016-12-18-%E3%82%A2%E3%83%9E%E3%82%BE%E3%83%B3%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%A7%E5%87%BA%E7%A4%BE/

可能なら IP アドレスはルーターで固定しておくのがいいだろう。

(3)Slack で Incoming Webhooks を取得する。

https://slack.com/services/new/incoming-webhook

(4)Keyboard Maestro で以下のように設定する。

(2の IP アドレスが 192.168.1.15 で、7時〜 22 時の間に Dash Button が押されたら「ご飯だよ!」と Slack の #test チャンネルに投稿する場合)

20190118_DashButton2Slack

適度に Pause を入れている。最後に自分自身のマクロに再び戻るようにして、延々と動くようにしている。

いろいろ数値を変えて試行錯誤した結果、これが一番ちゃんと届くと分かった。といっても、時々届かないこともある・・・。

もちろん、Keyboard Maestro なのでSlack に通知するだけでなく、Mac に通知を表示させたりメールを送信させたりすることは簡単に実装できる。

ネットワークにはいくらか付加が掛かっていると思う。Mac 自体は特に CPU が上昇している感じはない。

これを実現するためには Mac を常に起動しておく必要があるが、私はメディアサーバーとして常時起動している Mac があるので、これに仕込んでおくことにした。

また、Dash Button は商品登録をしていない状態なので、Amazon から時々「商品を選択してください」というメールが届くようになる。

参考:
System sleep trigger only during a specific Time of day? – Questions & Suggestions – Keyboard Maestro Discourse
https://forum.keyboardmaestro.com/t/system-sleep-trigger-only-during-a-specific-time-of-day/10996

ping ~ネットワークの疎通を確認する:ネットワークコマンドの使い方 – @IT
http://www.atmarkit.co.jp/ait/articles/0108/30/news002.html