Node.jsでAmazon Dash Buttonのリクエストを監視する処理の実装

設定したAmazon Dash ButtonとSlackを連携させるには、Node.jsのモジュール「Dasher」を使います。Dasherは、インストールしたパソコンと同一ネットワークのAmazon Dash Buttonを監視し、ボタン押下時に指定したURLへHTTPリクエストを送信します。このURLにSlackのメッセージ送信用URLを設定することでSlackへメッセージが送信されます。

1. 作業用フォルダーを作成

Amazon Dash Buttonを監視するアプリを作成するフォルダーを任意の場所に作成します。

2. DasherをGitからクローン

コマンドライン(Windowsではコマンドプロンプト、macOSではターミナル.app)を立ち上げます。次のコマンドで作成したフォルダーへ移動してください。

cd [作成したフォルダーのパス]

作成したフォルダーへ移動できたら、次のコマンドでDasherのGitをクローンします。

git clone https://github.com/maddox/dasher.git

クローンに成功すると次のようなデータがフォルダー内に追加されます。

3. Dasherの実行に必要なデータをインストール

DasherをGitからクローンしたら、次のコマンドでdasherフォルダーへ移動します。

cd dasher

dasherフォルダーへ移動できたら、次のコマンドでDasherの実行に必要なデータをインストールします。

npm install

4. Amazon Dash ButtonのMacアドレスを調べる

DasherでAmazon Dash Buttonを監視するには、Amazon Dash ButtonのMacアドレスの指定が必要です。次のコマンドを実行してMacアドレスを調べます。

script/find_button

コマンドを実行すると、同一ネットワーク内で通信している端末が検出されます。Amazon Dash Buttonを押すと次のような文字列が表示されるので、その中からMacアドレスをメモし、Ctrl+Cでコマンドを終了します。

Possible dash hardware address detected: [Macアドレス] Manufacturer: unknown Protocol: udp

※Macアドレスの例「00:11:22:33:44:55」

5. 設定用JSONの編集

dasherフォルダー内のconfigフォルダーにあるconfig.example.jsonをコピーし、ファイル名をconfig.jsonへ変更します。変更できたらテキストエディターで開き、次のように編集します。addressにはAmazon Dash ButtonのMacアドレスを、urlにはSlackのメッセージ送信用URLを入力してください。bodyオブジェクト内のtextがSlackへ送信するメッセージとなります。

{"buttons":[
  {
    "name" : "slack",
    "address": "Amazon Dash ButtonのMacアドレス",
    "url": "Slackのメッセージ送信用URL",
    "method": "POST",
    "json": true,
    "body": {"text":":sos:緊急事態発生:sos: トイレットペーパーがなくなりました! 誰か持ってきて!"}
  }
]}

6. Dasherの実行!

config.jsonが編集できたら、Dasherを次のコマンドで実行します。

sudo npm run start

Dahserが実行できたらAmazon Dash Buttonを押してください。Slackへメッセージが送信されると完成です!

「紙がない助けてボタン」の課題

Amazon Dash Buttonで「紙がない助けてボタン」を作ったことにより、トイレに入っている途中でトイレットペーパーが無くなっても助けが来るようになりました。これで万事解決したかに思えますが、このボタンには次のような懸念点があります。

  1. 端末でNode.jsを常に起動しなければならない
  2. Wi-Fiが届くトイレにしか設置できない
  3. トイレットペーパーを持ってきてくれる人がいないと成立しない

1、2はNode.jsが動作するRaspberry PiSORACOM AirなどのIoTに特化したSIMカードを組み合わせる方法で解決できますが、3は持ってきてくれる人がいないと解決できません。そもそも人がいないなら「紙がない助けてボタン」自体不要かもしれません。

最後に

今回はAmazon Dash ButtonとSlaskをNode.jsで連携させて「トイレに入っている途中でトイレットペーパーが無くなったとき」の緊急事態を解決するという一例を紹介しました。ネタにはツッコミどころが多いですが、500円のIoTボタンで不便なことを解決できる可能性があると感じていただけたのではないでしょうか。

ネットにつながるボタンを押して何を実現するのか。そこを考えることが一番難しく楽しいところです。あなたもぜひ挑戦してみてください!