Help us understand the problem. What is going on with this article?

おうちハック Vol.2 玄関の外灯を防犯ライトにしてみる

Gravioを使ったおうちハック第2弾!
我が家はすでに築20年近いので人が近づいたときにパッとつくライトなんてのはそもそもない。防犯ライトを買ってつけてもいいけど、そこはやはりIoTでもっとインテリジェントにやってみよう。

使ったもの

  • Gravio Hub w/HubKit 3.7
  • Gravio Studio
  • 人感センサー
  • IKEA TRADFRI ライト

今回使ったのは人感センサーとIKEAで売ってるTRADFRI(トロードフリ)というスマートライト。スマートライトというとPhilipsのHueが有名ですが、こちらをGravioで利用するにはHue Bridgeというゲートウェイが必要なんですね。IDをとったりするのもちょっと面倒なんです。
IMG_20200311_180202.jpg

IKEAのTRADFRIというスマートライトは実はHue互換。で、お値段お得。たぶん半額くらい?IKEAもHue Bridgeと同じようなスマートホーム用のコントローラーも売ってて、Google HomeやAmazon Echoなどと連携してライトをコントロールできたりもするんですけど、いかんせんいまいち。なのでGravioの出番ですよ。

実は以前はTradfri用のコンポーネントもあったのですが、V3になって仕様変更で使えなくなったのですが、代わりにGeneralLightコンポーネントというエクスペリメンタルコンポーネント(β版のようなもの)を使えば制御できるんです。というわけで今回はIKEA TRADFRIを利用することにしました。

IKEA TRADFRIライトと人感センサーをペアリング

人感センサーのペアリング

IMG_20200311_180235.jpg

いつものようにこのあたりを参考に人感センサーをペアリングします。
https://doc.gravio.com/manuals/gravio-setup-guide/1/ja/topic/zigbee
https://www.gravio.com/jp/sensor-setup-guide#Motion

TRADFRIのペアリング

TRADFRIの方は、電源を6回オン・オフを繰り返すとペアリングモードになります。同じようにペアリングしてください。

TRADFRIの場合、ペアリングするとこのようにモデル名が表示されずにアドレスが表示されます。
editsensorname0.PNG
これだと分かりづらいので、「編集」ボタンをクリックして表示名を変更しておきましょう。スマートライトの場合、この表示名を使って個々のライトを制御できるようになります。複数使う場合はわかりやすい名前にしておきましょう。
editsensorname.PNG

アクションを作る

今回は3つのアクションを使います。

  • 外灯の点灯
  • 外灯の消灯
  • 人がいるかのチェック

actionlist.PNG

1つ目と2つ目は分かりやすいですね。TRADFRIライトを点けたり消したりです。3つ目は?

実は今回使うGravioの人感センサーは、人がエリアに入ってくるとデータを送信します。つまり人がいないときには何もしないので、人がいなくなったことが分からないんですね。

そこで、ちょっとテクニックを使って人がいないことを検出し、ライトを消さなければなりません。

世の中には人がいなくなったことを教えてくれる(データを送信してくれる)センサーもあるんですが、高額ですし、おうちハックには向いてないんですね。なので、今回も、ゆるく、早くのおうちハックでいきます。

TRADFRIライトを点けるアクション

TRADFRIを点けるアクションは簡単です。

まず、前準備としてベータコンポーネントを使えるようにします。

Hubリストの画面で、ユーザーアイコンをクリックするとメニューが出てきますので、そこで「設定」を選びます。するとダイアログが出てきますので、項目にチェックしてください。これだけです。
experimental.PNG

ちなみに、ベータコンポーネントはβ版なので将来仕様が変わったりなくなったりすることも考えられますので注意しましょう。

次に、アクションですが、GeneralLightというコンポーネントを使います。上の設定でチェックしておくと下のようにGeneralLightが選べるようになっていると思います。
generallight.PNG

GeneralLightを追加すると、設定は簡単です。Is On をチェックすればライトが点きます。チェックを外せばライトが消えます。これだけ。
lighton.PNG

あと、このあとライトを増やす予定なので、制御するライトを絞っておきます。先程ペアリングしたときにつけた表示名を Light選択式に指定します。厳密にはここは正規表現で指定することになりますが、ひとつなのでそのまま書けば問題ないでしょう。

以上で完了です。テスト実行してライトが点くことを確認しておきましょう。

TRADFRIライトを消すアクション

TRADFRIを消すアクションもほぼ同じです。
lightoff.PNG

先程書いたように、Is Onのチェックを外してください。Light選択式も指定しておきましょう。できたら、テスト実行して消えることを確認してください。

人がいるかチェックするアクション

これが今回の一番の工夫ポイントです。

先程も書いたように人感センサーは人の動きを検知したときだけデータを送信します。つまり、人がいなければデータを受信しません。そこで、次のように考えます。

  • 一定時間内に人感センサーから受信したデータを取得する
  • 取得したデータが0件=一定時間内に人感センサーが人を検出しなかった
  • だったら、0件のときにライトを消せばいいじゃない

プログラム書けば簡単そうですねー。じゃー、ノーコードでどうやりましょう?Gravioなら簡単にできるんですね。そう、Gravioならw

まず、SensorDataDBというセンサーデータを取得するコンポーネントを使います。

設定は下のような感じです。対象となるエリア、レイヤーを指定して取得するデータを決めます。ここでは人感センサーですね。
checkaction1.PNG

次に直近どのくらいの期間のデータを取得するかを指定します。ここは設定が難しいところです。ここで指定した時間内のデータを取得する、つまり、指定した時間内にデータがなければ消灯するので、人がいないと判断するための時間を指定することになります。通常、Gravioの人感センサーは、動きがあれば比較的反応しますがじっとしてると何も反応しないことがあります。経験ではだいたい2分~3分程度が丁度いいくらいでしょうか。まぁ、しばらく消えなくても困りはしないですし、防犯目的と考えると10分程度にしておいてもいいかもしれませんね。

最後に、これが肝にもなりますが、Enable Time Roundingのチェックを外しておきます。これは今回深くは言及しませんが、チェックしておくといい感じに取得範囲を調整してくれます。チェックを外すと実行タイミングからの直近○分間のような形で取得してくれます。なので、今回はチェックを外します。

これで直近○分間のデータを取得する設定ができました。あとは、データがないときに消灯アクションを実行するための設定です。これは、例外処理を指定します。例外処理とは、簡単に言うとエラー処理ですね。SensorDataDBコンポーネントは、取得したデータが0件だと例外を発生させます。つまりエラーとなるわけですが、このときに別のアクションを実行できるようにするのです。プロパティの下の例外処理をクリックすると、右にInvalid PropertyNo recordsというのが表示されてます。このNo recordsの方のドロップダウンリストで、Go to action、その右に表示されるドロップダウンで消灯用のアクションを選択します。
checkaction2.PNG

あと、今回は取得したデータは必要ないですが、ステップ出力が必要になりますので、適当に追加しておくか、面倒ならステップ変数のよこのコピーアイコンでマッピングをコピーしておいてくださいね。でないとエラーになりますよ。

さて、これで試しに実行してみてください。この記事を読みながら設定してたらきっと人感センサーの反応はなくなってるでしょうから、うまく動けばTRADFRIライトが消えるはずです。

人が来たら点灯するためのトリガー

さて、あと少しです。人感センサーと点灯アクションを紐付けます。

トリガー一覧の画面に移動して、トリガーを下のように作成してください。特に難しいところはないですね。
lighttrigger.PNG

タイマーで人が来てるかチェックする

人が来てるかのアクションはどう実行しましょう?Gravioにはタイマー機能があるので、これを使って定期的にチェックすることができます。

タイマー一覧の画面に移動して下のようなスケジュールを作成してください。ここでは毎分このアクションを実行するようになってます。

lightofftimer.PNG

完成!

これでGravio流防犯ライトができあがりです。
IMG_20200312_110122.jpg
ポイントは次の2つです。ぜひトライしてみてください。

  • IKEA TRADFRIライトはベータコンポーネントのGeneralLightで利用できるよ
  • Gravioの人感センサーで人がいないときに何かしたいときは、タイマー+SensorDataDB+No records例外処理でなんとかなるよ

あと、もうひとつ、人感センサーは意外とセンシング範囲が広いので、角度を狭めたいときはビニールテープなどで目隠しするといい感じになりますよ。

asteria
データ連携ソフトのASTERIA Warp、コンテンツ管理システムのHandbook、モバイルアプリ作成サービスPlatio、AI/IoTのエッジウェアGravioなどを開発しています
https://asteria.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away