RaspberryPi
bluetooth
timer
おうちハック
proximity

iPhoneなど Bluetooth が 近接した時、離れた時に、何かする


Overview

防犯ライトなどを Raspberry Pi などで動かしたいことがあると思います。

そのとき、繰り返し動作とかタイマーとかを、全てcronでやってもよいのですが、

よりflexibleに記述したくなることがあると思います。

また、上のような用途だと、自分がいるときには、動いてほしくないとかもあると思います。

このような用途を満たすためのscriptを書いてみました。

構成要素としては、


  • Raspberry Pi 3 + Ubuntu Mate 16.04 LTS

  • Ruby script


    • スケジュール機構 + 制御script機構

    • Bluetooth検出部



です。

https://github.com/hidenorly/bt_proximity_monitor

におきました。


使い方


rules.cfg

[13:30-23:30 Mon Tue Wed Thu Fri Sat Sun]

#onStart
echo "blub On"
bleBulbDriver.rb allOn
#onEnd
bleBulbDriver.rb allOff
#onConnected
bleBulbDriver.rb allOff
#onDisconnected
bleBulbDriver.rb allOn

[2017-01-01 03:00-03:26]
#onStart
bleBulbDriver.rb allOn
#onEnd
bleBulbDriver.rb allOff
#onConnected
bleBulbDriver.rb allOff
#onDisconnected
bleBulbDriver.rb allOn


みたいにruleを書きます。

./bt_proximity_monitor.rb -t 70:EC:E4:XX:XX:XX のように監視デバイスを指定するか、devices.cfgなどにmac addressを記述しておきます。

iPhoneなどに対してRFCOMMを貼るようにしているので、起動したらacceptしてください。(Settings-Bluetoothで、BT自体を有効化したり、BTの接続要求が来たらacceptをしてください)

補足: githubのREADME.mdには書いてありますが、-d rfcommで一度rfcommでpairingした状態で、-d l2pingモードにしてください。最近のスマホはpairingしたことのあるデバイスからしかl2pingの応答を返さないようになっているため。

あとは、#onXXXのあとに書いている行を実行してくれます。

なお、rssiを取得するときには、sudo起動する必要があります (hcitoolなどを使うので)

上のruleの例では、 前回 作った bleBulnDriver.rb を使いましたが、なんでも起動できるので、好きにしましょう。

では、happy hacking!