ぽくつなです

Nature Remo センサー値を Mackerel へ送り侵入警報を作る

このまえ Nature Remo を買ったので作った、似たようなことは既に誰もがやっているけど

f:id:pokutuna:20191009000228p:plain

構成

Cloud Scheduler -> Cloud Pub/Sub -> Cloud Functions
  • Cloud Scheduler が定期的(ここでは5分おき)に Pub/Sub へメッセージを投げる
  • Pub/Sub を Subscribe した Cloud Functions がメッセージが来るたびに起動する
  • Nature Remo Cloud API の値を整形して Mackerel へ投げる

使い方はリポジトリを見てください

github.com

無料枠に余裕で収まるけど、この中では Cloud Scheduler の無料枠が厳しいかな、3 つを超えると課金される。Cloud Functions で外部アクセスをするには請求先アカウントの設定が必要だけど、まず請求されることはなかろう。

家に複数の Nature Remo を並べるのを想定して、natureremo.{sensor}.{リモコン名} メトリックを送っている。名前がMetrics に使える文字(英数のみ)から成る文字列ならそのまま使い、だめならデバイスIDを送るようにしてる。

API で取得できる人感センサーの値はちょっと変わっていて、val には常に 1 が送られていて、最後に検出した時刻が created_at として得られる。この function では 5 分以内に検出されてたら居るとして 1 を、なければ 0 を送るようにした。

侵入警報

センサーの値を Mackerel に送るとおもしろいけど、常に家に居るわけでもないし、湿度や気温を監視してもしょうがないよな。

と思っていると最近ダウンタイム機能が追加された。

mackerel.io

ダウンタイム機能は期間を指定して Alert の発砲を止めることができる。本来は定期メンテナンスウィンドウとかを設定しておくものなんだけど、これを使って 家に居る時間帯 をダウンタイムとして人感センサーの監視を作ると、特定の時間帯だけ部屋への侵入者を検知して Alert を飛ばすことができる。

まず適当に人感センサーの値の監視を作る。送られる値は 0 か 1 なのであまり warning と critical の閾値に意味はない。

f:id:pokutuna:20191009002639p:plain:w336

この監視ルールに対してダウンタイムの設定をする。
繰り返し間隔を指定して、複数個作れるので、家に居る時間帯をカバーするようにダウンタイムを作ろう。

  • 定時から次の日の13時(寝坊したり遅れたりするからね)
    • 適当な日の 19:00 から 18 時間をダウンタイムとして、1日ごとに繰り返す
  • 土日
    • 適当な日の 00:00 から 24時間をダウンタイムとして、1週間ごと土日のみにする

f:id:pokutuna:20191009003429p:plain

これで家に居ない時間帯だけ、人感センサーに反応があれば Alert を飛ぶようになる。有給や祝日は飛ぶけど、そのときは mute したりしてください。

僕は LINE Notify で送っている。これは有給の日に昼過ぎに起きて布団の中で転がった動作が検出された様子。

f:id:pokutuna:20191009003821j:plain:w336

mackerel.io

Nature Remo 便利だし、スマートスピーカーと連携させずとも iPhone から便利に呼べるので大変よいです。ちょっとした値段の差だしいっぱいセンサーがついている mini じゃない方のほうがおもしろい。

赤点滅

Q4-2. Nature Remoが赤点滅して正常に動作しない — Nature

Nature Remoが赤く早い点滅(1秒間に数回の点滅)になっている場合は、Nature Remoがクラウドと通信できていない状態

とのこと、Nature 側のサーバーが不調なのかなと思ったけど Twitter を検索しても似たような人はあまりいない(数人は居る)。他の機器では普通に外部と通信できてるので、Remo 本体か Nature 側が悪いだろ〜と思いつつ書いてあるとおりルーターを再起動したら復活する。何度か本体セットアップしなおしてもだめだったのに... 2 日連続で起きて困っていたけど、ルーターファームウェアをアップデートしたり時計がずれているのを直したりしたら3日目は起きなかった。