Amazon Dash Button を使って、会社で離席中にボタンを押してもらってChatworkに通知する

# Amazon Dash Button を使って、会社で離席中にボタンを押してもらってChatworkに通知する

最近、会議とか席以外での開発やら不定期なお昼とかで席にいる時間が少なくなってきております。
そこで、予定が入っていないのに、あの人どこに行った？？すぐに話したいのにーという問題を解消するために、Amazonで最近発売されたDashButtonを使ってなんとかできないかを考えました。
そして、タイトルの通り、離席中のときにボタンを押してもらうとすぐにChatworkに通知が行くようなシステムを作ってみました。
自身初のIoT!

## 必要技術＆用語解説

### 技術
- Amazon Dash Button(なんのボタンでもOK)
- Node.js(6.X)
- ChatworkAPI

## DashButtonのセットアップ

まず、届いたAmazon Dash Buttonはこちら。
![IMG_3942.JPG](https://qiita-image-store.s3.amazonaws.com/0/52154/d7de7cf7-00d2-1bcd-080d-8f9cd33c35df.jpeg)
（ボタンはなんでもいいけど、ファブリーズにしてしまったｗ）

ドキュメント通りにセットアップしていきますー

- [セットアップ方法公式](https://www.amazon.co.jp/gp/help/customer/display.html?nodeId=201746340)

通常通りにセットアップしていきます。
<img width="320" alt="IMG_3943.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/52154/5c0fae1f-160e-92c0-a33b-a3ac58cd7ea6.png">

ここでこの画面になったら商品選択する画面なので、右上の☓をおしてキャンセル。
（ファブリーズ大量ｗ）
<img width="320" alt="IMG_3944.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/52154/9a596d33-4ea5-21c0-7d25-b41bbb1428cc.png">

きちんと、セットアップができたらこういった画面になるはず！
<img width="320" alt="IMG_3945.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/52154/04686b47-be9c-2e69-61a0-adb536c2d36e.png">

これでDashButtonのセットアップは完了！

## 通知をしてみる

まずは、Dashからの通知がきちんとサーバとかした自身のPCに接続されるかのテストをします。
今回は、node-dash-buttonというnpmがすでにあるので、そちらを使っていきます。

```bash
mkdir dash-chat
cd dash-chat
npm init --yes
npm install node-dash-button
```
※ プロジェクト名はdash-chatにします。

そして、一旦接続ができるのか確認をします。

```bash
$ sudo node node_modules/node-dash-button/bin/findbutton
Password:
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: a2:63:b4:05:b3:43 Manufacturer: Amazon Technologies Inc. Protocol: udp
Possible dash hardware address detected: a2:63:b4:05:b3:43 Manufacturer: Amazon Technologies Inc. Protocol: arp
Possible dash hardware address detected: 00:24:a5:f4:e2:44 Manufacturer: BUFFALO.INC Protocol: arp
Possible dash hardware address detected: 70:56:81:b1:02:d7 Manufacturer: Apple 
```

これをやることで、通信している中身をみることができるみたいです。

そして、AmazonDashButtonを押すと、下記のMacアドレスを取得することができます。

```bash
Possible dash hardware address detected: a2:63:b4:05:b3:43 Manufacturer: Amazon Technologies Inc. Protocol: udp
```

この中にあるa2:63:ba:05:b3:43こいつが重要で、このMacアドレスを控えておきます。

そして、通信ができているのが確認できたため、今回はChatworkに送るので、index.jsを作成してコーディングしていきます。

まずは必要なモジュールをインストール

```bash
npm install request
```

```index.js
'use strict';

console.log('Loading function');

var request = require('request');
var dashButton = require('node-dash-button');
// macアドレス
var macAddr = "a2:63:b4:05:b3:43";

var apiToken = 'your chatwork api';
var roomId = 'your room id';

var dash = dashButton(macAddr, null, null, 'all');
dash.on("detected", function () {
  // chatwork用
  var message = '緊急事態発生！すぐに席に戻ってきて！';
  if (message !== '') {
    // chatwork側に飛ばす処理
    var options = {
      url: 'https://api.chatwork.com/v1/rooms/' + roomId +'/messages',
      headers: {
        'X-ChatWorkToken': apiToken
      },
      form : {body : message},
      useQuerystring: true
    };

    console.log('Sending message');

    request.post(options, function (err, res, body) {
      if (!err && res.statusCode == 200) {
        console.log('done');
      } else {
        console.log('error');
      } 
    });
  }
  console.log("Dash Button Pushed!!");
});
```

これで、Dashボタンが押されたらChatworkに「緊急事態発生！すぐに席に戻ってきて！」という文字列が発射される予定です。

```
sudo node index.js
```

こちらを実行していきます。

そして、Dashボタンを押すと・・・

![スクリーンショット 2016-12-18 16.23.28.png](https://qiita-image-store.s3.amazonaws.com/0/52154/9f195503-dda6-7672-b9d0-95eb22fa05c1.png)

なんと、にゃごぴー（Botさん）がきちんと通知をしてくれました！
これで席にいなくてもきちんと通知を受け取ってすぐに席に行ってあげることができます！
（連打しないでねｗ）

すでに、モジュールもあったので、とても簡単でした！

# まとめ

他にも色々ネタを考えてました！

とくにLine通知と連携して緊急呼び出しボタン（ナースコール的な？）とかそういうのに使えるんじゃないかなーと個人的には思ってます。

今度時間があったらLine Message APIをつかってやってみようと思います。

また、Dashボタンやすいし、次のときに５００円引きで買えるので、この記事を書きながらもう一個ポチってしまいました。