Sympapaのスマートホーム日記

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

Qrio Lockの施錠状態をドアセンサーを使ってリアルタイムに取得する

こんにちは。Sympapaです。

我が家ではスマートロック: Qrio Lockを使っています。
スマートロックはスマートホームバイスの中でも快適性の上がり幅が大きいのでおススメです。
f:id:sympapa:20210814111919j:plain

しかしながらQrio LockはAPIが公開されていないのでHome Assistantとの連携には向いていません。
Home AssistantからAlexaやGoogle Homeを経由して施錠をする術は準備したし、ドアの開閉は既にAqura Door sensorを使ってリアルタイムに取得できているし、ロック状態もAlexaの定型アクションのトリガーに出来るようになっているのでこれを使ってHome Assistantで取得できます。
しかし...Alexaがロック状態を取得するには結構なタイムラグ(数十秒~1分)があり、たまにロック状態を取得できていないことも...。

Sesami LockはAPIが公開されているし安いのでQrio Lockを売って乗り替えるというテもアリですが、APIを使ったとてクラウド経由だしタイムラグはあるでしょうきっと。
それにSesami Lockには無くてQrio Lockにある機能として、Qrio Lock自体がドア開閉センサーを搭載しているのでドアが閉まるとすぐにオートロックしてくれる点があります。ドアが閉まってすぐにオートロックしてくれるので「ちゃんと施錠されたな」と音で確認できるんです。また我が家の嫁様はスマホを良く落っことして壊すのでスマホを取り出さずにロックを操作できるQrio Keyというリモコンキーを使用していただいており、同様のリモコンキーがSesami Lockには存在しない点も乗り替えに至らない理由です。

そんなワケですがQrio Lockのロック状態をリアルタイムで取得できればHome Assistantで出来ることの幅が広がります。たぶん。
今回は定番のドア開閉センサー: Aqura door sensorを使ってQrio Lockのロック状態をリアルタイムに取得できないか試していきたいと思います。
いやもちろんAqura door sensorの反応の良さは既にわかっているので「そんなの出来て当たり前」だとは思うのですが、問題はQrio Lockに内臓されているドア開閉センサーも磁気を使っているので干渉しないかという点。Qrio Lockのドア開閉センサーはリードスイッチではなくスマホに内臓しているコンパスの技術を応用しているんだとか。結構Qrio Lock本体と付属マグネットの距離は離れているのにちゃんとドア開閉を検出してくれます。
f:id:sympapa:20210921201252j:plain
今回、ロック状態を検出するために取り付けようとするマグネットはどうしてもQrio Lock本体に近い位置になるし、ロック状態で位置が変わるので地場の変化も起きそうです。
そんなワケでうまくいくかわかりませんが試していきましょう。

1.マグネットをロックのノブ部分のアタッチメントに付けてみる

見た目にごちゃごちゃしたくないのでAqura door sensorに付属している磁石は使わず、セリアで小さいネオジム磁石を買ってきてロックのノブとQrio Lockを繋ぐアタッチメントの部分に貼り付けてみることにしました。ロックが「施錠」の時はセリアの磁石はロックのノブの下に位置し、「解錠」するとロックのノブの左側へ動くといった具合です。
f:id:sympapa:20210921201220j:plain
一方、セリアの磁石がQrio Lock本体に近いのでQrio Lock内臓のドア開閉センサーに干渉しそうな気がします。
試した結果、はいやっぱりQrio Lock内臓のドア開閉センサーが誤動作しました(汗
Qrio Lock内臓ドア開閉センサーの再調整をやってみましたがダメです(><)

2.Aqara Door sensorを動かしてQrio Lockのマグネットを共用する作戦

次に思いついたのはAqara Door sensor本体を同様に位置にくっつけて、更にQrio Lockのマグネットを共用してしまえという作戦でした。
しかし磁束の方向が違うし距離が遠すぎてダメでした。

3.再びマグネットをロックのノブ部分のアタッチメントに付けてみる

そこで、さっき取り付けた位置にセリアの磁石を再び貼り付け、再度、Qrio Lock内臓ドア開閉センサーの「ドア開」「ドア閉」位置の調整をさっきとは違う方法でやってみることにしました。
Qrio Lockのアプリに従ってこの調整を実行すると、「ドア開」の状態を覚える時にはロックを「施錠」にしデッドボルト出してドアの枠に引っかけちょっとドアが開いた状態を記録し、次にロックを「解錠」してドアを完全に閉じ「ドア閉」を記憶させるという手順です。
しかしこれだと「ドア開」を記憶させた時と「ドア閉」を記憶させた時でセリアの磁石の位置が変わるので磁場が変わってしまうはずです。
実際にはドアの開閉を判定する時はどちらもロックのノブは「解錠」の位置のはずなので、どちらもロックのノブを「解錠」の状態で「ドア開」と「ドア閉」を記憶させてみたところ、うまくいきました。
f:id:sympapa:20210921201256j:plain
(後日追記: やっぱり暫く使っているとQrio Lock内臓ドア開閉センサーが誤動作しました。セリアの磁石の位置が変わって磁場が変化するのがダメなようです。現在はセリアの磁石をドアに固定し、Aqura door sensorの方をロックのノブとQrio Lockを繋ぐアタッチメントの部分に貼り付けています。)


これで無事リアルタイムにQrio Lockのロック状態をHome Assistantで取得できるようになりました。
ただ長期間使うとQrio Lock内臓ドア開閉センサーに良からぬ影響を与えないかちと心配です(汗

それにしてもAqara Door sensorの応答があまりに早すぎてびっくりしています(笑)
Qrio Lockにはオートロックを設定している時に素早くロックのノブを開→閉→開とやるとオートロックが一時的に停止するという裏コマンド(公表されてるので裏ではないですけど)みたいのがあるんですが、本当に素早く前の動作から次の動作までを0.5秒以内くらいでやらないと裏コマンドを受け付けてくれないんです。今回取り付けたAqara Door sensorは裏コマンド判定すらできそうな勢いでレスポンス良く反映されます。

すっかり気を良くしたので、次回は今回追加したQrio Lockのロック状態取得用センサーを使ってオートメーションを組んでみたいと思います。

では。

結局壊れた・・・カラースマートLED電球 Yeelight YLDP13YL

こんにちは。Sympapaです。

我が家で2個使っているYeelightのカラースマートLED電球YLDP13YLがコスパ高くて最高!と前回の記事で紹介したのですが。。。
sympapa.hatenablog.com
f:id:sympapa:20210912181416j:plain

前回の記事でも書いているとおり、2個の内1個はHome Assistantで使っていると"Bulb closed the connection"ってエラーを頻発しこのエラーが出ると白色に光るはずが赤色やピンク色に光る持病があったんですが、Yeelightのアプリから操作すると問題無いしHome Assistantの問題だろうと思ってました。
そんな時にHome Assistantの更新内容に"Bulb closed the connectionエラーが出るのを修正したよ!"と喜んでHome Assistantを更新したんですが・・・。

翌日・・・暖色系の白色に光るはずがオレンジ色に点灯(><)
Home Assistantのログで確認しても"Bulb closed the connection"ってエラーは記録されていません。

色々操作して試していたところ、白昼色は問題ないんですが暖色の白色(電球色)に調整すると4000Kを境目にオレンジ色になることが判明しました。
Home AssistantとYeelightのアプリから問題の電球を削除してリセットし、再度Yeelightのアプリに登録してアプリから操作してもやっぱり暖色系の白色にするとオレンジ色になっちゃいます。
もう1個の方はちゃんと暖色の白色になるので故障ですね。

まだ購入して1.5か月ほどしか経ってないので販売元へ「交換して」って連絡しましたが無償交換してくれるかなぁ。
なんせ購入価格が1780円だったので1000円弱の送料とか自己負担だったらそれだけで。。。(汗

どのみち暫く使えないので仕方なくHueのWhite Gradation 電球を購入しました。3500円くらいしました。ガクッ。

YeelightカラースマートLED電球 "YLDP13YL"レビュー(Home AssistantのYeelight統合が改善された?記念)

こんにちは。Sympapaです。

カラーあるいは昼白色から電球色まで可変のスマート電球が欲しくなった時、みなさんはどれを選んでるでしょうか?
HueだとWhite Gradation(昼白色から電球色まで可変)でも3500円くらいしますしカラーだと7500円くらいしたりします。
昼白色から電球色まで可変のスマート電球が欲しかったので色々探して、現在我が家ではYeelightのカラーのスマートLED電球 "YLDP13YL"を2個、玄関と廊下で使用しています。
Amazonでの通常価格は3300円みたいですが私が購入した時にはセールで1780円で買えました。
f:id:sympapa:20210912181416j:plain

しかしHome Assistantで使うと時々"Bulb closed the connection"というエラーが出るんです。玄関に使っている方の個体はほとんどこのエラーが発生しないしエラーが出ても白色で点灯してくれるのですが、廊下で使用している方の個体は2日に1回くらいこのエラーが発生し、しかもこのエラーが出ると情熱的な赤色とかいやらしいピンク色で点灯することが多いので家族から「なんだあの電球は」と言われ...(汗

壊れているのかと思いきやYeelightのアプリから操作すると問題は無く、ググるとHome Assistantのフォーラムでこのエラーについて1年前から議論されているけどかなり時間が経っているしHome Assistant側なのか電球自体なのかどっちの問題なのかなぁと思いながら過ごすこと早1ヶ月半。

白く光らない電球で家族から白い目で見られるのに長くは耐えられず、HueのWhite Gradationへ交換しようとポチった直後にこの9月(2021年)のHome Assistantのアップデートで修正されたことを知って慌ててキャンセルしました(笑)

そんなワケでまだHome Assistantを更新したばかりなので本当に直るのかわかりませんが、Home Assistantで使った場合のこの問題を除けばコスパが大変素晴らしいYeelightのカラースマート電球"YLDP13YL"のレビューと、Home Assistantでの使用について書いていこうと思います。

Yeelightとは

良くわからんですがYeelightは中国の照明機器メーカーです。
Xiaomiグループのようで、アプリを使う時に作成するアカウントもXiaomi MIアカウントになってます。
いくつかのYeelightの商品をソフトバンク系の企業が日本で正規販売しています。Amazonで売っているので翌日に入手でき、かつ、日本販売品もおま国価格ではなく安価で手に入ります。

カラースマート電球YLDP13YLの特徴

  • Wi-Fi接続でハブ要らず。単体で使う場合もアプリで細かい設定が可能。
  • 口金E26。明るさ800ルーメン。1600万色のカラー。
  • ローカルAPIが使えるのでローカルで操作可能。
  • 日本のAmzazonで売ってるカラーのスマート電球のうち、得体の知れない中華メーカーを除けば最安の部類。(私が購入した時はセールで1,780円でした。)

なんせ単体で直接ネットワークに接続できてハブいらずってのがHome Assistant以外で使用する場合にも素晴らしい。更にHome AssistantにはYeelightを簡単にローカル運用で使えるインテグレーションがあるのが素晴らしすぎる。

ハード面での弱点は電球本体の長さが長いことと重量が重いことですかね。

Yeelightのアプリで出来ることと残念な点

アプリを触るのもそこそこにHome Assistantで使っているので細かいところまで触ってませんが、細かく設定できるしひととおり求められそうな機能は揃ってます。
2個の電球でちゃんと同期が取れるのかとかそういった点は未確認です。
・色、色温度、明るさの選択
・タイマーによるシーンの呼び出し(複数のタイマーを設定可能)
・ミュージック連動
 アプリを入れたスマホで再生される音楽との連動のみのようです。
・シーンの作成
・パーソナライズされた照明の作成
 虹色に点滅させたりとかシーケンスを自由に作成できます。
 こんな風にシーケンスを作れます。

f:id:sympapa:20210912171512j:plain
シーケンス作成画面

・デフォルト(主電源OFFからONにした時)の明るさ・色・色温度設定
・フェードアウト(指定した時間をかけて徐々に暗くなりOFFになる)
・ローカルLAN制御のON/OFF
サードパーティ統合
 Google Home、Alexa、Smart Things、IFTTT、Taskerなど豊富
などなど。

f:id:sympapa:20210912174319j:plain
機能の半分以上は伝わりそうな画像(笑)

残念な点は、タイマーで色や明るさを変える時には必ず点灯してしまう点です。
時間によって色や明るさを変えたいという人は多いと思いますが、人感センサーなどで照明ON/OFFを自動化している場合には指定の時間になったら点灯させずに色や明るさの設定を変えたいのにアプリからの設定ではそれができないのです。(Hueもアプリから同様の設定をすることは出来ませんが。)
Home Assistantを使う場合は、人感センサーが人感を検出する度に時間をチェックした上で色や明るさを指定して点灯させることができるのでこの要望どおりの制御をすることは可能です。

あとローカルだけで動かすにしてもXiaomi Miアカウントを作成して登録しなくてはいけません。このアカウント作成が厄介(たまたま?)でメールアドレスで登録しようとしてもサーバーのエラーが出て先へ進めませんでした。電話番号だと問題なく登録出来ましたが中華企業に電話番号を教えたくないって人もいることでしょう。

あとはこの電球のWi-Fiは2.4GHz帯にしか対応していませんが、登録する時にスマホも2.4GHz帯のSSIDに繋いでおかないとうまくいかないみたいです。ハマるポイントだと思います。

Home Assistantで使う

Home AssistantにはYeelighitのインテグレーションがあるので秒で使えるようになります。
YeelightのIPアドレスを固定しておき、インテグレーションの導入時にIPアドレスを入力してやるだけです。
あとは、例えばHueの電球をHome Assistantに直接ZigBeeで接続して使うようになると基本的にHueのハブは買わないのでHueのアプリが使えず、電球自体のファームアップデートや内部に記憶するような設定が出来なく(あるいは方法はあるけど面倒)なったりしますが、Wi-Fi接続のYeelightであればYeelightのアプリも使えるのでファームアップやデフォルト設定もサクッと出来るのも良い点です。Wi-Fi接続よりもZigBee接続の方が良い点もありますが。

冒頭で書いたとおり"Bulb closed the connection"ってエラーが時々出て、特に廊下で使用している個体はこのエラーが出た時に点灯すると赤色やピンク色に光ってしまうので使用を断念しようとしていたところでしたが、この9月のHome Assistantのアップデートでついにこの問題に対応したようなのでアップデートして様子を見ることにしました。
もし同じエラーでお困りの方はHome Assistantのアップデートをするのが良いかもしれません。

家族から白い目で見られない日々が続きますように(笑)
では。

Nature Remo: Remo(第2世代:1W2)でローカルAPIを使うと発生するスリープ問題(対策断念)

こんにちは。
Sympapaです。
我が家では3台の世代やモデルが異なるNature Remo、Remo(第2世代:Remo-1W2)とRemo mini(mini初代:Remo-2W1)とRemo 3(第3世代:Remo-1W3)が稼働しています。
Remo 3には何の不満もありませんが、Remo(第2世代)とRemo mini(初代)にはちょっとした不満があります。
あ、少なくともRemo(第2世代)とRemo mini(初代)ではIPアドレスを固定しないと一日数回数秒間接続が切れるのを経験しているので全てのRemoでIPアドレスを固定した上でのハナシです。

Remo mini(初代)の不満点

f:id:sympapa:20210911133037j:plain
Remo mini(初代)の方は我が家では「リビングの照明(コイズミ)のOFFの信号だけ」なぜか極端に届く距離が短く、Remo mini(初代)を照明に1mくらいまで近づけないと反応しないという持病を抱えています。
もともとキッチンで使用していてIR信号もかなりの距離飛ぶし絶好調!と思っていたのにリビングへ移動させたら「ちょくちょくリビングの照明が消えんな」となったのがきっかけで気づいたわけです。
なので我が家ではRemo mini(初代)はリビングでは使えないということになっています。
他のIR信号であれば例えば同じ照明のONの信号すら5mは余裕で飛びそうな勢いなのでかなり謎ですが、Remo mini(初代)のレビューで「赤外線信号の届く距離が短い!」というレビューをちょいちょい見かけるのはこのせいかなと思ってます。
ちょっぴり気休め程度に改善する方法も見つけてはいるので機会があればまた記事にしたいと思います。

本題のRemo(第2世代)の不満点

f:id:sympapa:20210911133216p:plain
そして本題のRemo(第2世代)の方。
Home Assistantを使い始めるまでは特に不満はなかったのですが、Home Assistantを導入しローカルAPIを使いはじめたところ問題が発生しました。
ローカルAPIでIR信号を送信するコマンドを送った時、Remo(第2世代)が緑色や赤色に点滅してタイムアウトしてしまうことがあるんです。しかも10秒~30秒ほど復活しません。
Remoのサーバーからの指令だとこの問題は発生しないようないので普通に使っていれば発生しない問題ですね。。。
我が家の環境ではRemo 3ではローカルAPIを使用してもこの問題は全く発生しません。Remo mini(初代)はたまーにローカルAPIを使った時に反応してくれないことがありますがごく稀で、また、すぐに復活してくれます。

仕方がないので、リビング、キッチン、私の部屋で使っているRemo達をローテーションして問題のRemo(第2世代)を私の部屋に設置し検証と可能なら対策をすることにしました。
するとRemo mini(初代)は赤外線問題でリビングでは使えないので必然的にRemo 3をリビングに、Remo mini(初代)をキッチンにという配置になりセンサーが多いRemo3をキッチンに置きたいのに置けない(汗
この問題について色々ググった結果、ひとつは「Wi-Fiのチャンネルとかネットワークとの相性問題」説、もうひとつは「長時間使用しないとスリープしローカルAPIではうまく目覚めてくれない」説、があるということがわかりました。後者は「定期的にダミーのIR信号を送ってやればスリープしない」という情報もみつけました。

ネットワーク相性問題

先に「ネットワークの相性問題」について考えました。
我が家ではWi-Fi APが2台稼働しているのですが、問題のあるRemo(第2世代)はBuffaloのWSR-5400AX6に、問題ない残りの2台はNECAterm WG1900HPに接続していることがわかりました。
わかりましたってか、もともと自分がそうしたからそうなってるだけですが(笑)
なのでRemo(第2世代)もNECAterm WG1900HPに繋いで様子を見ることにしました。
しかし何故か余計にひどくなり...元に戻しました。
Wi-Fi接続のスマート電球: YeelightもAterm WG1900HPに繋ぐと調子悪くなるんですよね。。。。Aterm WG1900HPの設定見直さんといかんのかな。


スリープして目覚めてくれない問題

ということでもうひとつの「スリープ問題」説です。
まぁ、とにかく「スリープさせなきゃいいんだろう」ということで一定時間毎にHome AssistantからダミーのIR信号を送信させることにしました。

「スリープ問題」はローカルAPIを使うと発生しクラウドAPI使用時には発生しないようなので、確実にスリープから目覚めさせてくれるのはクラウドAPIを使ってコマンドを送った場合のはずです。
最初は60分に1回、毎時00分にクラウドAPIを使ってダミーのIR信号を送信するオートメーションを作りました。
そして効果があるのかを放置していても検証できるように、クラウドAPIによってダミーのIR信号が送られる1分前の毎時59分にローカルAPIを使ってダミーのIR信号を送信するオートメーションも作りました。
しかしやっぱり日に5回以上はエラーが発生しています。
ダミー信号送信を10分に1回とか5分に1回にしてみてもローカルAPIを使うとエラーが出る時があって、感覚的には暫く使わないと発生すると思っていましたがそうでもなさそうです。

ひょっとして長時間使わないとスリープしローカルAPIでうまく目覚めないのではなく、ローカルAPIを使った後ある程度時間が経つとディープスリープするという仮説も立ててみました。
そこでローカルAPIで操作するデバイスがON/OFFした後にクラウドAPIでダミー信号を送るオートメーションを組みました。
しかし、やっぱりダメです(>

そもそも3台のRemoの温湿度をクラウドAPIで1分間隔で取得しているのにローカルAPIを使うとエラーが出る時があるんだから、ダミー信号を送ったところでダメな予感はしてましたが。。。


結論

Nature Remo(第2世代:Remo-1W2)でローカルAPIを安定して使う術はない。(俺環かも)

まぁ自分の部屋なら多少反応遅くてもいいし自分の部屋にRemo(第2世代)を置いてクラウドAPI運用でいこう!とも思いましたが、メルカリでRemo(第2世代:Remo-1W2)を売ってRemo mini 2(Remo-2W2)へ買い換えました。
Remo mini 2は上で書いた「リビングの照明(コイズミ)のOFFの信号だけ届かない」問題もなくスリープ問題もなさそうです。
その後はたまーにスリープ(?)するRemo mini(初代)を自分の部屋へ移動し、リビングにRemo mini 2、キッチンにRemo 3という配置にしました。
Remo mini(初代)のたまーに起きるスリープ問題が定期的なダミー信号送信で解決するのかは、また検証してみたいと思います。

では。

スマートホーム: トイレの照明自動化その2(これで完璧!?)

こんにちはSympapaです。

ちょっと前の記事でトイレの照明ON/OFFの自動化について書きました。
スーパーなどのトイレでウンチくんをしている時に頭を振っていないと照明が消えてしまうアレを防止するために、人感センサーとドアセンサーを組み合わせてトイレの照明ON/OFFを自動化したというお話でした。
しかしその後、想定していなかったイレギュラーに対応できていないことに気づいてしまいます。
今回は前回作成したトイレの照明ON/OFFのオートメーションを改善していきます。
前回の振り返りも書こうと思いましたが長くなりそうなので興味があれば前回の記事もみてやってください。
sympapa.hatenablog.com

基本仕様

以下のような仕様でオートメーションを作成していきます。
1.ウンチくんをしている時にじっとしていても消灯しない
2.人感センサー1個とドアセンサー1個を使ってトイレの照明ON/OFFを自動化する
3.トイレの外からドアを開けたら照明をONにする
4.トイレに「人が入っている」時にドアが開いたら照明をOFFにする
5.トイレの外からドアを開けたがそのままトイレに入らずドアを閉じた時は照明をOFFにする(イレギュラー対応)
6.トイレの外からドアを開けトイレの中に入ったがドアを閉めずそのまま出てドアを閉じた時も照明をOFFにする(前回想定していなかったイレギュラー対応)
7.用を足し終わりドアを開けたが「やっぱもうちょっとしたい」となり再びドアを閉めてトイレ内に留まった場合も照明をONにする(前回想定していなかったイレギュラー対応)
使用するセンサーは以下のとおりです。

  • ドアセンサー: Aqara Door and Window Sensor (MCCGQ11LM)
  • 人感センサー: Aqara Motion Sensor (RTCGQ11LM)の人感更新を5秒間隔に改造し人感検出後3秒で人感無しになるよう設定したもの(ずっと人感を検出している場合でも5秒間隔で人感検出→人感無しを繰り返す)


シーケンスを考える

そんなワケで以下のようなシーケンスを考えました。3つのシーケンスは並行して実行します。

[シーケンス1]トイレの外からドアを開けたら照明を点ける
トリガー: ドアを開く
条件: トイレ前の廊下の人感センサーが人感を検出している(トイレの外から中へ入るのを識別するため)
アクション:
1)照明をONにする
2)ドアが閉まって10秒後にトイレに入っているかの変数:toilet_occupiedがoffだったら照明をOFFにする(ドアを開けたけどトイレに入らなかった場合の対処)

[シーケンス2]トイレの中に人がいる判定の時にドア開けたら照明を消す
トリガー:ドアを開ける
条件: 変数:toilet_occupiedが"on"である
アクション:
1)[オートメーション1]を無効にする(そうしないとトイレの外へ出た時にシーケンス1が発動する場合がある)
2)照明をOFFにする
3)ドアが閉まったら[オートメーション1]を有効にする
4)変数:toilet_occupiedを"off"にする

[シーケンス3]トイレの中に人がいる判定
トリガー: 人感が検出される
条件: ドアが閉まっている
アクション:
1)トイレに入っているかの変数:toilet_occupiedを"on"にする
2)照明がOFFの場合は照明をONにする(用を足した後ドアを開けて照明が消えたがやっぱりトイレ内に留まりそのままドアを閉めた場合の対処)

このシーケンスをHome Assistantのオートメーションで組んでみましたが問題発生。
使っている人感センサーはセンサーの前にずっと人がいても5秒間隔で人感検出のトリガーを引いてくれるはずなのですが、[シーケンス3]でドアが閉まる前に人感が検出されているとドアを閉めた後に人感が検出されにくい(人がいない状態からは人感センサーの反応は良いが人が居る状態では激しく動かないと検出しない)のでなかなか[人感が検出される→ドアが閉まっている]という条件を満たさず[シーケンス3]のアクションが発動しない時があります。
[シーケンス3]が発動しないと[シーケンス1]でドアを閉めて10秒経過したら消灯してしまいます。

そこで人感センサーの位置を変更し、ドアを閉めて便座のところへ到達するまでは人感が検出されないようにしました。
こうすることで人感更新間隔が長い人感センサーでもこのシーケンスが使えるはずです。

f:id:sympapa:20210911102919p:plain
変更前: ドアを閉める前に人感検出される
f:id:sympapa:20210911102930p:plain
変更後: 便座に近づくまで人感検出しない


出来上がったオートメーション

実際のHome Assistantのオートメーションは以下のようになりました。
オートメーション1ではドアを開けてやっぱりトイレに入らずにドアを閉めた時にはすぐに照明を消したかったところですが、オートメーション3でトイレに入ったかを判定するのにある程度の時間を設けた方が良いのでドアを閉めて10秒後にトイレに入っていなければ消灯するようにしました。

alias: オートメーション1(トイレの照明をON)
description: ''
trigger:
  - platform: state
    entity_id: binary_sensor.door_sensor_1_on_off(ドアセンサー)
    from: 'off'
    to: 'on'
condition:
  - type: is_occupied
    condition: device
    device_id: zzzzz(廊下の人感センサー)
    entity_id: binary_sensor.motion_sensor_2_occupancy
    domain: binary_sensor
action:
  - service: script.トイレの照明を点けるスクリプト
  - wait_for_trigger:
      - type: not_opened
        platform: device
        device_id: xxxxx(ドアセンサー)
        entity_id: binary_sensor.door_sensor_on_off
        domain: binary_sensor
  - delay:
      hours: 0
      minutes: 0
      seconds: 10
      milliseconds: 0
  - condition: state
    entity_id: var.toilet_occupied(トイレに入ってるかの変数)
    state: 'off'
  - service: light.turn_off
    target:
      device_id: bbbbb(トイレの照明)
    data:
      transition: 2
mode: restart
alias: オートメーション2(トイレから出たら照明をOFF)
description: ''
trigger:
  - platform: state
    entity_id: binary_sensor.door_sensor_on_off(ドアセンサー)
    from: 'off'
    to: 'on'
condition:
  - condition: state
    entity_id: var.toilet_occupied(トイレに入っているかの変数)
    state: 'on'
action:
  - service: automation.turn_off
    target:
      entity_id: automation.オートメーション1
  - service: light.turn_off
    target:
      device_id: bbbbb(トイレの照明)
    data:
      transition: 2
  - wait_for_trigger:
      - type: not_opened
        platform: device
        device_id: xxxxx(ドアセンサー)
        entity_id: binary_sensor.door_sensor_on_off
        domain: binary_sensor
    timeout: '15'
  - service: automation.turn_on
    target:
      entity_id: automation.オートメーション1
  - service: var.set(変数セット)
    data:
      entity_id: var.toilet_occupied(トイレに入っているかの変数)
      value: 'off'
      icon: mdi:human-handsdown
mode: single
alias: オートメーション3(トイレに入ったら変数をonにする)
description: ''
trigger:
  - type: motion
    platform: device
    device_id: yyyyy(トイレの人感センサー)
    entity_id: binary_sensor.motion_sensor_ias_zone
    domain: binary_sensor
    for:
      hours: 0
      minutes: 0
      seconds: 0
      milliseconds: 0
condition:
  - type: is_not_open
    condition: device
    device_id: xxxxx(ドアセンサー)
    entity_id: binary_sensor.door_sensor_on_off
    domain: binary_sensor
action:
  - service: var.set(変数のセット)
    data:
      entity_id: var.toilet_occupied
      value: 'on'
      icon: mdi:human-handsup
  - condition: state
    entity_id: light.hue_bulb_1_on_off
    state: 'off'
  - service: script.照明を点けるスクリプト
mode: single

1週間くらいこのオートメーションを使ってますが我ながら完璧すぎるオートメーションが出来たと思います(^^;
では。

スマートホーム: 物理ボタンスイッチ導入はスマート!?

Sympapaです。

我が家ではいくつかスマートホームのシステムの中に物理ボタンスイッチを導入しています。
「いや、それスマートじゃないやろ?」というご意見はごもっともですがセンサーによる自動化はともかく、声による操作はデバイスとしては最強にスマートながら人間目線では時間もかかるしスマートじゃないと思う場面も多いわけです。
実際にワイヤレスの物理ボタンスイッチを導入した結果メリットを感じている点や必要だと感じている点を挙げてみます。

  • ワイヤレスの物理ボタンスイッチを好きな箇所に取り付けておけば音声操作よりも早い場合も多い。
  • その気になれば部屋の中に何個でも用意できる。私の部屋には入口とデスクと枕元にワイヤレスの物理ボタンスイッチを置いてます。
  • ボタンひとつに複数操作を割り当てて部屋のデバイスを全て消したりすると実はスマート。音声操作でも同じ事は可能だが、部屋の出口に取り付けた物理ボタンスイッチを押す方が間違いなく早い。
  • オンオフを自動化した照明を長時間点灯しておきたい場合などには必要。自動化してもマニュアル操作したいケースはある。

ということで物理ボタンスイッチは必要なのです。
しかし音声操作には求めらないのに物理スイッチには求められることがひとつありまして・・・それはレスポンスです。
なぜか音声操作だと入力だけでも数秒かかり更にアクション発動までに1~2秒ほどかかるのを許容しているというのに、物理ボタンスイッチの場合はタイムラグが物凄く気になります。1秒を超えたら押せてなかったのかと思いもう1回押したくなります。それだけ人間がネットワークを介していないスイッチに慣れているんだなと思います。
我が家ではHome Assistantを使ったローカル運用が基本なのでタイムラグをほとんど感じませんが、できるだけタイムラグを削るのがポイントかなと思います。

そんなわけで、我が家で使っているZigBee接続の物理ボタンスイッチを紹介します。


Phillips Hue Dimmerスイッチ(RWL-021)

f:id:sympapa:20210909074443j:plain
我が家で2つ使用している4ボタンのスイッチです。
Amazonで2500円前後で売られています。Aliexpressで売ってる中華の4ボタンスイッチでも1500円以上するので入手性や保証も考えるとメインで使いたいスイッチです。
見た目はいいんですが端の方を押すとボタンが斜めになったりしてクリック感はイマイチです。
土台とリモコン部分は磁石でくっつきます。
土台の大きさが日本で一般的な壁スイッチの大きさに近く、我が家では元々あった壁スイッチに開閉式のカバーを取り付けその上にこのDimmerスイッチを貼り付けています。
分厚くなってしまいますが...
f:id:sympapa:20210905225844j:plain
f:id:sympapa:20210905225909j:plain
Home Assistant+ZHAでは各ボタンそれぞれ1回押し、2~4連押し、長押し、ボタンをリリース、長押し後のリリースという7パターンのトリガーに対応しています。
4連とか使う人いるんでしょうか...(笑)


Aqara OPPLE SWITCH 6ボタン(WXCJKG13LM)

f:id:sympapa:20210905224201j:plain
我が家で2つ使用している3ギャング6ボタンのスイッチです。他に1ギャング2ボタン、2ギャング4ボタンのラインナップがあります。ギャングという言葉の意味が解らないので使い方間違っているかも(笑)
3ギャング6ボタンだとAliexpressで2000円弱くらいで売られています。
見た目はチープながらシンプルで良いと思います。ストロークは浅いですがクリック感は良いです。
土台とリモコン部分は磁石でくっつきます。
土台は幅が広いので日本の住宅には合わないかも。
土台は使わずにスイッチカバーの上から貼り付けてますが見た目はイマイチです。
f:id:sympapa:20210905230005j:plain

それにしても電池交換の仕方が異常に分かりにくく最初は使い捨てなのかと思いました(笑)
ググるYoutubeで解説している外国人が多数います。強引にスイッチ部分をめくらなくてはいけません。この構造にしたのは正直謎です。
Home Assistant+ZHAでは各ボタンそれぞれ1回押し、2~3連押し、長押し、長押し後のリリース、という5パターンのトリガーに対応しています。
ちなみにそれぞれ"(alternative)"というモードが用意されているんですがZHAではそれを使わないと動きません。


Tuya 3ギャングスイッチ(TZ-3000/TS-0043)

f:id:sympapa:20210905225331j:plain
他のモノを買うついでになんとなく買ってしまった3ギャング3ボタンのスイッチです。ってか6ボタンかと思って買ったら3スイッチです。
Aliexpressで1500円くらいで売られています。
ネットでは商品画像が見つけられないほどのマイナー商品(?)ですがちゃんとZHAで使えました。

見た目は安っぽいですがクリック感はストロークもあり悪くありません。
土台とリモコン部分は磁石でくっつきます。
Home Assistant+ZHAでは各ボタンそれぞれ1回押し、2連押しに対応しており2パターン×3ボタンというシンプルさです。スイッチのストロークが大きいからトリプルクリックとか現実的じゃないんでしょう。
これは自分の部屋の枕元に置いて使ってます。

そんなワケでスマートホーム化にも物理ボタンスイッチは必要というお話でした。
では。

スマートホーム: トイレの照明自動化は奥が深い

こんにちはSympapaです。

トイレの照明のON/OFF自動化は最も一般的な部類に入るホームオートメーションではないでしょうか?
多くのスーパーなどのトイレでも照明のON/OFFが自動化されているし思いつきやすいですよね。
というわけで家のトイレの照明も自動化をしようと考えるわけです。

最も単純かつ最初に思いつくのは人感センサーを使って人感検出で照明ON、人感を検出しなくなったら照明OFFってする方法ですが、ウンチくんをしている間に照明が消えてしまいその後頭を振りながらウンチくんをする経験をしたことがある人も少なくないでしょう。
スーパーのトイレならまだしも家のトイレは最もリラックスできる空間のひとつですので、快適にウンチくんをしたいものです。

さて、そうすると人感センサーに加えてドアの開閉センサーをトリガーや条件に組み合わせすればいいなと思いつくわけです。
話は逸れますが、我が家ではAqaraのDoorセンサーが活躍しています。
小さいのに動作が確実。使い始めて1ヶ月でバッテリー残量が70%くらいになっているので電池持ちが少々不安ではありますが(^^;
f:id:sympapa:20210905161257j:plain
で最初に組んだシーケンスは、人感検出で照明ON、その後ドアが閉まり再びドアを開けたら照明OFFというものでした。
人感センサーはドアを開けたら検出される場所に取り付けました。
しかしこれだと「ドアを開けたはいいけどやっぱりトイレに入らない」というフェイントをかますと照明はONのままになり、次にトイレに入ろうとすると照明がOFFになってしまいます。
うーむ。

そもそもドアセンサーがあるのに人感センサーで人感を検出してONにするのもアレですね。
ということで人感センサーは照明をONにするためではなくてトイレに入ったか否かを検出するのに使うことにして、以下のようなシーケンスを組んでみました。
人感センサーは下図のようにトイレのドアから便座までの間を通ると検出しトイレの中に入るまでは検出しないように設置します。
用を足している最中も検出したりしなかったりするので、そこいらへんには気を付けてシーケンスを組みました。
f:id:sympapa:20210905153015p:plain

[シーケンス1]
トリガー: ドアを開く
条件: トイレ前の廊下の人感センサーが人感を検出している(トイレの外から中へ入るのを識別するため)
1)電気をONにする
2)ドアが閉まった時にトイレに入っているかの変数:toilet_occupiedがoffだったら照明をOFFにする(ドアを開けたけどトイレに入らなかった場合の対応)

[シーケンス2]
トリガー:ドアを開ける
条件: 変数:toilet_occupiedが"on"である
1)[オートメーション1]を無効にする(そうしないとトイレの外へ出た時にシーケンス1が発動する場合がある)
2)照明をOFFにする
3)ドアが閉まったら[オートメーション1]を有効にする
4)変数:toilet_occupiedを"off"にする

[シーケンス3]
トリガー: 人感が検出される
1)トイレに入っているかの変数:toilet_occupiedを"on"にする

こうやって書くと単純ですがHome Assistantのオートメーションは分岐やGoto的なジャンプが出来ない(私が方法を知らないだけかも?)ので結構複雑になります。
尚、Home Assistantは標準ではユーザー変数が使えないのでこのカスタムコンポーネントを使っています。
そんなワケで以下のようになりました。

■オートメーション1

alias: トイレの照明をON
description: ''
trigger:
  - platform: state
    entity_id: binary_sensor.door_sensor_1_on_off(トイレのドアセンサー)
    from: 'off'
    to: 'on'
condition:
  - type: is_occupied
    condition: device
    device_id: uuuuu(廊下の人感センサー)
    entity_id: binary_sensor.motion_sensor_2_occupancy
    domain: binary_sensor
action:
  - service: script.light_toilet_on(照明をONにするスクリプトを実行)
  - condition: state
    entity_id: var.toilet_occupied(変数)
    state: 'off'
  - service: light.turn_off
    target:
      device_id: zzzzz(トイレの電球)
mode: single

■オートメーション2

alias: トイレの照明をOFF
description: ''
trigger:
  - platform: state
    entity_id: binary_sensor.door_sensor_on_off(トイレのドアセンサー)
    from: 'off'
    to: 'on'
condition:
  - condition: state
    entity_id: var.toilet_occupied(変数)
    state: 'on'
action:
  - service: automation.turn_off
    target:
      entity_id: automation.オートメーション1
  - service: light.turn_off
    target:
      device_id: zzzzz(電球)
    data:
      transition: 2
  - wait_for_trigger:
      - type: not_opened
        platform: device
        device_id: xxxxx(ドアセンサー)
        entity_id: binary_sensor.door_sensor_on_off
        domain: binary_sensor
    timeout: '30'
  - service: automation.turn_on
    target:
      entity_id: automation.オートメーション1
  - service: var.set(変数をセット)
    data:
      entity_id: var.toilet_occupied
      value: 'off'
      icon: mdi:human-handsdown
mode: single

■オートメーション3

alias: トイレに入ったら変数をonにする
description: ''
trigger:
  - type: motion
    platform: device
    device_id: yyyyy(トイレの人感センサー)
    entity_id: binary_sensor.motion_sensor_ias_zone
    domain: binary_sensor
condition: []
action:
  - service: var.set(変数をセット)
    data:
      entity_id: var.toilet_occupied
      value: 'on'
      icon: mdi:human-handsup
mode: single

これでイレギュラーな行動にもほぼ対応できたんじゃないかと思います。
まだ「鍵をかけずに用を足していて家族が入って来た」なんてイレギュラーには対応しきれてませんが(笑)

とか書いたそばから、「トイレに入ってドアを閉めずに出ていくイレギュラー」と「用を足してドアを開けたけどやっぱりもう少ししたい(笑)ってイレギュラー」を思いついたので、また修正予定です。
では。