どうもこんにちは、ねじわさ です。あけましておめでとうございます。
去年は本当に大学とバイトで忙しくて凄く久々に書きました。(逆に年末年始は暇なので書いてる)
さて、うちの家ではSESAMEを玄関の鍵に設置していて、スマートフォンや API 経由から鍵を施錠/解錠する事ができます。そもそも、何故か知らないけど鍵が家に住む人数分無く、私は鍵を持っておらず作ってくれそうな雰囲気でも無かったので勝手に取り付けました。
せっかくスマートロックを取り付けたので、オートロックとか入れたい気持ちがあるのですが、次の要件から SESAME 内蔵の時間式オートロックは使用できず別途工夫する必要がありました。
そこで、内蔵機能は使用せず外部からオートメーションを用いる形でオートロックを設定しました。
以前は Homebridge を使用していたのですが、これは Apple Homekit と連携するためのサードパーティアプリで Apple 製品をメインで使用している人間でないと使い勝手が悪いので、最近 Home Assistant(以後、HASS) という汎用的に使用できるものに移行しました。その際、HASS の Homekit Client を使用し Homebridge と iPhone/iPad を経由せずサーバー内で直接連携するという戦略を取ることで、無駄にスマートホームのサーバーが動くことにはなりますが、今までの Homebridge プラグインをそのまま使用しながらより柔軟性が高く安定動作させる事が可能になりました。
今回のオートメーションの設定は全て HASS 上で行っています。(下記の yaml は UI から書き出しているだけです)
締め忘れていた時の保険用に、10 分間開きっぱなしであれば閉めるようにします。トリガーとして 10分間鍵が開いていたら
を指定し、アクションで鍵を閉めるように指示するシンプルなものです。
alias: 'Auto Lock (Timeout)'
description: ''
trigger:
- platform: device
device_id: (id)
domain: lock
entity_id: lock.home
type: unlocked
for:
hours: 0
minutes: 10
seconds: 0
milliseconds: 0
condition: []
action:
- device_id: (id)
domain: lock
entity_id: lock.home
type: lock
mode: single
すぐに鍵を閉めたいが、スマホを出すのが面倒な時に動作させるオートメーションです。やりたい事の手順としては下記の通りです。
この動作については、Qrio Lock のオートロック一時停止を見て思いつきました。 ゴミ出しやちょっとした外出に便利!オートロック一時停止機能って知ってました? | Qrio Lock Blog
今回要件としては「締め出しを防ぎつつオートロックする事」なので、Qrio Lock に搭載されている機能とは全く逆の事をしていますが、新たにボタン等を用意する事なく特別なアクションをする事ができたので丁度良かったです。
トリガーとしては前回と異なり解錠時にすぐオートメーションを開始します。ただし、開始後のアクションで wait_for_trigger というアクションを使用し、1 秒以内に施錠イベントが来なければタイムアウトによりオートメーションを中止するという分岐を行っています。その後は解錠 → 遅延 → 施錠と行っているだけです。
なお、一回目の施錠後自動で開けているのは、単純に手で動かすのが面倒な点と、SESAME から何かしらのアラートを出す事はできないので、タイミングなどの問題でオートメーションが失敗した場合に確実に分かるようにするためです。
alias: 'Auto Lock (Immediately)'
description: ''
trigger:
- platform: device
device_id: (id)
domain: lock
entity_id: lock.home
type: unlocked
condition: []
action:
- wait_for_trigger:
- platform: device
device_id: (id)
domain: lock
entity_id: lock.home
type: locked
timeout: '1'
continue_on_timeout: false
- device_id: (id)
domain: lock
entity_id: lock.home
type: unlock
- delay:
hours: 0
minutes: 0
seconds: 10
milliseconds: 0
- device_id: (id)
domain: lock
entity_id: lock.home
type: lock
mode: single
今の所、
については諦めた後それ以上アクションを起こさないので、オートメーションを過信して開いたまま誰もいないという可能性が出てきてしまいます。そのため、全員に対して通知を飛ばすとかやった方がいいかなとは思っています。