この記事はおうちハック Advent Calendar 2015の21日目の記事です。
昨日はinterestorさんの、ビールクズ製造機で幸せにおうち飲みをするでした。
おうちハックに家飲み最強ですね。
#はじめに
皆さん、こんな経験はありませんか・・・。
残業続きの毎日、疲れ切った体を奮い立たせ、会社へ向かうために冷たく重い扉をあけて一歩を踏み出す。
時間はギリギリ、急ぎ足で駅に向かう。
しかし、しばらくしてふと頭をよぎる一抹の不安。
「あれ?家の鍵閉めたっけ・・・」
時間がない、でも不安だ。戻るか、ギリギリ間に合うはずだ。いや、だが確かに閉めたはずだ。。。
そうこれは妖怪の仕業なんです。。。
そんなアニメが流行ってますね。まぁ、そんな妖怪がいるか、○怪ウォッチは見てないので知らないですが、実際、私も一人暮らしをしてる時はよくありました。
この話は、MBSハッカソンに参加した際に、お世話になったうちのチームの担当さんとのハッカソン中の会話でも出てきました。じゃぁ、これを防止する仕組みをつくってみようと思った次第です。
#さぁみんなでやってみよう
ということで、やってみます。
コンセプトは「できるだけ簡単に作れる」ことにしました。
MBSの担当さんにも作ってもらいたいからです。
###採用したデバイス
ということで選定したのが、AplixさんのMyBeacon Fun MB005です。
いわゆる「ビーコン」といわれるものです。
このデバイスがいいところは、
- 安い(1個1000円くらい)
- ボタン電池(3v)でも動く
-
簡単な制御でON/OFFを制御できる
という点です。
今回注目したのは、この3.の項目の機能の1つで、WAKEというピンに電圧かけてあげれば、30秒間の間だけBeacon送信してくれるモードを利用します。
###ターゲットとする鍵の形状
多分、最近はこのタイプが多いのじゃないでしょうか。
スマートロックのAkerunの説明画像でもこのタイプなので、これをターゲットにしても特殊なケースじゃないと思ってます。
このタイプは、鍵が空くと「つまみ」が縦(|)に、閉めるとつまみが横(-)になります。
そのに注目して選んだセンサーが、傾斜スイッチのAT-407です。
空き状態(1)が、閉めた状態(2)になればスイッチがONになります。
なので、このAT-407の片側と電池の+に、もう片側をWAKEにつなげあげるだけです。
とっても簡単!
ちなみに、傾斜スイッチは30°の傾斜角が必要なので三角形のスペーサをつけます。
###システムの全体概要
このMB005から送信されたBeacon信号を、Raspberry piにつけたBluetoothドングルで受信します。システムの全体は以下のようになります。
(注意)すいません、時間がなくてクラウド側はまだできてないのでここはまだ構想レベルですm(_ _)m
Raspberry piのBluetoothの受信には、node.jsとnobleというライブラリを使用します。
次に、これをスマートフォン側に通知する仕組みですが、ニフティさんのmobile backendのプッシュ通知を使います。
そのためにRaspberry piにはmobile backendのJavaScript SDKをインストールして使用します。
Raspberry pi 2にnode.jsとmobile backendのJavaScript SDKを入れる記事は以前に書いたので、そちらを参照ください。
スマホのアプリケーションはmobile backendとの連携がしやすいMonacaを使って作ってみようと思います。
###デバイス側の制作
ケースはダイソーで見つけた100円キッチンタイマーを流用しました。(100均大好きです)
電池とMB005をハサミで切れる!薄型ユニバーサル基板でつなげて
で、裏向けると、なんと電池ボックスからピンがきっちりでてます。
左上にある丸く白っぽいのは磁石なので、このまま金属の扉につけることが可能です。
※少し磁力が弱めなので、テープ磁石を追加して固定するのがよいかも
ケーブルは以下のようなQIピンのヘッダのついてないケーブルを使うと
###Raspberry piでのビーコンの受信
(2015/12/23更新)
まずは、Bluetoothを使えるようにBluezをインストールします。
$ sudo apt-get install bluez
その後、Bluetooth 4.0対応のドングル をRaspberry piに差します。
$ hciconfig
と入力して、hci0というインタフェースが表示されれば、ドングルは認識されています。
注意点として、表示される情報の3行目あたりが"DOWN"となっていれば認識はされているがインタフェースが有効になっていないので、
$ sudo hciconfig hci0 up
と入力して有効にします。その後、先ほどの3行目あたりが"UP RUNNING"となっていればOKです。
次に、nobleをインストールします。
$ npm install noble
いろいろとエラーが表示されますが、最終的にはインストールはできるようです。
念のために、nobleのGitHubにあるサンプルのadvertisement-discovery.jsを使って確認します。
そのままコピペすると動かないので、1行目を以下のようになおします。
var noble = require('noble');
$ sudo node advertisement-discovery.js
で実行(sudoをつけることに注意)し、傾斜スイッチを傾けてONにすると
peripheral discovered (XXXXXXXXXXXX with address <XX:XX:XX:XX:XX:XX, public>, connectable false, RSSI -55:
hello my local name is:
undefined
can I interest you in any of the following advertised services:
[]
here is my manufacturer data:
"4c000...(略)...cc"
と表示されればうまく受信しています。XXXXXXXXXXXXはビーコンのアドレスで、対象のビーコンを判定するために後ほど使うので記録しておいてください。
他のBLE機器があれば複数表示されるので、スイッチのONのタイミングで表示されるものを記録しておいてください。
###mobile backendでのプッシュ通知
(後日更新予定)
#最後に
これで、鍵閉めたっけ?妖怪は退治できると思います。(ホントか!?)
なるべくお手軽にできるように考えてみたのですがいかがでしょうか。
傾斜スイッチの部分を別のものに変えることで適用範囲は広がると思いますので、いろいろやってみたいと思います。
今年も時間切れで、一部未実装な部分が残ってしまいました。来年こそは。。。
では、メリークリスマス!(まであと3日)