Sympapaのスマートホーム日記

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

Nature Remo: パナとソニーのテレビのオンとオフ別々の赤外線信号を登録する

こんにちは、Sympapaです。

スマートIRリモコンを使ってスマートホーム化をし始めると「リモコンの電源ボタンがトグル式なので困る」「オンとオフを明示的に制御したい」ってことが出てくると思います。
我が家でいうと照明のリモコンは電源ONとOFFが別のボタンになっていますが、テレビのリモコンの電源ボタンはひとつしかなくトグル式です。テレビで電源ONとOFFが別になっているものは見たことがありません。
普通にリモコンを使う分には人間がテレビがついているかを見て電源をON/OFFするのでトグル式でいいんですが、例えば「OK Google ! キッチンを消して!」でキッチンの照明とテレビをOFFにするという自動化をしたい場合は、現在のテレビの電源がONであろうがOFFであろうが状況に関係なく結果はOFFになって欲しいので必ずOFFにできる赤外線信号が欲しいところです。

テレビメーカーさんはリモコンには搭載していなくても、電源ONとOFFの赤外線信号を別々に用意してくれている場合もあるようです。
今回は私が使用しているPanasonicSONYのテレビの電源ONとOFFが別になった赤外線信号を、Nature Remoで使用する方法を書いていきたいと思います。
我が家で使用しているVIERAはGX855、BRAVIAはW730Cという機種でこれらで動作確認しています。

Nature Remo用赤外線コード

まずはNature Remoで使えるVIERA,BRAVIAの電源ON/OFF別コードから。

VIERA: 電源ON
{"format":"us","freq":38,"data":[3400,1700,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,1275,425,65535,0,6240]}

VIERA: 電源OFF
{"format":"us","freq":38,"data":[3400,1700,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,1275,425,65535,0,4540]}

BRAVIA: 電源ON
{"format":"us","freq":38,"data":[2411,580,610,610,1191,610,1190,611,1190,610,580,610,1190,611,610,580,1221,579,611,610,580,610,580,611,610,25207,2381,610,611,579,1221,580,1190,610,1191,610,610,580,1221,580,610,610,1191,610,580,610,610,580,611,610,580,25207,2411,580,610,611,1190,610,1190,611,1190,610,580,611,1190,610,610,580,1221,580,610,611,579,611,610,580,610,65535,0,36180]}

BRAVIA: 電源OFF
'{"format":"us","freq":38,"data":[2411,580,1220,580,1221,580,1221,579,1221,580,610,611,1190,610,580,610,1190,611,610,580,610,580,611,610,580,24627,2381,610,1190,611,1190,610,1190,611,1190,610,580,610,1191,610,610,580,1221,580,610,610,580,611,610,580,610,24597,2411,580,1221,580,1220,580,1221,580,1220,580,611,610,1190,610,580,611,1190,610,611,579,611,610,580,610,611,65535,0,36180]}'

Nature RemoのクラウドAPIを使ってリモコン信号をNature Remoのサーバーへ登録する

以下の方法で既にアプリからRemoに登録したテレビの追加ボタンとして任意の赤外線信号を登録できます。
おそらくRemoの設定は赤外線信号も含めて全てサーバ側で持っておく仕組みなのだと思います。
(Remoが複数ある場合はローカルAPIで片方のRemoから赤外線信号を送信しもう一方のRemoで受信して登録するのもアリです。)

1.アクセストークンを取得する

RemoのクラウドAPIを使用するためのアクセストークンをここで取得します。

2.対象となるテレビのappliance IDを取得する

対象となるテレビのappliance IDを取得するため下のコマンドを叩きます。

curl -X GET "https://api.nature.global/1/appliances" -H "Authorization: Bearer あなたのアクセストークン"

すると以下のようなjsonが返ってきます。実際には他の登録デバイスのも含めてズラっと表示されるので対象のテレビが書かれた箇所を探します。
idがたくさんあるのでややこしいですが、デバイス毎に最初にappliance ID,それを使うRemoの情報,そのデバイスの情報という順に並んでおり一番上(下の例でいうとxxxxx)がappliance IDです。これをコピーします。

 {
    "id": "xxxxx",
    "device": {
      "name": "リビングのRemo3",
      "id": "yyyyy",
      (略
      "temperature_offset": 0,
      "humidity_offset": 0
    },
    "model": {
      "id": "zzzzz",
      "country": "JP",
      "manufacturer": "panasonic",
      "remote_name": "zzzzz",
      "name": "Panasonic TV 001",
      "image": "ico_tv"
    },
    "type": "TV",
    "nickname": "リビングのテレビ",
    "image": "ico_tv",
    "settings": null,
    "aircon": null,
    "tv": {
      "buttons": [
        {
          "name": "power",
          "image": "ico_io",
          "label": "TV_power"
        },
        {
          "name": "select-input-src",
          "image": "ico_input",
          "label": "TV_source"
        },


3.赤外線信号を新たなボタンとして登録する

下のコマンドを使って、対象のテレビに新たな追加ボタンとして赤外線信号を登録します。
image=にはアイコン("ico_on"とか"ico_off"とか)を、nameには名前を指定します。

curl -X POST "https://api.nature.global/1/appliances/対象のテレビのapplianceID/signals" -H "Authorization: Bearer あなたのアクセストークン" -H "Content-Type: application/x-www-form-urlencoded" -d "message={"format":"us","freq":38,"data":[2411,580,(略),0,36180]}&image=ico_on&name=ON"

Windowsの場合はmessage=以降の " を \" に置き換える

うまくいけば下のように返って来ます。Remoのアプリから対象のテレビのリモコン画面を開いて左にスワイプすると出てくる2ページ目のリモコン画面上にボタンが追加されているはずです。

{"id":"対象のテレビのapplianceID","name":"ON","image":"ico_on"}

f:id:sympapa:20210904184525j:plain

Nature RemoのローカルAPIを使って赤外線コードを送信する

上の方法でサーバーへ登録してしまった方がRemoのアプリにもボタンが追加されて使い勝手が良いですが、ローカルAPIを使って赤外線送信をすることも出来ます。

curl -XPOST http://192.168.11.x/messages -H "X-Requested-With: local" -d '{"format":"us","freq":38,"data":[3400,(略),6240]}'


Home Assistantで使う

1.ローカルAPIで使う

ローカルAPIを使う場合はrest_commandでRemoへ直接赤外線信号送信のコマンドを送ります。
IPアドレスは赤外線送信をしたいRemoのものです。

VIERA ON

rest_command:
  viera_on_local:
    url: 'http://192.168.11.x/messages'
    method: POST
    headers:
      Accept: 'application/json'
      Content-Type: 'application/json'
      X-Requested-With: 'curl'
      Expect: ''
    payload: '{"format":"us","freq":38,"data":[3400,1700,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,1275,425,65535,0,6240]}'

VIERA OFF

  viera_off_local:
    url: 'http://192.168.11.x/messages'
    method: POST
    headers:
      Accept: 'application/json'
      Content-Type: 'application/json'
      X-Requested-With: 'curl'
      Expect: ''
    payload: '{"format":"us","freq":38,"data":[3400,1700,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,425,425,1275,425,1275,425,1275,425,1275,425,1275,425,1275,425,425,425,1275,425,65535,0,4540]}'

BRAVIA ON

  bravia_on_local:
    url: 'http://192.168.11.x/messages'
    method: POST
    headers:
      Accept: 'application/json'
      Content-Type: 'application/json'
      X-Requested-With: 'curl'
      Expect: ''
    payload: '{"format":"us","freq":38,"data":[2411,580,610,610,1191,610,1190,611,1190,610,580,610,1190,611,610,580,1221,579,611,610,580,610,580,611,610,25207,2381,610,611,579,1221,580,1190,610,1191,610,610,580,1221,580,610,610,1191,610,580,610,610,580,611,610,580,25207,2411,580,610,611,1190,610,1190,611,1190,610,580,611,1190,610,610,580,1221,580,610,611,579,611,610,580,610,65535,0,36180]}'

BRAVIA OFF

  bravia_off_local:
    url: 'http://192.168.11.x/messages'
    method: POST
    headers:
      Accept: 'application/json'
      Content-Type: 'application/json'
      X-Requested-With: 'curl'
      Expect: ''
    payload: '{"format":"us","freq":38,"data":[2411,580,1220,580,1221,580,1221,579,1221,580,610,611,1190,610,580,610,1190,611,610,580,610,580,611,610,580,24627,2381,610,1190,611,1190,610,1190,611,1190,610,580,610,1191,610,610,580,1221,580,610,610,580,611,610,580,610,24597,2411,580,1221,580,1220,580,1221,580,1220,580,611,610,1190,610,580,611,1190,610,611,579,611,610,580,610,611,65535,0,36180]}'


2.クラウドAPIで使う

ローカルAPIが使えるので使わない気もしますが我が家で稼働しているRemo 2, Remo mini(初代), Remo 3の内Remo 2 はローカルAPIを使うとスリープ問題が発生してまともにローカルAPIを使えない問題があるのでクラウドAPIでの使い方も書いておきます。
上で書いた方法で登録したリモコン信号をクラウドAPIを使って送信させます。

後から登録したボタンには個別にコードが与えられるのでそれを調べます。
まずはこのコマンドを叩き・・・

curl -X GET "https://api.nature.global/1/appliances" -H "Authorization: Bearer あなたのアクセストークン"

返って来たJSONの中で対象のテレビの"signals"ってとこに登録したボタンのIDがありますのでこれをコピーします。

    "model": {
      "id": "zzzzz",
      "country": "JP",
      "manufacturer": "panasonic",
      "remote_name": "zzzzz",
      "name": "Panasonic TV 001",
      "image": "ico_tv"
    },
    "type": "TV",
    "nickname": "リビングのテレビ",
    "image": "ico_tv",
    "settings": null,
    "aircon": null,
 "signals": [
      {
        "id": "オンのボタンのID",
        "name": "ON",
        "image": "ico_on"
      },
      {
        "id": "オフのボタンのID",
        "name": "オフ",
        "image": "ico_off"
      }
    ],

Home Assistantからはshell_commandを使って対象のボタンを押すAPIを叩きます。

shell_command:
  tv_on: "curl -X POST 'https://api.nature.global/1/signals/ボタンのID' -H 'Authorization: Bearer あなたのアクセストークン'"

電源ONと電源OFFを明示的にできるようになると自動化の幅が広がりますね。では。

スマートホーム: Aqara motion sensorの更新間隔を5秒にするMod

Sympapaです。
以前の記事で書きましたが、我が家でメインで使用しているZigBee接続の人感センサーはAqara motion sensor (RTCGQ11LM)です。
照度センサーも内臓していて安価なのが大きな理由です。

しかし不満が全く無いわけではありません。
私はHueの人感センサーを最初に使っていたんですが、Hueの人感センサーは人感のステータスがいつでもリアルタイムに更新されます。
しかし中華人感センサーの多くは人感の検出から1分間隔で更新されるため、検出後1分間は人感が無くても「人感無し」にステータスが変わらないし検出から1分後に人感が検出されるとまたその1分後に更新される仕様になっています。
Aqara motion sensorもやはり中華らしく1分間隔です。
人感検出で照明を点けて人感無しで照明を消すといった単純なオートメーションであれば普通は1分間くらい照明が点灯していて欲しいし気にならないのですが、我が家のトイレの照明は下記ののように自動化しているので、前の人がトイレから出てすぐに次の人がトイレに入ると最長で1分間照明が点かない問題が発生してしまいます。


[人感あり]

[照明ON]

[ドアが閉まるのを待つ]

[ドアを開ける]

[照明OFF]


そんなワケで調べていたら、たぶん韓国の方が発見した改造により更新間隔を5秒に出来るそうなのでやってみました。韓国語のブログの方には分解動画もあります。
community.smartthings.com
livebywant.tistory.com

改造する

分解方法は前述の韓国語のブログに動画があるので割愛します。
改造は取り出した基板の赤い矢印の2箇所をつないで導通させるだけってことのようです。

しかし実際に開けてみると意外と狭くってフツーのコテ先のハンダゴテと私のハンダづけの腕では無理そうです(汗
発見者の韓国の方は「4B鉛筆でもいける」と書かれていたので「ちょっとくらい抵抗が高くても大丈夫そうだな」と思い導電性塗料をAmazonで購入して使用しました。
PoLycalmってやつです。1870円と高いですがハンダづけで失敗するより(汗

付属の刷毛では太すぎなのでつまようじの先に着けて塗布しました。
そんなにモリモリ塗らなくてもちゃんと導通するというか今回の改造は抵抗が高くても機能するっぽいです。
余計なところにPoLycalmが付着してしまっても綺麗なつまようじで擦れば取れるのではみ出したのはしっかり取り除きました。
基板の色が黒なので塗ったPoLycalmが見づらい。。。ルーペはあった方がいいかもです。
こんな風になりました。


Home Assistantの設定

韓国語のブログの方は改造したAqara motion sensorをSmart Thingsで使用されていますが、ハードの改造だけでSmart Things上のステータスが5秒毎に更新されるようになったようです。
しかしHome Assistant(ZHA)はAqara motion sensorの更新間隔は1分だと情報を取得して認識している(?)のか、ハードを改造してもそのままでは1分間隔でしか更新されません。
調べているとPythonスクリプトでリセットする方法が見つかりましたが私にはチンプンカンプン(汗
更に調べているとここでHome Assistantのオートメーションを使ってリセットする方法を見つけました。
community.home-assistant.io

zha.set_zigbee_cluster_attributeのサービスを使いモーション検出状態のクラスターを"0"にすればリセットがかけられるようです。
人感検出後10秒でリセットされるオートメーションを組みました。

alias: aqara_motion_sensor_reset
description: ''
trigger:
  - type: motion
    platform: device
    device_id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    entity_id: binary_sensor.aqara_motion_sensor_ias_zone
    domain: binary_sensor
condition:
  - condition: state
    entity_id: binary_sensor.aqara_motion_sensor_ias_zone
    state: 'on'
action:
  - delay:
      hours: 0
      minutes: 0
      seconds: 10
      milliseconds: 0
  - service: zha.set_zigbee_cluster_attribute
    data:
      endpoint_id: 1
      cluster_id: 1280
      attribute: 2
      value: '0'
      ieee: xx:xx:xx:xx:xx:xx:xx:xx
mode: single

後日追記:Zigbee2MQTTの場合は、Zigbee2MQTTのUIからこの人感センサーの設定を開いて、Settings(Specific)のoccupancy_timeoutを"10"に設定すれば10秒でリセットされるようになります。オートメーションは不要です。


動作確認

人感検出後10秒後に人感が無ければ「未検出」に変わるようになり、その後すぐにでも人感が検出されれば「検出」に切り替わるようになりました。
これでほぼリアルタイムに人感の状態が更新されるので使い勝手が向上しました(^^
あとはバッテリー持ちがどれくらい悪化するのか様子見ですね。

では。

Home AssistantからGoogle Homeへトリガーを送る: Assistant Relayの導入

f:id:sympapa:20210822170636p:plain
こんにちは。
Home Assistant初心者のSympapaです。

Home AssistantにはGoogle HomeやAlexaと接続するためのインテグレーションが用意されてますが、Home AssistantからGoogle HomeやAlexaへトリガーを送る方法は標準では用意されていません。
我が家ではスマートロック"Qrio Lock"を使用していますがQrio LockはAPIが公開されていないのでHome Assistantから直接操作することが出来ないんですよね。
なのでHome AssistantからGoogle HomeやAlexaへトリガーを送りGoogle HomeやAlexaを介してQrio Lockを操作したかったわけです。

以前の記事でHome AssistantからAlexaへトリガーを送る方法2種類を書きましたが、今回はHome AssistantからGoogle Homeへトリガーを送ることが出来るようになるアドオン、”Assistant Relay”について書いていきます。
”Assistant Relay”のページはこちらです。
assistantrelay.com
”Assistant Relay”を使うとHome Assistantから「Google Home(Nest)デバイスへのブロードキャスト」「カスタムコマンドの送信」などが出来るようになり、「カスタムコマンドの送信」を使ってGoogle Homeにトリガーを送ることが出来ます。

しかしHome Assistant導入のために初めてラズベリーパイを購入し当然のごとく一発でインストールできるHass.ioを使ってHome Assistantを導入した私には、”Assistant Relay”のインストール方法をみてもさっぱりワケがわかりません(汗
Home Assistantとは関係ないところで”Assistant Relay”を動かしといてHome Assistantから呼び出して使うんだろうと想像しているのですが、そもそもHass.ioにこれをインストールしても動くのかわかりません。
ってか”Assistant Relay”のページのIntroductionの中でHass.io用の”Assistant Relay”なるものを見つけました。
Hass.io用は開発が止まっているようで”Assistant Relay”のバージョンも本家と比べてかなり古いですが、まぁとりあえずこいつをインストールしていきましょう。
github.com

”Assistant Relay for Hass.io”のGithubに書かれたとおりインストールと設定を進めていきます。

1.インストール

Home Assistantのアドオンストアを開きメニューボタンからリポジトリを選びます。
リポジトリ」にhttps://github.com/Apipa169/Assistant-Relay-for-Hassioを追加します。
アシスタントリレーが下に表示されるのでそれをクリックし「インストール」をクリックします。

2.構成

「開始」をクリックしてアドオンを実行します。
[Web UIを開く]をクリックするかブラウザでhttp:// [IP]:[PORT]にアクセスし、表示された指示に従って設定します。
・・・とAssistant Relayの説明に書かれているのでこの記事でも詳細を書かずに丸投げしたいところですが、指示が超絶粗々で初心者にはハードルが高く一度やった自分も記憶だけでまた設定出来る気がしないので書いておきましょう。

  1. Google Assistant Actions Consoleへアクセスする。
  2. [NEW PROJECT]ボタンをクリックする。
  3. プロジェクト名を入力し、言語は日本語、場所は日本を選択して[CREATE PROJECT]ボタンをクリックする。
  4. https://console.developers.google.com/apis/api/embeddedassistant.googleapis.com/overview?authuser=2へアクセスする。
  5. 上にGoogle Cloud Platformと書かれているが、その右にあるプルダウンメニューからさっき作成したプロジェクトを選択する。もし選択肢にさっき作成したプロジェクトが表示されない場合はその右にある検索マーク(Open Search)を押し、さっきのプロジェクト名を検索して検索結果から選べば表示されるようになる。
  6. Google Assistant APIと書かれた下にある[ENABLE]ボタンを押す。これでAPIが有効になる。
  7. 左のメニューから"Credentials"を選ぶ。
  8. 開いた画面の右側にある[CONFIGURE CONSENT SCREEN]ボタンを押す。
  9. 開いた画面でExternalを選ぶ。
  10. App nameの項目に名前をを入力する。
  11. User support emailに自分のメールアドレスを入力する。
  12. Developer contact informationに自分のメールアドレスを入力する。
  13. [SAVE AND CONTINUE]ボタンを押す。
  14. Scopeの画面は何も触らずにそのまま [SAVE AND CONTINUE]を押す。
  15. Test usersの画面でも何も触らずにそのまま [SAVE AND CONTINUE]を押す。※Test Userの設定は必要だが何故かここでは設定できなかった
  16. 左のメニューから再び”OAuth consent screen”を選ぶ。
  17. "Test user"の項目で[ADD USER]を押しAssistant relayで使う予定のGoogleアカウントのGmailアドレスを入力して[SAVE]を押す。もう一回[SAVE]を押す。
  18. "Publishing status"の項目で[PUBLISH APP]ボタンを押す。
  19. 左のメニューからCredentialsを選ぶ。
  20. 上にある[CREATE CREDENTIAL]ボタンを押しOAuth client IDを選択する。
  21. "Application type"のプルダウンメニューから"TVs and Limited Input devices"を選ぶ。
  22. 名前をつける。
  23. [CREATE]ボタンを押す。するとYour Client IDとYour Client Secretが表示されるがメモらなくてもよい。
  24. 右側の窓のOAuth 2.0 Client IDsの中にさっき作った名前のものが現れるので、その右にあるダウンロードボタンを押す。"client_secret_~.json"ファイルがダウンロードされる。
  25. Home Assistantの"Assistant Relay"WEB UIの画面へ戻り"Next"ボタンを押す。
  26. User Name(これは適当に付ければいい)を入力し、"Select file"ボタンを押してさっきダウンロードしたファイルを選択する。
  27. Googleの認証画面が表示されるのでGoogleアカウントでログインして承認する。このアカウントはさっき設定した"Test user"とアカウントと同一でなくてはいけない。
  28. トークンが表示されるのでコピーするなりメモるなりする。
  29. "Assistant Relay"のWEB UIに戻ると「トークンを入れろ」という画面が開いているのでペーストするなり入力するなりする。(ひょっとすると別タブで開いているかもしれないので注意)
  30. うまくいくと全てのGoogle Home(Nest)デバイスが何かしゃべるので注意。

3.やっとこさ使う

RestコマンドからGoogle Homeバイスへブロードキャストしたりカスタムコマンドを送信したりできます。
お目当てのカスタムコマンドはこんな感じでGoogle Homeへコマンドを話すのと同じことが無音で出来るようになります。
URLのIPアドレスはHome Assistantが走っているラズパイのものです。裏でAssistant Relayが走っていてポート3000で呼び出せるということのようですね。よーわかりませんが(汗

rest_command:
  assistant_relay:
    url: http://192.168.11.x:3000/assistant
    method: POST
    content_type: 'application/json'
    payload: '{"command":"キッチンの電気を消して", "user":"sympapa"}'

”Assistant Relay for Hass.io”のGitHubには下のようなExampleが用意されてました。
Rest Commandの中にカスタムコマンドを記述しなくても、オートメーションの作成時にカスタムコマンドを"command"に指定してやればRest Commandは使いまわし出来るよってことですね。
カスタムコマンド以外は試してませんがそのうちGoogle Homeに喋らせるオートメーションも作成したいと考えているので、また試したいと思います。

# Example configuration.yaml
rest_command:
  assistant_broadcast:
    url: http://192.168.10.2:3000/assistant
    method: POST
    content_type: 'application/json'
    payload: '{"command":"{{ command }}", "user":"username", "broadcast":true}'
    
  assistant_converse:
    url: http://192.168.10.2:3000/assistant
    method: POST
    content_type: 'application/json'
    payload: '{"command":"{{ command }}", "user":"username", "converse":true}'

  assistant_relay:
    url: http://192.168.10.2:3000/assistant
    method: POST
    content_type: 'application/json'
    payload: '{"command":"{{ command }}", "user":"username"}'
# Example test lovelace card
type: entities
entities:
  - action_name: Broadcast
    name: test broadcast
    service: rest_command.assistant_broadcast
    type: call-service
    service_data:
      command: hello, this is a test broadcast
# Automation action example (just fill in "command: hello" if you are using the editor)
  action:
  - data:
      command: hello
    service: rest_command.assistant_broadcast


これでHome AssistantからAlexaだけじゃなくてGoogle Homeへもトリガーを送れるようになったので、Google Homeをメインのスマートスピーカーにしている我が家でも色々できそうです。

(後日追記)
と思ったけど、Google Assistant SDKの仕様でGoogle Home標準のアクション(〇〇の部屋の電気をつけてなど)はトリガーできますが、Google Homeのルーティンをトリガーすることはできないようです。なので、どうしてもGoogle Home経由でしか動作させられないデバイスを動かすための機能って感じでしょうか。
それに動作の安定性もいまひとつです。
Alexa Media PlayerからAlexaへトリガーを送る方が使い勝手が良いかもですね。

では。

スマートホーム: 人感センサーはどれを選ぶ?

Home Assistant初心者のsympapaです。

スマートホーム化には欠かせない「人感センサー」、今回は実際に私が使用している「人感センサー」のレビューを書きたいと思います。
私はHome Assistant + Zigbee USBドングル: Nortek HUSBZB-1 + ZHAという組み合わせで使っていますが、他の構成やシステムであってもZigbee接続の人感センサーに興味がある方の参考になれば幸いです。


[もくじ]



Philips Hue 人感センサー (PLH06MS)

Philips Hue Motion Sensor (SML001) Zigbee compatibility
f:id:sympapa:20210821114602j:plain
おなじみ(?)Hueの人感センサーです。4000~4500円くらいします。
人感センサー、照度センサーに加えて温度センサーが内臓されてます。
実際使ってみて人感の反応は良好で検出する角度も広いです。検出できる距離はそこそこといった感じで4mくらいの感じですが角度で距離があまり変わらない印象です。
私が使っている他の3種類の人感センサーは人感が検出されてから1分間は人感の状態が更新されず(1分後にしか人感未検出にならないし1分間は再度人感検出がされない)その後の更新も1分間隔というものばかりですが、Hueのコレは常時ほぼリアルタイムに(といっても実際に人感が無くなってからレポートまでに5~10秒くらいかかりますが)人感の状態が更新されるという唯一無二の存在です。
照度については人感検出が無い場合の更新は5分間隔のようで、人感が検出された場合にも更新されます。
人感検出時の照度の更新タイミングが少し曲者で、Home Assistant + ZHAで使っている場合照度より人感の方が先に更新されるためか、トリガーを人感・条件を照度にして照明をオンにするオートメーションを組むと実際の照度は条件を満たしているにも関わらず照明が点かない(または条件を満たしていないのに照明が点く)ことがあります。照度条件の前にたぶん200ミリ秒くらいの遅延を入れることで確実に反映されるようになりますが「200ミリ秒は大きなタイムラグだ」と仰る方は照度を条件に使わない方がよいかもしれません。
また別に支障はありませんがHome Assistant + ZHAで使った場合"started detecting motion"は反応が無く"occupancy became occupied"をトリガーにしなくてはいけません。


高価ですが更新がリアルタイムなので用途によってはこれしか選択肢が無い場合もあると思います。我が家では2個使ってます。

[長所]

  • すぐ手に入る
  • 人感の状態がいつでもリアルタイムに更新される
  • 検出できる範囲(角度)が広い

[短所]

  • 価格が高い
  • 照度の更新タイミングが微妙(条件の前に遅延を入れればカバーできる)
  • Home Assistant+ZHAでは"started detecting motion"は使えない(occupancy became occupiedが使えるので支障はない)


Aqura Motion sensor (RTCGQ11LM)

https://zigbee.blakadder.com/Aqara_RTCGQ11LM.html
f:id:sympapa:20210821121545j:plain
たぶんHome Assistant界隈で一番使われている人感センサーがコレじゃないかと思います。
照度センサーも内臓されていて安価です。Aliexpressで1個1700円前後で売られていますがまとめ買いだと安くなり例えば3個だと計4000円前後で売られています。
実際に使ってみて人感の反応はそこそこ、仕様で検出角度が水平方向170°だと書かれており見た目にもかなり広そうな割に正面からズレると検出距離がリニアに短くなるので実用上そこまで広くありません。
垂直方向はなかなか狭く特に上方向が狭いです。
真正面での検出距離は3mくらいでしょうか。
f:id:sympapa:20210815100727p:plain


人感検出から1分間は状態が更新されず人感無しになりません。その後の更新も1分間隔のようです。
但し改造すれば5秒間隔に出来ます。

照度の方は人感が無い場合はたぶん55分間隔のようで、人感があれば都度更新されます。
なので人感に関係なく照度をトリガーにして自動的に照明を点けるといった用途には向きません。



円筒型なので見た目と設置のしやすさがイマイチなんですが、動作が安定していて照度センサーも内臓しておりコスパも高いので我が家で7個使ってます。

[長所]

  • 照度センサー内臓にして安い
  • 多くの人が使っている安心感

[短所]

  • 円筒型なので設置しづらい
  • 1分毎の人感更新間隔(工夫と改造により改善できる)
  • 日本で売ってない


Tuya Motion Sensor ZB3.0(ZM-RT201/ ZM-35ZH-Q)

https://zigbee.blakadder.com/Tuya_ZM-35ZH-Q.html
f:id:sympapa:20210821121659j:plain
小さいのが特徴。
照度センサーは内臓されていません。Aliexpressで1個1000円前後で買えます。
実際に使ってみて人感の検出角度が狭いです。検出距離も正面で2~3mといったところでしょうか。
小さくて設置しやすそうなので買ってみようとAliExpressでポチって届くまでの間にここでZHAには非対応(というか動作したという報告がされていない)と知りました。
届いてからHome Assistantに接続しようとトライするわけですが確かにZHAのインタビューが始まった後一向に先へ進みません。
しかしリセットボタンを押しっぱなしにしながら接続にトライしたところ何とか登録されて使えるようになりました。
人感検出から1分間は状態が更新されないので人感無しになりません。その後の更新も1分間隔のようです。


検出角度が狭いのでメインの候補にはなりませんが小さくて形も良いので用途によってはまた購入するかもしれません。

[長所]

  • 安い
  • 小さい

[短所]

  • ペアリングに難がある
  • 検出角度が狭い
  • 日本で売ってない


Sonoff Motion sensor (SNZB-03)

Sonoff Motion Sensor (SNZB-03) Zigbee compatibility
f:id:sympapa:20210821124857j:plain
照度センサーは内臓されていません。Aliexpressで1個1000円前後で買えます。
実際に使ってみて検出角度も広く検出距離も4~5mという感じで十分だと思います。
人感検出から1分間は状態が更新されないので人感無しになりません。その後の更新も1分間隔のようです。
人感検出すると赤く光るところとデザインが個人的には気に入らないです。


今のところ性能はなかなか良いと思うのですが、気温が低くなるとゴースト検出するとか電池の接触が悪い(これはスペーサーをかまして対処可能)とか品質面の評判はあまり良くないようなので様子を見ようと思います。

[長所]

  • 安い
  • 検出角度が広い

[短所]

  • デザインがイマイチ
  • 品質面の評判悪そう
  • 日本で売ってない


まとめ

コスパと照度センサーを内蔵している点を考え私はAqara Motion Sensor(RTCGQ11LM)をメインに使い、小ささのTuya ZM-RT201、検出角度のSonoff SNZB-03、どうしてもって時のHue人感センサー、と適材適所使い分けていこうと思います。
おススメのセンサーをコメントいただけると嬉しいです。

Home Assistant: Qrio lockのオートロックを一時停止し再施錠を忘れた場合に自動施錠してくれるオートメーション

f:id:sympapa:20210812104541p:plain
なんだかくどくて長いタイトルになりましたがこんにちは。
それにしてもHome Assistantって名前もロゴも直球でそのままを表してますよね。
おかげでGoogle検索するとGoogle HomeGoogle Assistantの記事がヒットしたりして検索の邪魔をしてくれます。

そんなワケで前回の記事のまとめを含めて、続きを。。。

■前回の記事のまとめもろもろ

<解決したい問題>

  • "Qrio lock"は普段オートロックを有効にして使っている。
  • 我が家には室内でタバコを吸ってはいけない法律があり玄関先でタバコっているが、その時にいちいちオートロックして欲しくない。
  • そんな時のためにQrio Lockにはロックのノブを素早く"開→閉→開"とやるとオートロックが一時的に停止する機能があり、それを使ってタバコを吸う。
  • しかし一時停止状態は次にマニュアルで施錠するまで延々と続く仕様である。
  • タバコを吸い終わって家に入る時に、普段はオートロックなので施錠するのを忘れる時がある。

<ハード的な制約とか仕様とか>

  • "Qrio lock"はAPIが公開されていない。
  • "Qrio lock"の施錠/解錠状態をAlexaの定型アクションのトリガーとして使えるので、施錠/解錠状態はHome Assistantにも伝えることが出来る。
  • 施錠はAlexa経由で行うことになるがHome AssistantからAlexaへトリガーを送る方法がHome Assistantに標準で用意されていない模様。しかし前回の記事で書いた方法で解決。
  • "Qrio lock"オートロックの有効/無効状態は取得できない。
  • "Qrio lock"にはドア開閉センサーが内臓されているがその状態は取得できない。
  • オートロックが有効の場合はドアが閉まると数秒後に施錠される。

■さてどうするか
自動化する上で使えるセンサーの類は3つです。
1. Alexaから取得できる施錠/解錠状態→Qrio Lockの状態のサーバーへの反映は結構タイムラグがある(施錠/解錠操作から数十秒変化しない場合がある)
2. 既に玄関(内側の)に設置してあるHueの人感センサー→一瞬でHome Assistantに反映される
3. 先日Aliepressで購入し届いたAqaraのドアセンサー→一瞬でHome Assistantに反映される

1.は"Qrio lock"の施錠/解錠をトリガーにHome Assistantのスクリプトを呼び出すことで、Home Assistant上のユーザー変数が"locked"/"unlocked"と変わるようにしました。
Home Assistantではユーザー変数が使えなさそうなので"home-assistant-variables"という変数が使えるようになるカスタムコンポーネントをインストールしましたが、今考えると施錠/解錠の2パターンだけのステータスなので単純に"input boolern"を使えば良かったのかもしれません。
施錠/解錠の状態はタイムラグが長いので、ドアが開いたのをトリガーにして「外に出た時は施錠しない」「中に入った時は施錠」するって感じにしますか...
外にも人感センサーがあれば確実に「外から中」or「中から外」どちらなのかを判別できるけど、人感センサーの在庫がないし他の人が玄関に居たら成立しなくなるので、あまりこだわらずにドアの開閉回数を基本に判定することにします。
そして、確実に施錠するために施錠する指示は施錠状態の変数が"locked"になるまで何回かは繰り返し送るようにします。
そんな事を考えながら以下のようなお^とメーションを組んでみました。

<メインのオートメーション>
トリガー:ドアを開ける

ロック状態の変数を"unlocked"にする

ドアが閉まるのを待つ

ドアが開いて かつ 玄関内側人感センサーが人感を検知する のを待つ

ドアが閉まるのを待つ

アレクサへ施錠してってトリガーを送る

10秒待つ

ロック状態の変数が"locked"になっているか確認→Yesならここで終了

Noならアレクサへ施錠してってトリガーを送る

10秒待つ

ロック状態の変数が"locked"になっているか確認→Yesならここで終了

Noならアレクサへ施錠してってトリガーを送る

以降10秒待って変数見てトリガー送るを7回繰り返し

モードはシングル(実行中にトリガーがあっても再起動しない)


<施錠されたらメインのオートメーションを止めるオートメーション>
施錠されてもメインのオートメーションが走り続けると施錠の指示を10回までは送り続けるので、ロック状態の変数がlockedになったらメインのオートメーションを停止するオートメーションを作成

スクリプト
・ロック状態の変数をlockedにするスクリプトを作成
・ロック状態の変数をunlockedにするスクリプトを作成

<alexa側の定型アクション>
・"Qrio lock"が"ロック済み"になったら変数をlockedにするスクリプトを呼び出す
・"Qrio lock"が"ロック解除済み"になったら変数をunlockedにするスクリプトを呼び出す


これでオートロックを一時停止状態にしてから(してなくても発動しますが)ドアを開けて外に出てドアを閉め、次にドアを開けてドアが閉まると施錠するようになりました。
つまるところ、オートロックの一時停止はもともと次にマニュアルで施錠するまで続く仕様だったのが、1回外に出てタバコを吸い中へ入れば自動的に施錠されるという挙動に変わりました。
オートロックが有効の場合もこのオートメーションが発動してしまいますが"Qrio lock"の中で施錠が完結するので、このオートメーションがオートロックの邪魔をすることはありません。

<問題点>

  • タバコを吸っている間に他の人がやって来てドアを開けて閉めると施錠される(内側から来ても外側から来ても)
  • 家族が玄関から外に出た数秒後に自分がオートロックを一時停止しタバコを吸いに出ると、施錠/解錠状態の取得にタイムラグがあるため施錠される時がある

外にも人感センサーを取り付ければ「外から中」or「中から外」どちらなのかを判別できますが、それやっても外から家族が帰って来た場合は解決できませんね。
まぁオートロックを一時停止したのを忘れて解錠しっぱなしになるのは避けられるので良しとしましょう。

Home AssistantからAlexaへトリガーを送る:Qrio Lockを操作したい

f:id:sympapa:20210812104541p:plain
Home Assistant初心者のSympapaです。
今回はAPIの無いQrio lockをHome Assistantから操作するべくHome AssistantからAlexaへトリガーを送る方法を2つ見つけたので書いておこうと思います。
前置きが長すぎるので、早く方法を教えろという方は本題へ進んでください(笑)

1.前置き: Qrio lockについて

f:id:sympapa:20210814111919j:plain
我が家ではスマートロック"Qrio lock"を使っています。
買った当時は"セサミ 2"か"Qrio lock"か悩みました。
"セサミ2"は安価ですが"Qrio lock"は「ドアの開閉センサー」が内臓されていて、オートロックを使用している場合"セサミ 2"は「解錠後〇秒後に施錠する」だったのに対し"Qrio lock"は「ドアが閉まったら施錠する」点で"Qrio lock"を選びました。
"セサミ 2"はAPIで外部から操作が出来る点がガジェオタとして気になりましたが、APIなんて使ったことも無いし難しいんでしょと思っていてその時はまさかスマートホームにハマるとは思っていなかったのでその点は無視しました。
今ならAPIでガンガン動かす...(笑)
まぁでも大事な家の鍵なので、基本的な動作はスタンドアローンが方がいいんです。ということにしておきます。

ちなみにスマートホームバイスの中でもスマートロックはマジでおススメです。
オートロックを設定しておけば鍵もスマホも取り出すことなく出かけられる。これが超絶快適です。
帰宅時はスマホで開けてたんじゃ手間は正直、鍵で開ける場合と変わりませんね。いや、ガジェオタの自分はともかく家族も皆スマホで解錠しているのでやっぱりラクなのかもしれません。
私はハンズフリー解錠というGPSとBlutoothを駆使して帰宅すると自動で解錠する機能を使っています。これはものすごくラクなんですが10回に1回くらいは失敗するので次のモデルでは是非改善して貰いたいところです。
あと家の前を通過しただけでも4分間解錠されたままなので、遠ざかったら再施錠されるようにもして貰いたいところです。ということで家族にはハンズフリー解錠の設定をしていません。

ちなみに妻はスマホを良く落っことして壊します。たぶん1年に1回は壊すのでスマホを取り出す機会が増えないよう、"Qrio Key"というクルマのリモコンキーのようにボタンを押すと解錠できる純正オプションを持たせてます。
しかし、ポケットに突っこんだまま手探りで解錠できるしスマホよりラクだと思うのですが、なぜかスマホを壊すべく取り出してスマホで解錠しています。
f:id:sympapa:20210814112052j:plain

ちなみにスマホが1台しか接続できないのか、誰かがスマホから鍵を操作した直後はうまく接続しない時があります。ここらへんがスマートじゃないのでこの点も改善して貰いたいところです。

2.本題:Home AssistantからAlexaへトリガーを送る方法

本題から大きく話が逸れてしまいましたが本題。
一点、"Qrio lock"に是が非でもどうにかしたかった点がありまして...
"Qrio lock"は前述したとおり普段オートロックを有効にして使っています。
家の中でのタバコは我が奥様による法律で固く禁止されており玄関先でタバコを吸うワケですが、その時にいちいちオートロックして欲しくないんです。
"Qrio lock"の中の人にもそんな法律があるのかないのか、そんな時のためにロックのノブを素早く"開→閉→開"とやるとオートロックが一時的に停止する機能があるんです。
一時停止状態は次にロックのノブかスマホアプリ等でマニュアル施錠するまで延々と続きます。
で、タバコを吸い終わって家に入る時に、普段はオートロックなので施錠するのを忘れる時がちょいちょいあるんですね。
なので、オートロックを一時停止した後に施錠を忘れた時にHome Assistantが自動で施錠してくれるように出来ないかと思ったわけです。

我が家の"Qrio lock"は専用ハブを通してネットワークに繋がっているのでGoogle HomeやAlexaからも操作できます。
(但しGoogle Homeは施錠のみ、Alexaは施錠とパスワードを決めておいて話すことで解錠にも対応。)

我が家ではスマートスピーカーGoogle Homeを使っていますが、Google Homeでは"Qrio lock"の状態をトリガーにして何かすることはできません。
しかしAlexaのアプリに"Qrio lock"のスキルを使って登録してみたらですね、なんと"Qrio lock"のロック状態をトリガーに出来ることが判りました。
AlexaはGoogle Homeと比べると随分トリガーを受け入れてくれますね。人の言葉を理解するのは苦手なようですが(汗

となれば"Qrio lock"が解錠されたらHome Assistantのスクリプトを走らせることも出来ます。
しかし問題は施錠です。Home AssistantからAlexaにトリガーを送ることが出来ないと施錠が出来ません。
そこで調べてHome AssistantからAlexaにトリガーを送る2つの方法を見つけました。
Akexaのスキルを作れば出来そうではありますが...

1) Alexa switch (Smart things 経由)

この方法は、Samsung Smart Thingsの仮想スイッチをAlexaとHome Assistantの両方からswitchとして認識されることを利用したものでAlexaのトリガーして使えます。
Home Assistant→Smart Things→Alexaという経路でトリガーをリレーできます。
というかHome Assistantで仮想スイッチを作れば直接できそうな気がするんですがAlexaでトリガーとして使えるようになりません。どなたか方法をご存じであればコメントください。

導入方法と使い方はどこかのページにお任せしようと思いましたが何故かコードのGithubには導入方法が書かれておらずググっても見つからないので備忘録としても必要だし書きます(汗
(1)Samsung Smart ThingsのIDEのページへアクセスしログインします。SmartThings Groovy IDE
(アカウントが無い場合は作成します。また(12)の手順でロケーションを選ぶ必要があるので、ひょっとすると事前にSmart Thingsのアプリにログインしてロケーション"家"とかを登録しておく必要があるかもしれません。)
(2)Device HandlersをクリックしCreate New Handlersをクリックします。
(3)次に開いたページでFrom Codeタブを押します。
(4)いかにもコードを入れろというフォームが出るので下のページのコードをコピペします。コードはトグルスイッチとON/OFFスイッチの2タイプあります。アクセスした時点で見えるものはコード全体が表示されていないので注意が必要です。
コードの16行目の"name"のところを適当に変えるなどします。最終的にAlexaやHome Assistantから見える名前は後で付けることになります。
community.smartthings.com

(5)何やら警告が出るかもしれませんがSaveを押します。
(6)Publishを押してFor Meを選択するとDevice type published successfullyと表示されます。
(7)トップページに戻ってMy Devicesを押しDeviceを新規作成(何故か時々日本語)を押します。
(8)Nameを入力します。これがAlexaやHome Assistantから見える名前です。
(9)device Network IDを入力れます。device Network IDはたぶん何でも良さそうです。Nameと同じでも問題なさそうです。
(10)TypeのプルダウンメニューからさっきDevice Handlersで作成したやつを選びます。コード16行目の"name"で付けた名前で表示されます。
(11)Versionはpublishedを選びます。
(12)ロケーションを選びます。
(13)Createを押すとcreatedと表示されたら完了です。
あとはHome AssistantでSmart Things インテグレーションを設定しAlexaでSmart Thingsスキルを設定すれば、双方でスイッチとして認識できるようになり、Home Assistant側でON/OFFするとAlexaでもON/OFFが切り替わるようになります。

2) Alexa Media Player (HAのカスタムコンポーネント)

f:id:sympapa:20210814111627p:plain
Alexa Media PlayerというHome Assistantのカスタムコンポーネントを使って、Home AssistantからAlexaへカスタムコマンドを送ることが出来ます。
(要はAmazon Echoに向かって「アレクサ、鍵を閉めて」などと言ったのと同じことをHome Assistantから無音で実現できます。)
こちらは導入方法から使い方までカスタムコンポーネントのページに誰でもわかる丁寧さで書かれていますので、ざっくりですがHome Assistantで”media_player.play_media"というサービスを使ってカスタムコマンドを送れるようになるということだけ書いておきます(笑)
あ、Amazonのアカウントログインがうまくいかない場合はログイン方法が確か5つくらい用意されていたので別のを試すとうまくいくかもしれません。私は標準の方法ではうまくいきませんでした。
github.com

ということで、"Qrio lock"のオートロックを一時停止した後に施錠を忘れた時の対策に関する自動化方法についても一気に書こうと思っていたのですが長くなったのでまたにします。
では。

初心者がHome AssistantにZigbeeデバイスをつなぐ

f:id:sympapa:20210812104541p:plain
Home Assistant初心者のSympapaです。
このブログではHome Assistantをいかに難しいことをせずに使うかを書いています(笑)

Home Assistantを導入する前はとっても玄人向けなんじゃないかと不安でしたが、導入するとその不安は半分以上は払拭されました。
インテグレーション(統合)がとても豊富で日本のガラパゴスなデバイスじゃなければ大概のスマートデバイスやサービスが簡単に接続できます。

・・・が!
センサー類をどうやって接続したらいいのか悩みました。
我が家にはHueのブリッジ(ハブ)と人感センサーと電球がありました。
Hueのインテグレーションを使ってHome Assistantに繋いでみましたが、人感センサー→Hueブリッジ→電球って経路よりも、人感センサー→Hueブリッジ→Home Assistant→Hueブリッジ→電球って経路だと明らかにタイムラグが長くなる。。。
といっても1秒あるかどうかですが、人感センサー→Hueブリッジ→電球で動かしていた時の反応の良さを知ってしまうとイマイチ。
それにHueには人感センサーやスイッチはラインナップされていますがドアセンサーなどはありません。そして人感センサーは4500円前後とこれからセンサーを増やしていくには高価。

XiaomiやAqaraやTuyaといった中国の有名(?)スマートホームバイスメーカーのハブを買って接続するデバイスのメーカーを揃えればラインナップや価格の問題は解決するしHome Assistantのインテグレーションを使って一発で接続できます。
しかしTuyaのインテグレーションはローカル運用できるわけではなくメーカーのサーバー経由。
Xiami,Aquraのハブを買うか...と思いましたが、Xiami,Aquraのインテグレーションは"IoT class"が"Local Push"となっていて”Local Polling”ではありません。"Push"と”Polling”で何が違うんだろう。よーわからん。
Hueも"Local Push"だしXiami,AquraのハブをHome Assistantに接続したらHueと同じようにタイムラグでるんかね。。。

f:id:sympapa:20210814090348p:plain
そんなワケでHome Assistant玄人の方々の大半はZigbeeハブやZigbbe USBドングルなるものでZigbeeバイスを接続されているようなのでそれを検討することに。。。
しかしなんか超絶難しそう。
とにかくZigbeeハブやZigbee USBドングルのファームウェアをカスタムファームに書き換えて使えってことらしいのですが...
ファームウェアなんてOTAで降って来るんでしょ?」・・・いや違う。
スマホのカスタムROMみたくWindowsに接続して簡単なコマンド叩けばいいんでしょ?」・・・いやこれも違う。
分解してチップに得体の知れない装置を繋いで書き換えしなければならずモノによってはハンダづけが必要とか、私にはちんぷんかんぷんな環境でコマンドを叩くとか、しかもWindowsで出来るのかどうかも怪しい。。。

しかしノーマル状態で使えるZigbee USBドングルの情報を見つけました。
それが"NORTEK HUSBZB-1"ってやつです。
f:id:sympapa:20210814085347j:plain
しかしてっきり中華通販で買えると思ったら売ってない。どこ製?ノルウェーの計測器メーカーだそうです。
そんなわけで久々に米Amazonで買い物をしました。送料込みで7000円くらい。
Amazonで登録しているカードだと決済に失敗する罠をすっかり忘れていて買うのに1日かかりましたが(汗
なぜか普通に買えるのに数時間後に決済失敗したって怒られるんですよね。。。

"HUSBZB-1"もHome Assistantで使うならできればファームウェアを最新にしろってことですが、純正ファームでもやっぱり自力で書き換えが必要だったり。
まぁ今のところ結果的に問題なく使えているのでファームを届いた時のままです。
"HUSBZB-1"をHome Assistantで使うのは超絶簡単で、Home Assistantが稼働しているラズパイのUSBにぶっ挿してZHAインテグレーションを導入するだけで完了。(いや、だけではなかったかもしれないがそれくらい簡単)
しかもラズパイにUSB接続でネットワークを経由しないからかタイムラグはほとんどありません。
ちなみにこんな風に接続状況が確認できます。
f:id:sympapa:20210814093321p:plain

Home AssistantにはZigbeeバイスを接続するインテグレーションとして私が使用している"ZHA(Zigbee Home Automation)"と"deCONZ" と"zigbee2mqtt"の3つが用意されているようですが、今回私が購入した"HUSBZB-1"は"ZHA"でしか使用できません。
Zigbeeバイスならどれでも使えるってワケじゃないんです。さっぱりワケがわからん。
3つの中で"ZHA"は使うのが最も簡単で対応デバイスは少ないってことらしいです。でも困るほど少ないってことはなさそう。
ここのページでそれぞれどのデバイスが対応しているのが確認できますね。
zigbee.blakadder.com

しかしHome AssistantさんにはカッコいいHome Assistantインストール済みラズパイを販売するくらいなら、"ZHA""deCONZ""zigbee2mqtt"どれでもノーマルで使えるZigbeeドングルを販売していただきたい(笑)
f:id:sympapa:20210814091212j:plain