LoginSignup
1
1

More than 3 years have passed since last update.

おうちハック Vol.5 帰宅時にアルコール消毒してなかったら教えてくれる

Posted at

はじめに

Gravio 4になっていろいろできるようになったので、おうちハックもバージョンアップ。
今回は、おうちに帰ってきてアルコール消毒を促すのをやってみたいと思います。

Gravio 3でやった以前のおうちハックの内容はこちら。
※ちなみに、Gravio 4ではイケアの電球を制御できなくなったので2~4はできなくなりました。でもGravio 3でいまも現役稼働中。すごく重宝してます。

要件

  • 家に帰ってきて、アルコール消毒をしてなかったら消毒を促す
  • 警告はわかりやすいように、ライトと音声を使う

使用環境

  • Raspberry Pi 4 Model B w/4GB RAM
  • Ubuntu Server 20.04.1 LTS
  • Gravio HubKit v4.1.0-6380
  • Gravio Studio v4.1.5432.0
  • Gravioライト
  • Gravio人感センサー
  • Gravioドア・窓開閉センサー
  • Google Nest mini

※GravioライトとGravioドア・窓開閉センサーはBasicプラン(月額500円)を契約するとレンタルすることができます。

概要

  • ドアセンサーをアルコール消毒液のポンプに付けて、ポンプを押したときにわかるようにする
  • 人感センサーを玄関に設置して、人が帰ってきたらわかるようにする
  • 人感センサーが反応したときに、1分以内にアルコール消毒液のドアセンサーがCloseになってなければ警告する
  • 警告はCATTを使ってGoogle Home miniに音声に流す
  • 音声警告と同時にGravioライトを赤く点灯、10秒経ったら消す

手順

センサーのペアリングと登録

人感センサーとドアセンサー、Gravioライトをペアリングします。

image.png

エリア「玄関」を作成し、その中にレイヤー「人感」、「消毒」を作成します。
「人感」のデバイスタイプは「Aqara-Occupancy」、「消毒」は「Aqara-Door」を選んでおきます。
それぞれのレイヤーに先程ペアリングした人感センサーとドアセンサーをバインドして有効にします。

image.png

うまくいくとこのようにデータが届くようになると思います。

image.png

アクションの作成

アクション「Alert-Sanitizing」を作成します。
アクションの内容は次のように指定します。
まず、SensorDataDBIfZeroコンポーネントを配置します。
image.png

プロパティ
エリアID 玄関
レイヤーID 消毒
From Previous 1
タイムスケール

これは、「1分以内に消毒レイヤーのデータが0件の場合」に後続の処理を続けるという設定です。
「1分以内に消毒レイヤーのデータが0件の場合」とは、つまり「1分以内に消毒液のポンプを触っていない」ということとほぼ同じと考えてこうしてあります。

次にGravio Lightコンポーネントを配置してライトを赤く点灯します。ちょっと明るさを抑えめにするために輝度を50にしてみます。

image.png

プロパティ
オン チェックする
カラー
輝度 50

次にExecコンポーネントを配置して、Google Nest miniに音声を再生します。音声ファイルは「Gravio 4で呼び鈴を再バージョンアップしてGoogle Castで家中にアナウンス」を参考にして作成、アップロードしてください。

image.png

プロパティ
コマンド env LC_ALL=C.UTF-8 LANG=C.UTF-8 catt -d 玄関 cast sanitize.mp3

コマンドの玄関は実際のGoogle Home miniの名前、sanitize.mp3は実際のファイル名に合わせてください。

次にSleepコンポーネントを配置します。これはライトを10秒後に消すために配置します。もう少し長めに点灯させる場合は「待ち時間」の値を調整してください。単位はミリ秒です。

image.png

プロパティ
待ち時間 10000

最後にもう一度Gravio Lightコンポーネントを配置して、Gravioライトを消灯します。

image.png

プロパティ
オン チェックを外す

試しに実行してみると、1分以内に開閉センサーが反応していなければ、音声が再生されてライトが10秒間赤く点灯すると思います。開閉センサーを反応させてデータを受信した1分以内に実行すれば、何も起きません。

トリガーの設定

さて、アクションができたら、人感センサーから実行するためのトリガーを設定します。

image.png

適当な名前をつけ、エリアに「玄関」、キーレイヤーに「人感」を指定します。「Motion Detected」には任意の値を指定します。実際には反応したとときに 1という値を受信するだけなのでこうしておけば十分です。
アクションには先ほど作成した「Alert-Sanitizing」を指定します。
あと、「時間」タブの「間隔」を少し長めに設定しておきます。これは、人感センサーが反応しすぎて警告が何度も発せられるのを防ぐためです。一度実行したタイミングからこの時間内は、アクションが再び実行されることはありません。ここでは30000を指定して、30秒間は何もしないようにします。

image.png

保存して有効にしておきます。

さて、ここまでで準備完了です。実際にトリガーがうまく動くか試してみてください。

設置

最後に開閉センサーをポンプに設置します。今回はセンサーが見えやすいようにグルーガンを使って開閉センサーをくっつけてみました。実際にはもうちょっとしっかりくっつくようにビニールテープなどを使ってもいいかもしれません。ただ、ボトルを入れ替えるかもしれないことを考えると取り外しできるようにはしておいたほうがいいですね。

image.png

結果

玄関を入ってアルコール消毒をすると何も起きず、アルコール消毒をしないで上がろうとすると無事ライトが赤く点灯して叱られるようになりました(笑)

image.png

ポイント

  • ポンプを使ったかどうかはドアセンサーをポンプのヘッドに付けて、開閉したかどうかで判断する
  • 気づかせるにはライトや音声がやっぱり効果的
  • 人感センサーのタイミングとドアセンサーのタイミングのタイムラグをうまく調整して最適化する

今後の課題

  • 玄関を入ってきたときはいいが、人感センサーなので出ていくときも反応してしまう → これは人感センサーだといかんともしがたいですね。。
  • ポンプのヘッドがねじれたら反応しなくなる → 動かないようにするか、他のセンサーに変えたほうがいい?
  • ポンプをちょっと押しただけのときには反応しない → 他のセンサーに変えたほうがいい?磁力の強い磁石にすることも考える
  • Google Nest miniがスリープモードになってしまうと若干のタイムラグがある → そもそもどのタイミングで人感センサーが反応したかはわからないのでそれほど気にならない

参考

Inspired

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1