Sympapaの日記

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

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