こんにちは、菅野です。
最近私はTreasuredataやDigdagやAthenaなどを使ってビッグなデータを扱う仕事をしています。
そんなことより、今AmazonでDashボタンの100円セールをやってます!
いつもより5倍買えるのです!!
たくさんハックしてIoTボタンとして働いてもらうのです!!
突然のセール
早速ポチって、しばらく寝ていると届きました!
このSpeed感…シビれる…
Androidとの格闘
とりあえずお茶は適当に放っておいて、DashボタンをIoTボタンとして目覚めさせる作業を行います。
いつもだとここでラズパイが出てくるのですが、今回はどこのご家庭にも転がっているAndroid端末を用意しました。
Unihertz Jelly Pro, 世界最小の4Gスマホ SIMフリー ミニスマートフォン 2.45インチ デュアルSIMカード Android 7.0 Nougat パールホワイト 白
- 出版社/メーカー: Unihertz
- メディア: Wireless Phone Accessory
- この商品を含むブログを見る
私がオモチャとして愛用しているJelly Proは、基盤むき出しのラズパイと比べて筐体フレームで包まれ、バッテリーやタッチパネル液晶、カメラ、GPS、その他のセンサーまで標準で装備しているのでコスパ的にもだいぶ良いのではないでしょうか?弱点はセンサーの拡張性とAndroidであること(後に仇となる)くらいです。
ほぼDebian
DashボタンをIoTボタンとして活用するやり方は、Dashボタンを押すとネットワークにARPのパケットが飛ぶのでそれをトリガーとして何かをするという手順になります。
ARPパケットを補足して何かするという部分はdasherですぐに実現できます。
dasherを動かすためにはnode.jsが必要ですが、Android端末上でどうやって動かすのでしょう。
それはTermuxというアプリで解決できます。
このアプリはAndroid端末上でほぼDebianのような環境を作れます!マジか。
既にお気付きの通り、スマホでターミナルは厳しいので何とかします。
まずは pkg install openssh
でsshをインストール(!)します。
次にどうにか頑張ってauthorized_keysに自分の公開鍵を登録します。
で、sshd
でsshサーバを起動します。あとはログインするだけです。デフォルトでは8022番ポートで起動するので注意。
スマホにログインしました(笑)
次にやることはもうお分かりでしょうが、
git
と nodejs
、yarnがお好みなら yarn
をインストールします。なんだかワクワクしてきました!
dasherの依存ライブラリのビルドで必要となる、libpcap-dev
clang
python2
も入れておきましょう。
そしてdasherをcloneしましょう。
スマホ上で普通に開発が始まりました。
そして、 yarn
で依存モジュールをインストールしていると問題発生!
依存モジュールの中にnode-gypでネイティブバイナリをビルドする部分があるのですが、リンクに失敗するのでコンパイルオプションを変更する必要がありました。
common.gypi
の OS == "android"
の部分の cflags
の値を -fPIC
に変更して再度ビルド。
うまくいったら、dashボタンのMACアドレスを確認します。
dasherのREADMEに書いてあるように、script/find_button
でパケットキャプチャを起動します。
プロミスキャスモードでの動作になるので、端末のroot権限が必要です。私は気づいたら手に入れていました。(嵌った)
いろんなところからARPのパケットが飛んできますが、静かになったときにDashボタンを押してMACアドレスを特定します。
それっぽい物を見つけたら、 config/config.json
に設定を済ませて準備完了です。
と、さらっと書いていますが、なかなかボタンのパケットが来なくてだいぶ嵌りました。
Androidアプリはバックグラウンドになるとプロセスが眠りにつくパターンだけではなく、起きててもネットワークは絞られるため、Termuxをフォアグラウンドの状態にしたままにする必要がありました。
問題が解決したので start
でDashボタンを待ち構えましょう。
実行にはsudoが必要です。
ポチッとな
ボタンを押して反応したら成功です。
いざ、出社
さて、ボタンを手に出社した私はそもそも何でボタンを買ったんだっけという疑問には目もくれず、 アプリの制作に取り掛かります。
ボタン一発で決めてやる
程なくアプリ一号ができました。
私が所属するいちご組は譲り合い文化の醸成が進んでいるのですが、そんな雰囲気でもDashボタンがあれば素早く率先して行動することができるようになります!
ポチッとな
一瞬(やや長い)の静寂の後、Slackに最も自主性のあるメンバーが表示される!
私はDashボタンをキメた。
一方、某氏はサイコロを使った。
…すべての利便性においてサイコロのほうが上回っていました。
そもそもこの問題はIoTが解決する領域じゃない。
第二弾
気を取り直して、自分のロッカーに勤怠ボタンを設置してみました。
伊右衛門(お茶)が出勤、ピルスナー・ウルケル(ビール)が退勤です。
…設置したのはいいのですが、時間をメモするだけなので全然便利になった気がしません。
それに何かIoT感が足りない気がします。
IoTって、センサーとかで状況を把握できたりとかするやつだと思ってました。
IoTっぽい?
ならばと白羽の矢が立ったのが社内のあの場所。
弊社の執務エリアにはローソンがあります!
生贄のローソンです
此奴とAndroid端末のカメラを組み合わせようと思います。
TermuxにはAPIがあってカメラの撮影も問題なしです!
近くのテーブルにこっそりとAndroid端末をセットしておきます。
元からこんなデザインのテーブルだったかのような出来栄えです。
そしてボタンをPush!
ローソンの偵察結果がSlackで到着しました。
だいぶ荒らされてるようです。
でもこれだけだと中途半端なので、在庫自体を認識させようと思います。
OpenCVを使えば余裕ですね。Termuxではソースからインストールが必要です。
いろいろ仕込んだら、ビールに思いを馳せながら自席からピルスナーウルケルのボタンを押します。
何だかIoT感がぐんと上がりました!
ホントに探せてるかよくわかりませんが(多分ダメ)、ボタンによると社内には置いて無いようです。
ちなみにGoogleのCloud Vision APIに伊右衛門を見せたのですが、当然のことながらボトルの飲み物であることまでしかわかりませんでした。
OCRを試してみたところ、読み取ったテキストから商品を推定する方法でいけるかもと思えてきました!
しかし、疲れたので今回はこれで打ち止め。
おわり
どれもこれも需要が行方不明な気がしますが、Dashボタンでいろいろ試してみました。*1
ここまで読んでいただいてありがとうございます!
なにか面白いアイデアがある方やない方は
ぜひ弊社にジョインして社内をハックしてください!
*1:なお、自宅では出社連絡ボタンとして大活躍の模様