Sympapaのスマートホーム日記

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

新居のスマート化: YKK AP玄関ドア電気錠をHome Assistantでオートロック化する(2)

Sympapaです。


新居の玄関ドアには工務店の標準仕様であるYKK APのヴェナートD30を採用しました。
電気錠はリモコンを持っていれば帰宅時にドアノブに付いたボタンを押すだけで解錠できるリモコンキー仕様です。
Home Assistantと連携したいので100V仕様にしてJEM-A端子が付いている操作盤YS KAG-B3を導入しました。


しかしYKK APの電気錠は、玄関ドアの屋内側には解施錠ボタンが無く、オートロック機能も帰宅時に機能するものは付いていますが外出時に機能するものは付いていません。
私は何故か実物を見るまで、屋内側にも解施錠ボタンがあってオートロック機能も当然あるものだと思い込んでいたのです。痛恨のミスでした。


そんなワケで、YKK AP玄関ドアをJEM-A端子 - ESP32 - ESP HOME - Home Assistantと繋いでHome Assistantから電気錠を操作できるようにし、更にドアの屋内側に解錠ボタンを追加してオートロック機能を実現しちゃおうってのがこのシリーズになります。
前回はHome Assistantと接続するところまでを書きました。
sympapa.hatenablog.com


今回は、ドアの屋内側に解錠ボタンを取り付け、オートロック制御のオートメーションを組むところまでを書いていきます。

■玄関ドアの屋内側に取り付けるボタンを選ぶ

この計画で最も悩んだのが玄関ドアの屋内側に取り付けるボタン選びです。
手っ取り早いのはZigbbe接続のリモートボタンなのですが小さいものを探しても40mm×40mmくらいあります。ドアノブに取り付けるには大きすぎます。ドアノブに手をかけてボタンを押してそのままドアノブを押してドアを開けるってのがスマートだと思うんですよね。
それに後付け感もなるべく出したくないので結構悩みました。


そんなワケでマルツで物色していたところ、薄型で14mm×14mmというサイズでクリック感も悪くないタクトスイッチを見つけました。これならドアノブ上にくっつけられそうです。

www.nkkswitches.co.jp


Zigbee接続のドア開閉センサーのリードスイッチを取り外して代わりにこのタクトスイッチを接続し、Zigbeeで接続できるようにしてやりました。
リードスイッチは磁力でオンオフする単純なスイッチなので、リードスイッチ式のドア開閉センサーのリードスイッチを取り外して代わりに好きなスイッチを接続すれば無線式リモートスイッチが簡単に作れます。ドア開閉センサーは小さいものがほとんどなのでコンパクトに作れるし、工夫次第で色々な使い道があるDIYスマートホーム化の強い味方です。
このドア開閉センサーの改造についてはこちらの記事で書いています。
sympapa.hatenablog.com


ドア開閉センサーの本体はドアノブの裏側にくっつけて目立たないようにします。黒の塗装をしてやろうと思いましたが、とりあえず黒のビニルテープを貼ってごまかしました(笑)
というわけで取り付けた感じ、いつも見る角度から見ればさほど後付け感も無くクリック感も良いので及第点ですが、覗き込んだら落第です(笑)
できれば3Dプリンターで何か作ってうまいことしたいですね。3Dプリンター欲しい。。。

■オートロックのオートメーションを組む

まずは構想です。
我が家の玄関ドアの電気錠の仕様として、JEM-A端子を使って解錠した場合、ドアを一定時間(設定により25秒 or 50秒)開けなければ自動的に再施錠されますが、ドアを開けるとその後自動施錠はされません。
従って、このボタンで解錠した後は、ドアを開けて閉めた後に施錠するオートメーションを組まなくてはいけません。
誤動作やバグを減らすために、このボタンは「解錠専用」とすることに決めました。
このボタンを押すと、解錠する→ドアが開くのを待つ→ドアが閉まるのを待つ→施錠する というオートメーションを組むことにします。


そして、操作盤にはロックだけではなくドアの開閉状態も表示されるのですが、ドアの開閉状態を出力する端子などはありません。ドアが開くと操作盤のLEDが光るので、操作盤を改造してLEDの電流を拾えばドアの開閉状態をESP32を使って取得できそうな気がしますが、ハンダ付けしてしまうと保証がきかなくなりそうだしハンダづけが苦手なので(笑)、ドアにドア開閉センサーを取り付けてドア開閉状態を取得することにしました。
そうすると、ドア開閉センサーの通信エラーなどで状態を正しく取得できなかった場合のフェールセーフも考えなくてはいけません。
ここはボタンを押して解錠後5分間「解錠」状態の場合は、2分毎に施錠されるまで施錠の操作を繰り返すことで対応することにしました。
まぁ途中でエラーなどによりHome Assistantが停止してしまったらどうしようもありませんが。。。


実際に組んだオートメーションは下記のモノです。
オートロックのシーケンスが作動中であることのフラグとして、"input_boolean.auto_lock_running"を先に作成しておきました。

alias: Entrance_door_button_pushed
description: ""
trigger:
  - type: not_opened
    platform: device
    device_id: ボタンのドア開閉センサー
    entity_id: ボタンのドア開閉センサーの開閉
    domain: binary_sensor
condition:
  - condition: state
    entity_id: binary_sensor.entrance_lock_status
    state: "on"
    enabled: true
action:
  - service: switch.turn_on
    data: {}
    target:
      entity_id: switch.entrance_lock_toggle
  - service: input_boolean.turn_on
    target:
      entity_id: input_boolean.auto_lock_running
    data: {}
  - wait_for_trigger:
      - type: opened
        platform: device
        device_id: ドアのドア開閉センサー
        entity_id: ドアのドア開閉センサーの開閉
        domain: binary_sensor
        for:
          hours: 0
          minutes: 0
          seconds: 1
    timeout:
      hours: 0
      minutes: 0
      seconds: 55
      milliseconds: 0
  - wait_for_trigger:
      - type: not_opened
        platform: device
        device_id: ドアのドア開閉センサー
        entity_id: ドアのドア開閉センサーの開閉
        domain: binary_sensor
        for:
          hours: 0
          minutes: 0
          seconds: 1
    timeout:
      hours: 0
      minutes: 5
      seconds: 0
      milliseconds: 0
  - repeat:
      sequence:
        - if:
            - type: is_off
              condition: device
              device_id: 対象のESP32
              entity_id: ロックの状態
              domain: binary_sensor
              for:
                hours: 0
                minutes: 0
                seconds: 1
          then:
            - type: turn_on
              device_id: 対象のESP32
              entity_id: ロックの開閉
              domain: switch
            - delay:
                hours: 0
                minutes: 0
                seconds: 5
                milliseconds: 0
            - if:
                - type: is_on
                  condition: device
                  device_id: 対象のESP32
                  entity_id: ロックの状態
                  domain: binary_sensor
                  for:
                    hours: 0
                    minutes: 0
                    seconds: 1
              then:
                - service: input_boolean.turn_off
                  metadata: {}
                  data: {}
                  target:
                    entity_id: input_boolean.auto_lock_running_boolean
                - stop: ""
                  error: false
            - delay:
                hours: 0
                minutes: 2
                seconds: 0
                milliseconds: 0
      until:
        - type: is_on
          condition: device
          device_id: 対象のESP32
          entity_id: ロックの状態
          domain: binary_sensor
          for:
            hours: 0
            minutes: 0
            seconds: 1
mode: single


そしてこのオートメーションが走っている時に他の方法で施錠された場合を想定し、施錠されたら上のオートメーションの動作を停止するオートメーションを作成します。
まぁこのオートメーションを作成するんだったら、上のオートメーションでロックしたら停止するシーケンスは要らなかったですね(汗)

alias: auto_lock_running_cancel
description: ""
trigger:
  - type: turned_on
    platform: device
    device_id: 対象のESP32
    entity_id: ロックの状態
    domain: binary_sensor
    for:
      hours: 0
      minutes: 0
      seconds: 2
condition:
  - condition: state
    entity_id: input_boolean.auto_lock_running_boolean
    state: "on"
    for:
      hours: 0
      minutes: 0
      seconds: 2
action:
  - service: automation.turn_off
    metadata: {}
    data:
      stop_actions: true
    target:
      entity_id: automation.entrance_door_button_pushed
  - service: automation.turn_on
    target:
      entity_id:
        - automation.entrance_door_button_pushed
    data: {}
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.auto_lock_running_boolean
    data: {}
mode: single

■まとめ

これで、外出時にボタンで解錠でき、ドアが閉まると自動でロックされるようになりました。
サムターン2つを手動で回して解錠した場合はオートロックは有効にならないので、ちょっとだけ外に出る時などは使い分けができます。
ZigbeeWi-Fiによる通信を介しているにも関わらず、ボタンを押してから解錠まで全くラグを感じずレスポンスは良好です。
あとは誤動作しないことを祈るのみ。
ってか、これから電気錠付玄関ドアを選ぶ方は、よーく仕様を確認することをおススメします(笑)
利便性で選ぶならYKK APよりLIXILがおススメ。


それでは。