RaspberryPi
IoT
AmazonDashButton

Raspberry Pi Zero W で Amazon Dash Button をただのIoTボタンとして使う流れ

ここでは、Amazon Dash Button -> Raspberry Pi Zero W-> IFTTT -> Trello にカード追加をします
この記事は、主に、以下の2つの記事をまとめた内容です。

必要なもの

  • Raspberry Pi Zero W スタートキット
  • Amazon Dash Button
  • 作業環境(ここではMac)
  • IFTTTのアカウント
  • Trello のアカウント(IFTTTに連携しておきます)

Raspberry Pi Zero W のスタートキットは、どれでも良いと思いますが、私はリアル店舗で以下のものを買いました。

https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-55F7

SD カードにはOSが書き込み済みの前提です。
作業環境はMacです。

同根のSDカードをPC等で見て、WiFi情報とSSHの有効かを設定

こちらを参考に設定します

Raspberry Piの無線LANをmicroSDで設定する
http://qiita.com/mascii/items/0d1a280ac58ed8f6f999

$ cd /Volumes/NO\ DATA # お手元の環境に合わせて下さい
$ touch ssh
$ vi wpa_supplicant.conf
wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="test"
    psk="abcd1234"
}

SDカードをRaspberry Pi Zero W に挿入し、ディスプレイ・キーボードに繋いで、電源を入れる

先の設定で、WiFi設定ができているのですが、スタートキットに入っているSDカードは最初に設定が必要です。
起動するとOSを選ぶ画面が出るので、いちばん上のRasbianが選択されている事を確認し、スペースキーを押します。
次に、"i" を押して、エンターでインストールを開始します。

インストールには、1時間ほどかかります。(SDカードの書き込み速度が遅いので。)
インストールが終わると、自動的に再起動して、Raspbianが起動します。
先ほど、WiFiの設定をしておいたので、既にネットワークにはつながっていると思います。
これ以降、ディスプレイとキーボードは不要です。

SSH で繋いで初期設定

$ ssh pi@raspberrypi.local
$ passwd # パスワード変更
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install nodejs npm libpcap0.8-dev # 後で npm install するのに必要となる
$ sudo apt-get clean
$ sudo apt-get autoremove

dasher を cloneして、npm install

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

Amazon Dash Button をセットアップ

以下の通りセットアップ。
http://qiita.com/jsoizo/items/3b8bba4160f41aef20f4#%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97

  1. Amazonショッピングアプリを開く
  2. アカウントサービスを開く
  3. 新しい端末をセットアップを選択
  4. Dash Buttonを選ぶ
  5. Dash ButtonのWi-Fi設定を行う
  6. 注文する商品を選択する画面でキャンセル(右上の×ボタンを押す)

IFTTT のセットアップ

事前に https://ifttt.com/trellohttps://ifttt.com/maker_webhooks の設定を行って下さい。

  1. IFTTT の My Appletsを開く https://ifttt.com/my_applets
  2. New Applet
  3. this に Webhooks を選択。Recieve a web request を選択
  4. Event Name を "add_trello" と入力
  5. that に trello を選択。 "Create a card"を選択
  6. "Which board?"、List name、Position、Title、Descriptionを好きに選択
  7. Create Action をクリック
  8. Finish をクリック

ボタンの情報を取得

./script/find_button を動かし、Dashボタンを押す。ここで表示されたMacアドレスをメモっておく。

 $ ./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: aa:bb:cc:dd:ee:ff Manufacturer: unknown Protocol: udp

設定ファイルを記載

url と address は適切に書き換えて下さい。
urlは、 https://ifttt.com/services/maker_webhooks/settings のページに書かれているURLをブラウザで開くと分かります。
protocol は、udp にする必要が有ります。ちゃんと理由を調べていませんが、arp はRaspberry Pi Zero W では受信できませんでした。

$ vi config/config.json
config.json
{"buttons":[
  {
    "name" : "水がない",
    "address": "b4:7c:9c:25:99:17",
    "url": "https://maker.ifttt.com/trigger/add_trello/with/key/XXXXXXXXXX",
    "method": "POST",
    "json": true,
    "protocol": "udp",
    "body": {"value1":"水がない"}
  }
]}

Dasher を起動

$ sudo npm start

自動起動するように設定

以下を参考に設定します。
https://github.com/maddox/dasher/wiki/Running-Dasher-on-a-Raspberry-Pi-at-startup

$ curl https://raw.githubusercontent.com/fhd/init-script-template/master/template > /tmp/dasher
$ sudo cp /tmp/dasher /etc/init.d/dasher
$ rm /tmp/dasher
$ sudo vi /etc/init.d/dasher 

先頭を以下のように書き換え。
dir は適切に変更してください

/etc/init.d/dasher
#!/bin/sh
### BEGIN INIT INFO
# Provides: dasher
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

dir="/home/pi/dasher"
cmd="npm run start"
user="root"
$ sudo chmod 755 /etc/init.d/dasher
$ sudo update-rc.d dasher defaults

以下で実行できるか確認してください。

$ sudo /etc/init.d/dasher start

ログは以下のようにして確認できます。

$ tail -f /var/log/dasher.log

エラーは以下です。

$ tail -f /var/log/dasher.err