Amazon Dash Buttonでインターホン

# Amazon Dash buttonで遊ぼう！
皆さん、こんにちは。

今回はAmazon Dash Buttonというおもちゃを手に入れましたので、こいつをおもちゃにして遊んでみようと思います。
![amazon_dash_button.JPG](https://qiita-image-store.s3.amazonaws.com/0/225010/a2ccbd71-076a-d415-c541-0f5b5ed92631.jpeg)

研究室にあまり僕がいないので突然の来訪があったとしてもあえない確率が高いんですね。
そこでこいつをインターホン代わりにして、来訪があったらLINEに通知してもらう仕組みをサクッと作ろうかなと思います。

ちなみに今回はプログラミングをほぼしないので初心者でも簡単にできますよー。

では、早速始めていきましょう。

## 要るもの

- Amazon Dash Button
- ラズパイ(パソコンでも代用可能)

# Amazon Dash Buttonの設定

設定にはamazonの公式アプリを使いました。
説明書通りにWi-Fiの設定を進めていきます。最後の注文する商品の設定のところで右上の×を押して途中で設定を終わらせます。こうすることでボタンを押しても商品は注文されないので安心して利用することができます。

![_20180128_162541.JPG](https://qiita-image-store.s3.amazonaws.com/0/225010/e1ffbbbf-e096-9406-2e81-a4116a22b4be.jpeg)

ただし、ボタンを押すたび「設定が終わっていません」と通知が律義に届くので
`端末の管理>通知の設定`
からダッシュボタンの通知を切ることをお勧めします。

![_20180128_163418.JPG](https://qiita-image-store.s3.amazonaws.com/0/225010/fffa03b5-8992-ad0f-23a9-5dd5fb5a7b3f.jpeg)


# IFTTT

![ifttt.png](https://qiita-image-store.s3.amazonaws.com/0/225010/7fa5155d-f5ec-3ff2-f3e8-41dac6c463df.png)

## IFTTTとは

[IFTTT(イフト)](https://ifttt.com/discover)とは、簡単に説明すると「Webサービス同士を連携できるサービス」の事で、プログラミング不要で様々なオリジナルサービスを作ることができるものです！

Gmailとかもあるのでアイデア次第でいろいろなことができちゃいますね。

IFTTTの登録は各自で済ませておいてくださいね。Googleアカウントで入れたりするのですぐ登録できると思います。

## IFTTTの利用

まず初めに今回利用するサービスは以下の2つです。

- [Webhooks](https://ifttt.com/maker_webhooks)
- [LINE](https://ifttt.com/line)

Webhooksはイベントトリガーとして使用します。
アプリのURLをたたくとイベントを発生させることができるので、それを使ってLINEのメッセージを投稿します。
上記のそれぞれのアプリのリンクに飛んでいただき、"Connect"をクリックしてアプリを紐づけしてください。


![webhooks.png](https://qiita-image-store.s3.amazonaws.com/0/225010/007a3ec4-7848-b44a-0cb5-cfc918c6fb00.png)

![line.png](https://qiita-image-store.s3.amazonaws.com/0/225010/22dd1cf6-d8c0-d904-5130-5f3521303c00.png)


## Appletの作成

ではAppletの作成をしていきましょう！
まず画面上部の`My Applets`から`New Applets`をクリックし、新しいAppletを作成します。

![new_applets.png](https://qiita-image-store.s3.amazonaws.com/0/225010/ebdfc972-6184-851c-a3c8-43ce202b5808.png)


するとこんな画面が出てくるので`+this`をクリックしWebhooksを選択します。


![ifttt.png](https://qiita-image-store.s3.amazonaws.com/0/225010/7fa5155d-f5ec-3ff2-f3e8-41dac6c463df.png)


`Event Name`に好きなイベント名を入力してトリガーを作成します。


![webhooks_trigger.png](https://qiita-image-store.s3.amazonaws.com/0/225010/58db1799-5f27-37e4-3af4-c378ca7d82e6.png)

次に`+that`をクリックしアプリでLINEを選択します。
Recipientに`1:1でLINE～`を選択します。
MessageにはLINEで送るメッセージを書くことができるので、好きなメッセージを記入しましょう。
Photo URLで画像も送ることができるみたいです。
設定が終わったらCreate actionをクリックして終了します。

![LINE_settings.png](https://qiita-image-store.s3.amazonaws.com/0/225010/a385772f-e350-4821-0be5-1403110744e5.png)

これでAppletが作成できました。

## Appletの動作確認

実際にこのAppletがちゃんと動くかテストしてみます。

まず、Webhooksのsettingを開き、URL(Account InfoのURLの項目)にアクセスします。

![webhooks_setting.png](https://qiita-image-store.s3.amazonaws.com/0/225010/80878f4f-08f5-ec58-f5f3-098aac0c31f9.png)

すると、以下のような画面に飛びます。

![webhooks_test.png](https://qiita-image-store.s3.amazonaws.com/0/225010/d498b50b-68fb-d002-77d0-1d4e78bfeb5b.png)

Your key is: の後にキーが表示されていますね。これは後で使うのでメモっといてください。

`{event}`に先ほど設定したイベント名を入力すると一番下のところにあるURLが変更されます。
WebhooksではこのURLにアクセスすることでイベントを発生させているようです。

また、`Test it`を押すことでイベントを発生させることができます。

LINE Notifyからメッセージが届くのが確認できました！



# ラズパイでDashボタンの通信を監視

Dashボタンの通信を監視するためにラズパイを使います。これはパソコンでも大丈夫です。
前提としてラズパイとDashボタンが同じネットワークに接続している必要があります。

## Dasher

Amazon Dash Buttonをいじるのはいろいろな方がやっておられるみたいでいろいろなプログラムがGitHubに転がっています。
Dasherというものが結構みんな使ってらっしゃるみたいで情報もたくさんあるのでこちらを使っていきたいと思います。こちらはNode.jsで動くので各自あらかじめインストールをしておいてください。

ラズパイでプロジェクトをgit cloneして、npmで必要なライブラリ群をインストールします。

```shell
$ git clone https://github.com/maddox/dasher
$ cd dasher
$ npm install
```

インストールが終わったら、以下のコマンドを実行してDashボタンを押します。
するとコンソールに結果が出てきますので、arpのところからMACアドレスを取得しましょう。(最下行)

```shell
$ ./script/find_button
Watching for arp & udp requests on your local network, please try to press your dash now
Dash buttons should appear as manufactured by 'Amazon Technologies Inc.'
Possible dash hardware address detected: xx:xx:xx:xx:xx:xx Manufacturer: unknown Protocol: udp
Possible dash hardware address detected: xx:xx:xx:xx:xx:xx Manufacturer: unknown Protocol: arp
```


config.jsonを新たに作成しconfigファイルに置きます。`{MAC_ADDRESS}`にはDashボタンのMACアドレスを、`{event}`には先ほど設定したイベント名を、`{KEY}`にはwebhooksのキーを各自記入してください。

```config/config.json
{"buttons":[
  {
    "name": "{event}",
    "address": "{MAC_ADDRESS}",
    "timeout": "60000",
    "url": "https://maker.ifttt.com/trigger/{event}/with/key/{KEY}",
    "method": "POST"
  }
]}
```

以下のコマンドを入力してプログラムを起動しましょう。

```shell
$ sudo npm run start
```



流れとしては、

1. Dash Buttonを押す(amazonに接続しようとする)
2. Dasherがその接続を検知(arpの検知)
3. DasherはWebhooksのURLをたたく(イベントを発生させる)
4. IFTTT上のWebhooksがそれを受け取ったらLINEでメッセージを送る
5. スマホに通知が来る

となります。少し回りくどい感じがしますが遊びなので良しとしましょう。

ボタンを押してLINEに通知が来るのが確認できました！

![_20180128_162331.JPG](https://qiita-image-store.s3.amazonaws.com/0/225010/f71995ad-5744-6b85-8c52-242743067420.jpeg)



# まとめ
Dashボタンを押すとLINEから通知が来るものを作ってみました。
IFTTTのサービス連携を使えばもっと面白い使い方ができそうな感じがしますね！

# 参考サイト
本記事では以下のサイトを参考にさせていただきました！

- [Amazon Dash ButtonとIFTTTで尊さの瞬間(とき)を刻む](https://qiita.com/Chocolat_Tammy/items/a89f6748804a0c863974)
- [Amazon Dash ButtonとLINEをIFTTTでつなぐ その2](http://blue-black.ink/?p=3766)