[Raspberry Pi][Mac] motionEyeOS の動体検知を blink(1) で通知にする

motionEyeOS で監視カメラを構築したことは前回書いた。

[Raspberry Pi] motionEyeOS で監視カメラ – with a Christian Wife
https://wacw.cf/2017/03/05/raspberry-pi-motioneyeos/

motionEyeOS の動体検知機能で、動体検知をメール等で通知できるが、より高機能な動体検知をするために Mac Mini の iVideon を使っている。常時起動している Mac Mni で iVideon Server を動かしているのだ。映像の動きがあれば動画として保存されるし、同時に iOS にも通知される。

しかし iOS の通知よりももっと分かりやすい通知を実装してみたいと思うようになった。そこで、最近さっぱり使わなくなり部屋に転がしている blink(1) を活用することにした。

blink(1) – the USB RGB LED notification light
https://blink1.thingm.com/

blink(1) はパソコン等の通知をランプで表示できる USB デバイスだ。メールを受信すると光らせるといったシンプルなことから、サーバーの異常をランプで知らせると高度なことまでできる。

一つの方法としては、motionEyeOS には動体検知をメールで通知できる。そのメールを blink(1) のメールチェッカー機能を使ってランプを光らせるというものだ。この方法を試してみたが、各デバイスでメールの送受信等があるので、どうしてもタイムラグが長くなる。動体検知後できるだけ早めにランプを光らせたいので、この方法は却下だ。

あるいは IFTTT を使う方法もある。blink(1) および iVideon は IFTTT の連携サービスの一つだ。iVideon で動体検知すると blink(1) を光らせる、といったことがシンプルに実装できそうだ。しかしこれも、IFTTT 側の問題で、実行のタイムラグがものすごく長いんだよ。15 分後(!)とかになったりする。これでは全く意味がない。

最終的に思いついた方法は、ややトリッキーな方法だけれども、通知のタイムラグを 10 秒ぐらいにすることができたので、紹介する。

(1)motionEyeOS で、動体検知をした画像ファイルを Dropbox に保存されるように設定する。motionEyeOS のメニューで Dropbox の連携が設定できるようになっている。

(2)Mac Mini に Dropbox アプリをインストールする。

(3)blink(1) の実行を指示するテキストファイルを作成する。
以下のようなシンプルな内容を記述したテキストファイルを作成し、Blink(1) Control > Tools で Type を file とし、そのテキストファイルを指定する。Frequency は最短の 5sc がいだろう。

{
  "pattern":"blink3_red"
}

このテキストファイルが更新されると、blink(1) が実行されるようになっている。

なお、テキストファイルの作成は、Mac 標準の「テキストエディット」アプリだと、blink(1) でうまく実行できなかった。しかし Sublime Text といったエディタを使うとうまくいった。文字コードか何かの関係かなあ。

参考:
blink(1) mk2 使い方のメモ – blink1control アプリ編 – 自習室
http://izmiz.hateblo.jp/entry/2014/07/12/213214

(4)3のテキストファイルは、ファイルの中身が変更される必要はなく、ファイルの更新時刻の変更だけで blink(1) が実行されるようになっている。ではいかにテキストファイルの更新時刻を書き換えるか。ここで Hazel というアプリを使う。

Noodlesoft – Noodlesoft – Simply Useful Software
https://www.noodlesoft.com/

このアプリはフォルダを監視し、その変化に応じてさまざまな操作を自動実行してくれる。つまり、2の Dropbox のフォルダに変更があれば、3のテキストファイルの更新時刻が更新されるようにすればいいのだ。

Hazel で motionEyeOS のファイルが保存される Dropbox フォルダを指定し、以下のように設定する。

If all of the following conditions are met:
Size did change
Do the following to the matched file or folder:
Run shell script embedded script

そして Edit script をクリックして以下のように記述する。

touch <テキストファイルのファイルパス>

X アイコンをクリックして Edit script を終了する。OK。

touch というコマンドでファイルの更新時刻を現在に変更することができるわけだ。

これで完成だ。

motionEyeOS での Dropbox への画像保存はあくまでトリガーにすぎないが、副次的な利点として、外出先でも動体検知の画像を確認できるようになった。

現在は動体検知から blink(1) の点滅まで 10 秒ほどタイムラグがある。もっと即時通知ができるように研究中だ。