Node.js
RaspberryPi
beacon

鍵閉めたっけ?妖怪を退治する方法を考える

More than 3 years have passed since last update.

この記事はおうちハック Advent Calendar 2015の21日目の記事です。

昨日はinterestorさんの、ビールクズ製造機で幸せにおうち飲みをするでした。

おうちハックに家飲み最強ですね。


はじめに

皆さん、こんな経験はありませんか・・・。

残業続きの毎日、疲れ切った体を奮い立たせ、会社へ向かうために冷たく重い扉をあけて一歩を踏み出す。

時間はギリギリ、急ぎ足で駅に向かう。

しかし、しばらくしてふと頭をよぎる一抹の不安。

「あれ?家の鍵閉めたっけ・・・」

時間がない、でも不安だ。戻るか、ギリギリ間に合うはずだ。いや、だが確かに閉めたはずだ。。。

そうこれは妖怪の仕業なんです。。。

そんなアニメが流行ってますね。まぁ、そんな妖怪がいるか、○怪ウォッチは見てないので知らないですが、実際、私も一人暮らしをしてる時はよくありました。

この話は、MBSハッカソンに参加した際に、お世話になったうちのチームの担当さんとのハッカソン中の会話でも出てきました。じゃぁ、これを防止する仕組みをつくってみようと思った次第です。


さぁみんなでやってみよう

ということで、やってみます。

コンセプトは「できるだけ簡単に作れる」ことにしました。

MBSの担当さんにも作ってもらいたいからです。


採用したデバイス


ということで選定したのが、AplixさんのMyBeacon Fun MB005です。

いわゆる「ビーコン」といわれるものです。

このデバイスがいいところは、

1. 安い(1個1000円くらい)

2. ボタン電池(3v)でも動く

3. 簡単な制御でON/OFFを制御できる

という点です。

今回注目したのは、この3.の項目の機能の1つで、WAKEというピンに電圧かけてあげれば、30秒間の間だけBeacon送信してくれるモードを利用します。


ターゲットとする鍵の形状


鍵の形状は多種多様かと思います。うちのはこんな感じ。

keytype.jpg

多分、最近はこのタイプが多いのじゃないでしょうか。

スマートロックのAkerunの説明画像でもこのタイプなので、これをターゲットにしても特殊なケースじゃないと思ってます。

このタイプは、鍵が空くと「つまみ」が縦(|)に、閉めるとつまみが横(-)になります。

そのに注目して選んだセンサーが、傾斜スイッチのAT-407です。

AT407.jpg

空き状態(1)が、閉めた状態(2)になればスイッチがONになります。

スイッチ.jpg

なので、このAT-407の片側と電池の+に、もう片側をWAKEにつなげあげるだけです。

とっても簡単!

ちなみに、傾斜スイッチは30°の傾斜角が必要なので三角形のスペーサをつけます。


システムの全体概要


このMB005から送信されたBeacon信号を、Raspberry piにつけたBluetoothドングルで受信します。システムの全体は以下のようになります。

(注意)すいません、時間がなくてクラウド側はまだできてないのでここはまだ構想レベルですm(_ _)m

system.jpg

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を使って作ってみようと思います。


デバイス側の制作


デバイスの接続はこんな感じです。

device.jpg

実際に作ってみたのはこんな感じです。

device_real.jpg

ケースはダイソーで見つけた100円キッチンタイマーを流用しました。(100均大好きです)

case.jpg

タイマーの基盤を外してボタン電池を格納します。

battery.jpg

電池とMB005をハサミで切れる!薄型ユニバーサル基板でつなげて

base.jpg

ケースにつっこんでテープで固定しました。

comp.jpg

で、裏向けると、なんと電池ボックスからピンがきっちりでてます。

pins.jpg

左上にある丸く白っぽいのは磁石なので、このまま金属の扉につけることが可能です。

※少し磁力が弱めなので、テープ磁石を追加して固定するのがよいかも

ケーブルは以下のようなQIピンのヘッダのついてないケーブルを使うと

QI.jpg

こんな感じで先を折り曲げれば簡単につなげます。

QI2.jpg


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行目を以下のようになおします。


advertisement-discovery.js

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日)