2017/06/28

Amazon Dash ButtonをRaspberry piでIoTスイッチとして使う

■Amazon Dash Buttonの説明と入手

Amazon Dash Buttonとは、設定した商品をワンプッシュで注文できる便利アイテム。冷蔵庫に貼っておいて残りのビールが少なくなったら押す、といった使い方をするものです。
このボタン、プライム会員しか購入できません。プライム会員を解約しても注文はできるようですが、送料がかかってしまうため非会員でこのボタンを使う利点は"通常は"あまりありません。

しかし単純にハードウェアとして見てみるとこのDash Buttonはとても優秀です。
たったの500円ですが、設定さえ済ませれば単独でwifiに接続し注文のリクエストを送るという高度な動きをします。大きさは電池1つ程度で、1年は無充電で動く。
自分がこれと同じ機能の物を組み立てるとなると3千円以上はかかるだろうし、これと同じほど低消費電力の物を作るというのはちょっと難しい。

そんなわけでこのお得なIoTスイッチをゲットするためだけに、一ヶ月だけプライム会員になりました。本来の使い方をするつもりはないため、デザインで選び3個ほど購入。さすがのプライム対応で翌日届きました。

■Raspberry Piにnodeをインストール
ボタンが押された時に吐き出す信号をフックしてくれるプログラムは、すでに先人たちが整備してくれているものを使うだけ。自分はインストールするだけの簡単ハッキングです。ドアロック確認システムのために動いているRaspberry Pi zeroをサーバーとして使います。
まずはnodeのインストール。使いたいRaspberry Piのバージョンに合ったものを入れる必要があります。

Raspberry Pi A, B, B+, Zeroの場合
wget https://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-armv6l.tar.gz
tar -xvf node-v4.0.0-linux-armv6l.tar.gz
cd node-v4.0.0-linux-armv6l

Raspberry Pi 3の場合
wget https://nodejs.org/dist/v4.3.2/node-v4.3.2-linux-armv6l.tar.gz
tar -xvf node-v4.3.2-linux-armv6l.tar.gz
cd node-v4.3.2-linux-armv6l

Raspberry Pi 2の場合
wget https://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-armv7l.tar.gz
tar -xvf node-v4.0.0-linux-armv7l.tar.gz
cd node-v4.0.0-linux-armv7l

移動した先のフォルダから/usr/localに移動させます。
sudo cp -R * /usr/local/

バージョンを確認しておきます。
node -v

■dasherをインストール
node-dash-buttonというライブラリがありまして、これを使うとDash Buttonをフックしてプログラムを実行できます。
これをhttpリクエストに特化したラッピングをして使いやすくしたものがdasherです。
gitからとってきてインストール。

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

■Dash Buttonの設定
スマホを使い、Dash Buttonに対して自分の家のWLANにつなぐための設定をします。
設定の最後で商品を選ぶ画面になります。購入する商品を選択すれば、正規の仕組みでAmazonに発注されるようになります。
この記事の設定としては、ここでキャンセルして注文が失敗するようにしておきます。

■dasherにボタンを設定
dasherのフォルダの下で、script/find_buttonを実行します。
するといくつかのmacアドレスが表示されます。ボタンを押した後に表示されるアドレスから、これだというものを控えます。
このアドレスを、config.jsonに書き込みます。以下はIFTTTへイベントを投げる場合。

{"buttons":[
  {
    "name": "Notify",
    "address": "[Amazon Dash Button のmacアドレス]",
    "url": "https://maker.ifttt.com/trigger/[イベント名]/with/key/[IFTTTキー]",
    "method": "POST"
  }
]}

■IFTTT側の設定
config.jsonで決めたイベントを受けて通知を出すようなアプレットを適当に設定します。

■dasherを実行
以下コマンドで起動。
sudo npm start

ボタンを押すと、通知が出ます。

さて、これでDash ButtonのIoTスイッチ化が完了です。分解しなくても良く、マイコンを書き換えなくても良い、なんとも簡単な工作(?)でした。
あとはIFTTTアプレットをいい感じに設定すれば完成です。押したらLINEにコメントするとか、押したらその時間をGoogleスプレッドシートに記録するとかできます。
猫が定位置に座ったらツイート、みたいな仕組みもはんだ付け無しでできちゃいます。
何に使うかはまた考えるとして、今度はアウトプットのあるデバイスが欲しいなー。