
Amazon Dash Buttonを押す
ごきげんよう、コンサルティングサービス本部のじんぐうじです。
出遅れ感がありますが、既にみなさまご購入済みであろうAmazon Dash ButtonをIoTボタンとして使ってみました。推しメンはNANOXですが今回はevianを使います。
Dash Buttonの準備
Dash Buttonをアクティベートするためにはアカウントに紐づける必要が有りますが、
紐づけはスマートフォンとDash ButtonをBlueToothで接続してAmazonアプリで行います。
メニューから「端末を管理」→「新しいDash Buttonをセットアップ」と進み、
「同意して開始」をタップ後、指示通りDash Buttonを6秒間長押ししてから「接続」をタップするとスマホと接続されます。
その後wifiと接続(必要に応じて「他のネットワーク名を入力」をタップしてSSIDとパスワードを入力)すると
商品選択画面になりますが、右上の×ボタンをタップしてセットアップを中断します。商品を選択するとボタンを押した際に注文されてしまうので…
セットアップを終了して、Dash Button側の設定は完了です!
サーバ側の準備
Dash ButtonはAmazonのサーバへ直接リクエストを行うので通常の用途であればサーバは必要ないのですが、
ボタンが押されたことを検出するためにサーバが必要となります。
Dash Buttonのリクエスト先の変更はできないため、Dash Buttonが送出したar/udpのブロードキャストを検出することで、ボタンが押されたことを同一セグメント上のサーバが検知します。
今回はnode-dash-buttonで実装しました。
package.jsonは↓のような感じにしてnpm installします。
{
"name": "evaluate-amazon-dash",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"find": "findbutton",
"start": "node index.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"node-dash-button": "^0.6.1"
}
}
node-dash-buttonはnode-pcapに依存しているのでlibpcap-develが必要になります。 ちなみに最初Windows環境で導入しようとしたのですが、node-pcapのビルドが面倒だったことと、ブロードキャストが届く範囲にlinuxマシンが無かったためVirtualBoxにCentOSをインストールしました。切ないですね。
次にDash ButtonのMACアドレスを確認します。node-dash-buttonのfindbuttonを実行したからボタンを押すことで MACアドレスを取得します(私の環境ではベンダ名がunknownになりました)。
# npm run find
> evaluate-amazon-dash@1.0.0 find /root/evaluate-amazon-dash
> findbutton
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: XX:XX:XX:XX:XX:XX Manufacturer: unknown Protocol: udp
Possible dash hardware address detected: XX:XX:XX:XX:XX:XX Manufacturer: unknown Protocol: arp
:
コードを書く
MACアドレスを取得したら後は実装するだけです!下記コードはボタンが押されたらログを出力するだけですが、 Dash Buttonが押されたタイミングで任意のコードを実行できます。簡単ですね!
//index.js
const dashButton = require('node-dash-button');
const macAddr = 'XX:XX:XX:XX:XX:XX';
const dash = dashButton(macAddr, null, null, 'all');
let i = 0;
dash.on('detected', () => {
console.log('[' + (i++) + '] ' + "OMG!!! It's Amazon Dash!!!");
});
実行結果はこのようになります。
# npm run start
> evaluate-amazon-dash@1.0.0 start /root/evaluate-amazon-dash
> node index.js
[0] OMG!!! It's Amazon Dash!!!
[1] OMG!!! It's Amazon Dash!!!
[2] OMG!!! It's Amazon Dash!!!
まとめ
Dash Buttonを使用することで、簡単に物理ボタンのイベントをプログラムで取得することができました。 (ちなみにHTTP(S)のリクエストを送るだけであればdasherを使う方が楽です。) RaspberryPiやArduinoで実装する手間や、Amazon IoT Buttonが$20程度かかることに比べると、 500円のDash Buttonは安く手間なく用意できるため夢が広がりますね!!