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

2018/07/11追記
再インストールしようとしたところ、libpcap-devがインストールされておらずdasherのインストールが走りませんでした。
sudo apt-get install libpcap-dev

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

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

警告が出て終わる場合はオプションをつけて起動します。
sudo npm -g install --unsafe-perm

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

■dasherにボタンを設定
dasherのフォルダの下で、script/find_buttonを実行します。
するといくつかのmacアドレスが表示されます。ボタンを押した後に表示されるアドレスから、これだというものを控えます。
このアドレスを、configフォルダの下、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スプレッドシートに記録するとかできます。
猫が定位置に座ったらツイート、みたいな仕組みもはんだ付け無しでできちゃいます。
何に使うかはまた考えるとして、今度はアウトプットのあるデバイスが欲しいなー。

2017/06/13

【報告】上田テーブルゲーム会 5/7

5月7日日曜日、上田テーブルゲーム会がありました。
今回も前回に引き続き20名後半の人数になり、席が足りなくなってしまい申し訳ありませんでした。
8月からは会場を増やして対応したいと考えていますので、ぜひまたご参加いただけますようよろしくお願いします。

今回僕は朝から昼過ぎまでの参加でした。
まずは『ギャンブラーギャンブル』。これは昔懐かしの、「せーの、5!」とか言いながら親指を立てた数を当てるあのゲームっぽいシステム。親は自分の出す数を公開したり、合計数を+1/ー1できたりします。
自分の「当たり」の数を自分で選んでいくので軽いながらも組み立て感があって楽しいです。
 その頃別の卓では『パンデミック・キュア』などが遊ばれてました。
『インフェルノ』もやってましたね。
次に遊んだのが『WHY FIRST? / 2位じゃだめなんですか?』誰を何マス進めるか、一斉に決め、2位になった人が得点できるという内容。
わいわいと遊んで楽しかったんだけど、5ラウンドやって1ポイントもとれず。
ほっぴーさんが『アグリコラ』を初心者の方2人にインスト。ファミリールールです。
自分も一緒に説明しつつ、考えたりしながらほぼ1ゲーム見ていました。一人はかまど、一人は暖炉で37点・36点という結果でした。
こちらは『ブラフ』。
神田さんデザインの『六次化農村』。ゲムマに先立って遊ばれていました。テストプレイで遊んだあのゲームが、本当に美しいコンポーネントになっていて感動です。
それにしても、テストプレイしたときの内容がほぼそのまま製品化されているところにも感心しました。
こちらは『UNUSUAL SUSPECTS』。
『カタン』4人戦。
別のテーブルではトランプの『ナポレオン』が遊ばれていました。
こちらは参加させていただいた『キャッシュ・アンド・ガンズ』。銃を向け合って脱落者を決め、残った者達でお金を分け、最終的にたくさん稼いだ人が勝ちというゲーム。
なかなか楽しかったです。
少し遅れた報告になってしまいましたが、参加していだだいた皆様、今回もありがとうございました。
ぜひまた一緒に遊びましょう!