【今更?】2021年12月版AmazonDashButtonとLINEで遊んでみた

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ぽちぽち<a href="https://t.co/KlHbSQs1Mc">pic.twitter.com/KlHbSQs1Mc</a></p>&mdash; ようかん / Yosuke Inoue (@inoue2002) <a href="https://twitter.com/inoue2002/status/1471419155052380166?ref_src=twsrc%5Etfw">December 16, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## AmazonDashButtonとは

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/a54de489-0cde-651b-4aff-1d61a419030f.png" width='50%'>

ボタンを押すだけで、次の日には家に欲しい商品が届く魔のボタン...!!
当時は1ボタン500円で販売されていました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/be5cf8cd-cde9-0f31-039e-2aebaad6adc8.png" width="80%" >

しかし、2019年にサービスが停止して以来、この世の役目を終えてしまったのです....


##　某ショッピングサイトで1つ100円ぐらいで売られていた！
百円で最強のボタンが買えるのは遊ぶしかないだろうと思い切っていくつか買ってみました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/af2ea860-0ebb-928e-e842-6a69cf4059b7.png" width="80%">

##　まだ遊べるのかどうか調べてみた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/06b660c4-5f0c-733e-880b-7900930c448b.png)

### 遊べそう！！

ということで、以下記事を参考にAmazonDashButtonのセットアップを行なってみました。

参考記事：
[2021年でも最強IoT物理ボタンなAmazonDashButtonで遊ぼう 〜セットアップ方法と、Pixela APIを叩く実例〜](https://qiita.com/watahari/items/968e1898ec8ff257e16e)



## 材料準備
-　MacOS
-　ラズパイ
-　AmazonDashButton


## 方針

- ラズパイのセットアップ&sshなりなんなりできるようにする
- DashButtonをセットアップする
- [amazon-dash](https://github.com/Nekmo/amazon-dash)をラズパイ上で起動
- 独自APIにリクエストを投げる
- 独自APIからLINEなどにリクエストを投げる


## ラズパイのセットアップ&sshなりなんなりできるようにする
こちらの[記事](https://101010.fun/iot/raspberry-pi-zero-install.html)を参考にmacからsshをして利用しました。
sdカードにOSをダウンロードして`wpa_supplicant.conf`に接続するwifiのIDとパスワードを記載してラズパイにSD差し込んで電源を入れるだけで終わりです。

ターミナルからpingコマンドを叩いて、ラズパイが接続されたかどうかを確認できます

```
ping raspberrypi.local
```

正常につながっていることが確認できたら

```
ssh pi@raspberrypi.local
```

でsshしてみます。パスワードを求められたtokiniha`raspberry`と入力しておけば大丈夫です。


## DashButtonをセットアップする
こちらの[記事](https://qiita.com/retrorocket/items/0a84d6e1f40ad3e11769)を参考に行いました。
手順としては

1 まずボタンを長押しさせて青色の点滅状態にする
2 青色の点滅状態で初期化用音声をダッシュボタンに聞かせる。成功するとLEDが緑色に点滅する
[音声ファイルはこちらから](https://blog.christophermullins.com/2019/12/20/rescue-your-amazon-dash-buttons/)
3 Wi-Fiに接続できる端末でSSIDが`Amazon ConfigureMe`に接続し、http://192.168.0.1/?amzn_ssid=<SSID>&amzn_pw=<パスワード>にアクセスする。成功すると200OKが返ってきておっけい。

ここで注意点なのが、AmazonDashがインターネットに接続されると、文鎮化されるようなので、ルーターの設定で以下のアドレスをブロックしておく方が良いようです。（僕はしていないですが、今のところ大丈夫です。

```
dash-button-na-aws-opf.amazon.com
0.amazon.pool.ntp.org
1.amazon.pool.ntp.org
2.amazon.pool.ntp.org
3.amazon.pool.ntp.org
```
この時MACアドレスが必要になる場合は、先ほどのSSIDに接続された状態で`http://192.168.0.1/`にアクセスすると確認することができます。

## [amazon-dash](https://github.com/Nekmo/amazon-dash)をラズパイ上で起動
ラズパイにsshできたら

```
sudo pip3 install amazon-dash  # and after:
sudo python3 -m amazon_dash.install
```
してインストールしていきます。pip3が入ってない場合は、別途導入してください。

## 独自APIの作成&LINEにリクエストを投げる
1- [lineBot](https://developers.line.biz/ja/)を作成する
1-1 UserIdを取得する
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/e904ef19-296d-8ca2-24de-2f58b7f9c1c0.png" width="70%">
1-2 アクセストークンを取得する
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/88c962e9-5f70-0c7a-91cb-b6758cdde5d5.png" width="70%">

2- 任意のAPIサーバを構築する（こちらではGAS(Google App Script)を使った例を示す）
![スクリーンショット 2021-12-20 21.28.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/fe53315b-8348-53f1-bbff-f4afd4d9081c.png)

```index.gs
const doPost = (e) => {
  //ラズパイからのデータを受け取る
  console.log(e.postData.contents)　// {"mac": "AC:63:BE:67:B2:F1", "action": "toggleLight"} 

  const CHANNEL_ACCESS_TOKEN = 'lineBotのアクセストークン';
  const PUSH_USER_ID = '送信するUserId'; // U38cc6c03d5c5c7df8092b79b4d18263e

  const url = "https://api.line.me/v2/bot/message/push";
  const headers = {
    "Content-Type": "application/json",
    'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
  };
  const options = {
    "method": "post",
    "headers": headers,
    "payload": JSON.stringify({
      "to": PUSH_USER_ID,
      "messages": [{
        "type": "text",
        "text": "ボタンが押されました！",
      }]
    })
  };
  //push通知を送信する
  UrlFetchApp.fetch(url, options);
}
```

## APIエンドポイントをメモしておく
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/1f6b766c-1b66-b60e-c019-a13051a456c8.png" width="70%">

## 独自APIにリクエストを投げる
`/etc/amazon-dash.yml`を修正することで、それぞれのボタンにが検知された際の設定を記述することができます。APIのエンドポイントと送る内容をbodyに書いて設定していきます。

![スクリーンショット 2021-12-20 21.21.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/6e41b3dd-3859-73d4-3810-d690f56abbfc.png)

## amazon-dashを起動

```
sudo systemctl restart amazon-dash
```

## 完成！色々応用しよう
![スクリーンショット 2021-12-20 21.35.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/0a637d8b-374d-e41d-c6c6-1ac2c678d16b.png)


## LTE版は公式に販売されています
https://soracom.jp/store/5208/

## みなさんもハッピーぽちぽちライフを！

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ぽちぽち<a href="https://t.co/KlHbSQs1Mc">pic.twitter.com/KlHbSQs1Mc</a></p>&mdash; ようかん / Yosuke Inoue (@inoue2002) <a href="https://twitter.com/inoue2002/status/1471419155052380166?ref_src=twsrc%5Etfw">December 16, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>