Sympapaの日記

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

Nest DoorBell(4): 通知のタイムラグ対策とHome Assistant連携

Nest DoorBellネタが続くSympapaです。
前回の記事までに電源とチャイムをNestDoorBellに接続して設置するところまで完了しました。
Nest DoorBellの呼び出しボタンを押してからNest mini,Nest HUBやスマホへ通知が来るのに2秒~6秒くらいのタイムラグがありますが、チャイムを設置した1階ではタイムラグなしで来客を知ることが出来るようになりました。
しかし2階にはチャイムが聞こえづらいのでやっぱりNest miniやNest HUBに届く通知のタイムラグもなんとか対策したいところです。
そんなワケで今回はこの対策をしていきます。
f:id:sympapa:20211010113607j:plain

1.ドア開閉センサーでチャイムの動きを検出する方法に再トライする

ネットワークを介さずにNest DoorBellの呼び出しボタンが押されたことを検出する方法を色々と考えました。
基本的には連動しているチャイム頼みですが「チャイムの動きを磁力で検出」「チャイムの動きを電流で検出」「チャイムのピストンで物理スイッチを押す」など...
少し前に「Nest DoorBellと連動するチャイムの動作をAqara Door sensorで検出できないか」をテストしたんですがダメでした。
チャイムのピストンはどう見ても電磁石で動いています。Aqara Door sensorはリードスイッチを使って磁石が近づくとオンになる仕組みなのでいけると思ったんですが...
しかしググっていると同じようにリードスイッチでチャイムの動きを検出しチャイムのスマート化を実現している外国人のブログが見つかりました。
そこにはとにかくリードスイッチの取り付け位置はトライアンドエラーだと書かれていたので再トライしました。

色々試した結果、写真の位置にAqara Door sensorを取り付けることで検出できるようになりました。
チャイムが鳴るとAqara Door sensorのステータスが「開」「閉」とランダムに超短時間で何回か変化します。
チャイムの動作が終わると「開」になるはずなのにたまに「閉」のままで終わってしまうことがあるのが気になりますが、次にDoorBellのボタンを押した時もまたランダムに超短時間で何回か変化するので「閉」に切り替わったことをトリガーに使えばまぁ問題無いでしょう、たぶん。
f:id:sympapa:20211010114000j:plain

2.そんなワケでHome Assistantでオートメーションを組む

チャイムに取り付けたAqara Door sensorが「閉」に変わったことをトリガーにして、Text to speech サービスでNest miniやNest HUBに「来客です」と喋らせるオートメーションを組みました。
Text to speech サービスのタイムラグは少なく、Nest DoorBellの呼び出しボタンを押すと1秒経ったかどうかくらいで「来客です」と話してくれます。
Text to speechを使うことでNest DoorBell本来の「玄関にどなたかいらっしゃいました」の通知に問題が出ないか懸念していましたが、「来客です」の後にちゃんと「玄関にどなたかいらっしゃいました」が通知されNest HUBでは映像が映ります。
Text to speechでは2階に置くNest Mini 2台とNest HUB Gen.1の計3台に通知し、Nest DoorBell本来の「玄関にどなたかいらっしゃいました」の通知は計5台に届きますが、どちらの通知も全てのデバイスでほぼ同時に通知が届いてくれます。
チャイムが鳴るとAqara Door sensorのステータスが「開」「閉」とランダムに超短時間で何回か変化する問題に対応するため最後に1秒のウエイトを入れて動作モードはシングルにし、1秒の間はAqara Door sensorのステータスが変わっても再トリガーされないようにしました。

alias: doorbell_push_by_aqara_doorsensor_test
description: ''
trigger:
  - type: not_opened
    platform: device
    device_id: xxxxx
    entity_id: binary_sensor.aqara_door_sensor_5_chime_on_off
    domain: binary_sensor
condition: []
action:
  - service: tts.cloud_say
    data:
      entity_id: media_player.nestmini1
      message: 来客です
  - service: tts.cloud_say
    data:
      entity_id: media_player.nestmini2
      message: 来客です
  - service: tts.cloud_say
    data:
      entity_id: media_player.nesthub1
      message: 来客です
  - delay:
      hours: 0
      minutes: 0
      seconds: 1
      milliseconds: 0
mode: single

3.おまけ:Home AssistantのNestインテグレーションを試す

Home AssistantにはNest CamやNest DoorBellといったNestデバイスのインテグレーションが用意されています。
Nestインテグレーションを導入するとNest DoorBellで「人を検出した」「動きを検出した」「ドアベルのボタンを押した」をオートメーションのトリガーとして使えるようになります。
上で書いたAqara Door sensorによる検出を再トライする前に、このインテグレーションを使ったらタイムラグが短くならないかと思い試していました。
オマケで導入方法と試した結果を書いておきます。

1)Home AssistantにNestインテグレーションを導入する

GoogleAPI設定は例のごとく面倒です。ってか私には何をやっているのかさっぱり解らずただ手順通りやるだけなのでどこかひとつ間違うとドツボにハマる作業です(^^;
幸い今回のNestインテグレーションに書かれていた手順はとても親切丁寧だったので、おおむねつまづかずに設定できました。なので導入方法は割愛。
www.home-assistant.io

2)Nestインテグレーションを試してみる

前述したようにNest DoorBellでは「人を検出した」「動きを検出した」「ドアベルのボタンを押した」をオートメーションのトリガーとして使えるようになります。
f:id:sympapa:20211010112259p:plain
しかしちょっと試したところ、タイムラグはNest DoorBell本来の「玄関にどなたかいらっしゃいました」と同じくらいかそれ以上ありました。
まぁ「人を検出した」「動きを検出した」は他の方法ではHome Assustantから取得できないので、Googleさん側のタイムラグ改善に期待しつつこのインテグレーションはインストールしたままにしておきましょう。

では。つづく。かな?(笑)