この記事はAkerun Advent Calendar10日目の記事です。 数日ぶりにフォトシンスCTOの@kazuphが担当させていただきます。
今回は流行りに乗っかってみましたよ(・∀・)
Akerun Dash Button
どん!GIMPで作成しました。
Amazon Dash Buttonは、ワンプッシュで紐付けている商品を自動で注文するためのIoTデバイスです。沢山の人たちがHack(良い意味)して遊んでいるので、自分もやってみました。
押す度にAkerunが追加注文されるものをつくって配った方が良かったのかもしれませんが、今回はAmazon Dash ButtonでAkerunを開けてみました。 Amazon Dash Buttonが直接Akerunにつながって開閉できるようにしているわけではなく、Wi-Fiの認証、鍵の認証をはさみつつネットワーク越しに開閉しています。
仕組みは単純です。
以下解説です。
Amazon Dash Buttonが押されたことを検知する
- 出版社/メーカー: Amazon
- 発売日: 2016/12/05
- メディア: エレクトロニクス
- この商品を含むブログを見る
まず最初にAmazon Dash Buttonを最寄りのWi-Fiに接続できるようにしてください。 商品と紐付けると商品が届いてしまうので、一番最後の商品選択だけはやらないでください。
方法は以下の記事が詳しいです。
MACアドレスを拾う方法としては、僕はnode-dash-buttonというライブラリを使いました。
実行環境はRaspberry Pi 3です。
Raspberry Pi 3 Model B (Element14)
- 出版社/メーカー: Raspberry Pi
- メディア: Personal Computers
- この商品を含むブログを見る
nodeはxbuildで構築しておりVersionは4.6.2です。
$ git clone https://github.com/tagomoris/xbuild.git $ xbuild/node-install -f v4.6.2 ~/local/node-v4.6.2 linux-armv7l $ export PATH=/home/pi/local/node-v4.6.2/bin:$PATH $ sudo ln -svf /home/pi/local/node-v4.6.2/bin/node /usr/bin/node ※nodeは4系では4.7.0が最新ですが、元々入れていたので今回はこれを使いました
はぁ〜〜〜xbuild便利〜〜〜〜
nodeが入ったら次にnode-dash-buttonをインストールします。
$ sudo apt-get install libpcap-dev $ cd your_project/ $ npm install -S node-dash-button
libpcapは名前からもわかるようにパケットキャプチャをするためのライブラリです。 node-dash-button内で使用しているようです。
次にAmazon Dash ButtonのMACアドレスを特定します。
$ cd node_modules/node-dash-button $ sudo node bin/findbutton
この状態でボタンを押すと以下のようにMACアドレスが表示されるはずです。
あとはこのMACアドレスをプログラム中に埋め込むだけです。
var dash_button = require('node-dash-button'); var dash = dash_button("8f:3f:20:33:54:44", null, null, 'all'); //address from step above dash.on("detected", function (){ // ここに任意の処理を書く });
ちなみに実行は自分の場合はsudoをつける必要がありました。
$ sudo node hook.js
簡単ですね!!
Akerunを開ける
方法としては社内限定公開のAPIを叩く方法と荒業としてURL鍵をヘッドレスブラウザから叩く方法があります。 現在公開されているAPIについては、以下のAkerun Developersサイトを御覧ください。
今回は現時点で誰でも使用できるURL鍵を用いた方法を紹介します。
まずヘッドレスブラウザであるphantomjsをインストールします。
こんな感じでRaspberry Pi用にビルドしたものをダウンロードして使うのが早いです。
wget https://github.com/hamidnazari/raspi-armv7l-phantomjs/raw/master/phantomjs-2.0.0.tar.gz tar zxfv phantomjs-2.0.0.tar.gz sudo mv phantomjs /usr/local/bin/
これでphantomjsの準備はできました。
次にURL鍵を用意します。URL鍵とは、Akerun ManagerというAkerunの鍵の管理画面から発行できるURLをブラウザで開くと、そこでAkerunの解錠・施錠ができるというものになります。 使用するためには、Akerun RemoteというAkerunとサーバーをつなぐためのゲートウェイデバイスをセットしている必要があります。
Akerun Proを申し込んでもらった場合は、標準でRemoteもついてくるので、是非お試しください。
URL鍵には以下の情報が紐付いています。
- 開閉したいAkerun(錠)
- 開閉したいユーザー
- 開閉したい日時や曜日(例えば平日の業務時間内などに限定できます)
- URLでブラウザでアクセスしたときに入力するパスワード(推奨)
Amazon Dash Buttonを押せるのは、家やオフィスのWi-Fiにつながる場所だけとなりますが、無条件に開閉してしまうのが怖い場合は、是非時間帯の限定やパスワードを設定してください。
あとはphantomjsで叩くだけです。
var page = require('webpage').create(); page.open('<解錠用URL>', function() { page.evaluate(function() { document.querySelector("input[name=open]").click(); }); window.setTimeout(function() { phantom.exit(); }, 3000); });
単純にこれを実行するなら、以下の用になります。
$ phantomjs akerun_open.js
このソースコードだとphantomjsという処理系でしか動かないので、nodeで動かす場合には工夫が必要ですが、今回は単純にCLIコマンドとして実行してみました。
function openAkerun() { var exec = require('child_process').exec; return exec('phantomjs akerun_open.js', function(error, stdout, stderr) { console.log('done'); }); }; var dash_button = require('node-dash-button'); var dash = dash_button("8f:3f:20:33:54:44", null, null, 'all'); //address from step above dash.on("detected", function (){ openAkerun(); });
あとはこれを実行しておくことで、解錠できます!
実際にやってみる
Amazon DashからAkerunの解錠までできました!
実際に会社でしばらく使ったのですが、トイレに行ったあとの帰り道でボタンを押しておくとちょうどいいタイミングで解錠してくれたり、外で押したとしても、社内専用Wi-Fiにつながらない限り実行されないので、すごい安心感がありました。
まとめ
これは便利!
ということで、APIやWebツールなどAkerunをどんどん良くしてくれるエンジニアを募集しています!