Pippi Life

主に仕事に関連するITのことや、プライベートもちょいちょい書きます。

Amazon Dash Buttonでおうちハックの準備

ADB買ってみた

Amazon Dash Buttonといういいおもちゃが発売されたので、買ってみました。
おうちハックといいながらも、まずは接続して検知するところまで。
そういえば、海外で買ったDashButtonは、その地域のアカウントでWi-Fi接続設定が必要みたいですね。
アプリは同じもので、「.com」アカウントに切り替えられるみたいです。
グローバル対応がすごい!!

幸いにも先人たちがたくさんいらっしゃるので、
コマンド打ちながら、試してみました。
主にはこちらの記事を参考に試しました。
Amazon Dash Buttonを(正しくない方向で)使ってみた

動作環境

Dash ButtonをWi-Fiに接続する。

左上のメニューから
→アカウントサービス
→Dash端末→新しい端末をセットアップ
からWifiに接続しましょう。
例によって、商品選択の画面で作業を中断。
これでDashButtonがWi-Fiにつながりました。

Wi-Fiに接続設定されているときのボタン押下は白、
Wi-Fiに接続中が青、
Wi-Fiに接続されていないときボタン押下は赤。みたいな挙動でした。

MacにNode.jsをインストールする

恥ずかしながら、我が家のiMacには、Node.jsが入っていなかったので、そこからスタート。

1.Nodebrewをインストールする

$ curl https://raw.githubusercontent.com/hokaccha/nodebrew/master/nodebrew | perl - setup
$ nodebrew help
nodebrew 0.9.6

Usage:
    nodebrew help                         Show this message
    nodebrew install <version>            Download and install <version> (compile from source)
    nodebrew install-binary <version>     Download and install <version> (binary file)
    nodebrew uninstall <version>          Uninstall <version>
(省略)

2.node.jsをインストールする

nodebrewをアップデートして、最新版をインストールします。
こちらを参考にしました。
Macにnodebrew(node.js, npm)をインストールする手順

自分は、ここinstallでめっちゃ時間がかかるので、放置していたのですが、
途中でiMacから確認画面が表示されてて、後続の処理が落ちてました。
どうやら、C+?C++?インストールでだめだったみたい。
再実行で大丈夫でした。

$ nodebrew selfupdate       //nodebrewをアップデートする  
$ nodebrew install latest   //最新版のnode.jsをインストールする。  
$ nodebrew use latest       //最新版のnode.jsを使用する  
$ node -v
v7.3.0
$ npm -v
4.0.5
$ npm install -g npm        //npmをアップデート

DashButtonのインストー

$ npm init
$ npm install --save dash-button
$ npm install date-utils

npm initでいろいろ聞かれるけど、全部空白にしてしまった。
調べてからコマンド発行しろよというかんじですが、
ここを参考にさせてもらって、プロジェクト作成コマンドみたいです。
ああ、ホームディレクトリでinitしたから、ホームディレクトリにpackage.jsonが作成されたのですね。

ついでにdate-utilsもインストールしておきましょう。

DashButtonの設定

上述の通り、initすると、package.jsonが生成されます。
installすると、dependencyが追記されるんでしょう、きっと。←
作成されたjsonファイルを

$ vim package.json
{
  "name": "user",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dash-button": "^2.0.1"
  }
}

から

$ vim package.json
{
  "name": "user",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "scan": "dash-button scan"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dash-button": "^2.0.1"
  }
}

へと書き換えます。
そして、scanを実行して、mac アドレスを取得しましょう。

$ sudo npm run scan
Password:

> user@1.0.0 scan /Users/user
> dash-button scan

Scanning for DHCP requests and ARP probes on en1...
Detected a DHCP request or ARP probe from f0:27:2d:89:38:e2
Detected a DHCP request or ARP probe from f0:27:2d:89:38:e2
Detected a DHCP request or ARP probe from f0:27:2d:05:c0:f4

手元にある2つのボタンを押したので、無事に2種類のマックアドレスが見えています。
これをメモしておきます。
ここまでで下準備は終了です。

app.jsを作成して、起動させてみる。

さっそくapp.jsを作成し、起動させてみましょう。
これも先人たちの知恵を借りました。ありがとうございます。

require('date-utils');
const DashButton = require("dash-button");

const PHY_ADDR1 = "f0:27:2d:89:38:e2";
const PHY_ADDR2 = "f0:27:2d:05:c0:f4";

let button1 = new DashButton(PHY_ADDR1);
let button2 = new DashButton(PHY_ADDR2);

console.log("----Setup Start----")

let i = 0;

// 1つ目のボタン設定
button1.addListener(() => {
  var dt = new Date();
  console.log("button1 is  working."+dt.toFormat("YYYY/MM/DD HH24:MI:SS"));
});
console.log("----setup button1 complete----")

// 2つ目のボタン設定
button2.addListener(() => {
  console.log("button2 is  working."+dt.toFormat("YYYY/MM/DD HH24:MI:SS"));
});
console.log("----setup button2 complete----")
console.log("----Listening Start----")

そして実行します。
ボタンが押された時刻を記載するようにしてみました。
ですが、sudoじゃないとExceptionが発生。

$ sudo node ./app.js
----Setup Start----
----setup button1 complete----
----setup button2 complete----
----Listening Start----
button1 is  working.2016/12/24 11:35:21

とりあえず、無事にdash button のListenが実装できておりました。
簡単にサービスにリクエストとかも実装できそう。
やはりタイムラグがあるので、どんなおうちハックをするか。。。