Sympapaの日記

スマートなんとかはスマートじゃない方法でつくられている

スマートホーム: 窓の鍵の戸締りチェックを自動化する(3)

Sympapaです。
今回も「我が家の嫁様は換気した後に窓の鍵を施錠し忘れる持病を抱えているので窓の戸締りチェックを自動化してやろう」シリーズです。
前回までに窓のクレセント錠にドア開閉センサーを取り付けて窓の施錠状態を取得し、家のコントロールパネルであるタブレットの画面に各部屋の窓の施錠状態を表示しました。
今回は、どこかの窓が解錠したままの状態で出かけようとするとお知らせしてくれるようにしていきます。

■構想

  • いずれかの窓がロックされていない時、キッチンに設置してあるHome Assistantのモニター用タブレットが窓の鍵の状態を表示する画面に切り替わる。これを見るとどの窓がロックされていないかが一目で判る。→前回完了
  • ロックされていない窓がある時に出かけようとすると、玄関の電球が点滅しリビングのNest miniとキッチンのNest HUBが「窓がロックされていません」と大音量で喋る。(本当は玄関にNest miniを置きたいが電源がない)→今回はここ

スマートホームシステムとしてはHome Assistantを使っています。


■視覚的お知らせ

玄関の電球にはYeelightのカラーLED電球"YLDP13YL"を使用しています。
昼間でも確実に視覚的に気づくような点灯パターンはあるのか?
試しに赤く点滅させてみましたが昼間だと気づきにくにくいことが判りました。
色々試してHome Assistantの"light: Turn on"サービスにある"Police"というプリセットのエフェクトを使うと青と赤で派手に点滅し昼間でも気づきやすいのでこれを使うことにしました。
知らない人が外から見るとクレイジーだとは思いますが(^^;

■音的お知らせ

本当は玄関にNestスピーカーを置きたいところですが我が家の玄関には電源がありません。
玄関から一番近いリビングのNest miniと、ちょっと離れていますがキッチンのNest HUBから大音量でお知らせすることにしました。

■お出かけのトリガーはどうする?

どこかの窓の鍵が解錠されたままお出かけしようとするとお知らせするようにしたいのですが、「お出かけ」のトリガーはどうしたもんでしょうか?
手っ取り早く"玄関内側の人感センサーが人感を検出"したら「お出かけしようとしている」とみなすことにしました。
ただ、どこかの窓が解錠されている時に来客があり玄関へ行った時にお知らせが発動してしまうと、けたたましい光と音にお客様がドン引きしそうなので、外から人が入って来た場合(人感検出時に玄関のドアが開いている場合)と玄関の外に人が居る場合(玄関外側の人感センサーが人感を検出している場合)はお知らせしないようにしました。

■というわけでHome Assistantのオートメーション

実際にはお知らせ前の玄関の照明の状態を取得し、お知らせ後に元の状態に戻す処理をしていますが、その部分は省略してオートメーションのyamlを書いておきます。
Nest miniとNest Hubの音量はお知らせ前に大音量にしてお知らせ後に元に戻したいのですが、元の音量を取得する方法が判らないので、お知らせ後は34%(0.34)に設定しています。元の音量を取得できる方法があれば是非コメントください(^^

alias: 窓が開いている警告
description: ''
trigger:
  - type: occupied
    platform: device
    device_id: 玄関内側の人感センサー
    entity_id: binary_sensor.hue_motion_sensor_1_occupancy
    domain: binary_sensor
condition:
  - type: is_not_open
    condition: device
    device_id: 玄関ドアのドア開閉センサー
    entity_id: binary_sensor.aqara_door_sensor_2
    domain: binary_sensor
  - type: is_no_motion
    condition: device
    device_id: 玄関外側の人感センサー
    entity_id: binary_sensor.sonoff_motion_sensor_1_ias_zone
    domain: binary_sensor
action:
  - condition: not
    conditions:
      - condition: state
        entity_id: var.window_unlocked_number
        state: '0'
  - delay:
      hours: 0
      minutes: 0
      seconds: 0
      milliseconds: 500
  - service: light.turn_on
    target:
      device_id: 玄関内側の照明(Yeelight カラー電球)
    data:
      brightness_pct: 100
      effect: Police
  - service: media_player.volume_set
    target:
      device_id:
        - リビングのNest mini
        - キッチンのNest HUB
    data:
      volume_level: 0.8
  - service: tts.cloud_say
    data:
      entity_id: media_player.living
      message: 窓の鍵があいています
  - service: tts.cloud_say
    data:
      entity_id: media_player.nesthub_gen2_kitchen
      message: 窓の鍵があいています
  - repeat:
      count: '5'
      sequence:
        - condition: not
          conditions:
            - condition: state
              entity_id: var.window_unlocked_number
              state: '0'
        - service: tts.cloud_say
          data:
            entity_id: media_player.living
            message: 窓の鍵が開いています
            cache: true
        - service: tts.cloud_say
          data:
            entity_id: media_player.nesthub_gen2_kitchen
            message: 窓の鍵が開いています
            cache: true
        - delay:
            hours: 0
            minutes: 0
            seconds: 5
            milliseconds: 0
  - service: media_player.volume_set
    target:
      device_id:
        - リビングのNest mini
        - キッチンのNest HUB
    data:
      volume_level: 0.34
mode: single

■まとめ

これで嫁様が窓の施錠を忘れて出かけることは無くなるでしょう。
本当は誰も家にいない時に窓が解錠されたら警報が鳴るようにもしたいところですが、家族全員の不在判定を100%の精度で出来る方法が今のところ見つかりません。家族が窓の鍵を開けた時に誤りで不在判定になっていて泥棒扱いなんてしたらスマートホームへの理解がダダ下がりに。。。(^^;
不在時に窓が解錠されたら私のスマホに通知が来て、室内の様子をカメラでチェックするってのくらいが現実的かなぁ。まぁここらへんはまた時間があればやってみたいと思います。
とりま窓の鍵の戸締まりチェック自動化はこれにて完結。かな。

では。