Sympapaのスマートホーム日記

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

Home Assistant: 赤外線リモコン操作をトリガーにして照明のシーンを切り替える(1)

Sympapaです。


タイトルがなんだかわかりにくくなっておりますが、赤外線リモコンからHome Assistantのスクリプトやサービスを実行したり、Home Assistantと接続した赤外線リモコン「非対応」のデバイスを赤外線リモコンで操作できるようにするというのが今回のお話です。


家を建てる計画の進行中なんですが、新しい家ではHome Assistantを使ってLDKの照明をあらかじめ設定したシーンの中から選択できるようにする予定です。シーンはたくさんありすぎてもややこしいので6個~8個くらいを想定してます。


そこで考えているのがシーン選択をする時のUIです。
今も使っているUIのひとつ目は、壁に設置してあるHome Assistantダッシュボード用のタブレットです。
常時給電していて画面も常時オンなので、これに照明のシーンを呼び出すボタンを表示しておけばワンタッチで操作出来ます。
でもリビングでくつろいでいる時に立ち上がって設置してある場所まで行くのは億劫ですねぇ。


既に使っているUIのふたつ目はGoogle Homeでの音声認識によるシーンの呼び出しです。
しかし音声入力は入力にも時間がかかるし反映されるまでにも時間がかかるので、両手が塞がっている時や手が濡れている時など状況によって使いどころはありますがあまり好きではありません。


既に使っているUIの三つ目はリモートボタンです。壁などにくっつけて使ってます。
しかし6個~8個のシーンを割り当て出来るほど多ボタンでは無いし、壁にくっつけて使うのが前提のデザインなんですよね。


古いスマホをHome Assistantのダッシュボード用にしてリビングに置いておけば解決しそうですが、頻繁に充電しなくちゃいけない問題があります。


そうなると、やっぱりリビングにハンドヘルド型のリモコン(普通のテレビみたいなリモコン)を置いといて、それで照明のシーンを切替できたら便利そうだなという結論に至りました。


それならばと「Zigbee接続」のハンドヘルド型リモコンを探してみたのですが、ソレっぽい形状で多ボタンのものがみつかりません。
シーンが6個~8個となるとONとOFFを加えてボタンが10個くらいのものが欲しいところですが、Aliexpressで探す限りZigbee接続のハンドヘルド型となると6個が最大かなという感じです。こんなのとか。


考えた結果、赤外線リモコンを使うのが種類も豊富だし安価で良さそうという結論に至りました。
でもポン付けとかネットワーク経由で、赤外線リモコンの信号を受信してHome Assistantへ入力できるデバイスなんてものはなさそうです。
調べてみたところ、ESP32+赤外線受信モジュールでESP HOMEを使ってHome Assistantへ入力するのが面倒だけどまだ簡単そうですねぇ。
ESP32を触るのもESP HOMEを触るのも久しぶりだし設定で躓きそうな予感しかしませんが、やりますか。やりましょう。やってみましょう。

■いい感じの赤外線リモコンを探す

なかなか重い腰が上がらないので、まずはちょうど良さそうな赤外線リモコン探しから始めます(笑)
赤外線リモコンは種類は多いけど、TV用のとかゴチャゴチャしたのが多いので選択肢が結構限られるんですよねぇ。


シンプルな汎用タイプだと電子工作関係でこういうのならちょいちょい見かけますが、小さくて薄いのですぐに行方不明になって捜索する家族の姿が想像できます(笑)


Aliexpressで探しまくって、やっとこさちょうど良さそうなのがみつかったのでポチりました。
テレビのリモコンサイズでボタンが多すぎないシンプルなジジババ仕様の学習リモコン(笑)
ボタンの色使いが少々アレですが、"VOL"とかAV機器操作用マークみたいな表記がほとんど無いのはGOODです。
バックライトが付いているのも便利そうです。
でもかなり安っぽい気もする(実際安いけど)ので届いてみないと本当に使うかわかりません(笑)

ja.aliexpress.com


そうこうしている内に理想形と思われるこんなのも見つけました。SONYのHUISという赤外線スマート(?)リモコンです。
e-inkディスプレイに好きなレイアウトでボタンを配置できるIRリモコン。最大30台のリモコンをひとつにまとめることが出来、赤外線信号の学習はもちろんマクロ機能なども搭載しており、PCソフトを使ってリモコンをデザインすることも出来るそうです。
Wi-Fi接続も無くディスプレイもe-inkなのでバッテリーも1ヶ月くらい持つみたい。
2015年にソニーの新規事業創出プログラムでクラウドファンディングからスタートし2016年に一般発売されたもののようですが、2023年現在は生産中止となっていて後継機も販売されていません。「進化し続けるスマートリモコン」って書いてあるのに。。。(笑)
同じような商品が他にあっても良さそうですが、ググっても見つけられませんでした。
レビューを見ると評価がかなり分かれているのと、古いのでバッテリー持ちが心配なのと、サポートが打ち切られていてファームウェアすらダウンロードできないのと、ソニータイマーがインストールされていたという声も多く気に入ってしまったら代替デバイスも無いし路頭に迷いそうなのとで不安だらけですが、ガマン出来ずに中古でポチってしまいました(汗
軽く触った感じ結構良さげなので、今度レビューを書こうかなと思います。

www.sony.jp

■赤外線受信機を作る

◇用意したもの
➀赤外線受信モジュール
ESP32 IR receiverでググって出てきたこちらのページを参考にKY-022という赤外線受信モジュールを購入することにしました。
www.electroniclinic.com


3個で699円は高いなと思いつつ早く弄りたかったので、Amazon Primeで届くこいつを購入しました。Aliexpressだと5分の1くらいで買えそうですがまぁヨシとします。

amzn.asia


➁ESP32
実験用に使っているESP32を使います。前はもうちょい安かったんですが値上がりしてますねぇ。

amzn.asia

■回路

回路というかESP32とKY-022を繋いだだけです。
どのピンがどんな働きとか調べるのも面倒なのでこちらのページのまんま繋ぎました。

■ESP HOMEの設定

ESP HOMEはESP32を簡単にホームオートメーション向けのデバイスにしてくれるツール(?)です。
よーわかりませんが、ホームオートメーション向けの機能が色々用意されていて、設定を.yamlで書いてやればプログラムを生成してESP32に焼いてくれるって感じです。
Home Assistantとの親和性が高いのも、Home Assistant使いとしては高ポイントです。
ちなみに各所で簡単と紹介されていますのでそう書きましたが、私には簡単ではありません(笑)


しかしググっても、赤外線リモコンの信号を赤外線受信モジュールで受信しESP HOMEを介してHome Assistantを動かしている例があまりヒットしません。
良くわからんまま、とりあえず赤外線の受信がちゃんと出来るか確認するためにESP HOMEを以下のように設定しました。

# IR receiver
remote_receiver:
  pin:
    number: GPIO26
    inverted: True
  dump: all

そこに転がっていた照明のリモコン信号をESP HOMEのログを表示しながら読み込ませてみると無事にコードが表示されましたが。。。
同じボタンを繰り返し読み込ませると、毎回全く同じコードにはならず僅かな差が生じるようです。

コードをトリガーにすれば良いのだろうと思っていたのでこれは困りました。
回路周りの問題なのか?赤外線リモコンとは外乱を受けるのでこういうものなのか?果たしてこのバラツキにフィルタをかける方法があるのか???
乗っけから躓きました(汗)


そこで今度はパナのテレビのリモコンの電源ボタンを読み込ませてみました。すると。。。

このように表示されました。パナのリモコンだと認識されているようで"address"と"command"は何度ボタンを押しても安定しているようです。
どうやらライブラリにある信号の場合はこんな風に認識され、さきほどのバラツキもうまく処理されるみたいです。
ならば、ライブラリに登録されていて且つ一生買わないであろうメーカー&デバイスのリモコン信号を使えば、家にある家電の赤外線リモコンと被らずにHome Assistant用のトリガーとして使えるはず。


そんなワケでSONY HUISにプリセットされていた買わないであろう〇芝製のテレビ(※〇芝製の白物家電は好きです)の電源ボタンの信号を読み込ませてみると。。。

[remote.jvc:049]:[remote.lg:054][remote.nec:070][remote.pioneer:149]と4つも表示されてまたワケがわからなくなりました(汗)
まぁしかし再現性は高いようなのでとりあえず"nec"の"address"と"command"をトリガーにして、〇芝製テレビのリモコン信号のチャンネルボタン1~3の信号を受信した時に、Home Assistant側で照明の明るさと色温度を切替するオートメーションを発動するようにしてみました。


ESP Home側では受信した赤外線信号が"nec"で"address"と"command"が指定したもの(チャンネルボタン1~3)と一致した時に"ON"になるbinary_sensorを作ります。
【ESP Home側の.yaml

# IR receiver
remote_receiver:
  pin:
    number: GPIO26
    inverted: True
  dump: all

binary_sensor:
  - platform: remote_receiver
    name: "IR-1_button_1"
    nec:
      address: 0xBF40
      command: 0xFE01
    filters:
      - delayed_off: 200ms
  - platform: remote_receiver
    name: "IR-1_button_2"
    nec:
      address: 0xBF40
      command: 0xFD02
    filters:
      - delayed_off: 200ms
  - platform: remote_receiver
    name: "IR-1_button_3"
    nec:
      address: 0xBF40
      command: 0xFC03
    filters:
      - delayed_off: 200ms


そうするとHome Assistant側ではESP Home側で作った"binary_sensor"が見えるので、この"binary_sensor"の変化に応じて照明の明るさと色温度を変更するオートメーションを作成しました。チャンネル1,2,3ボタンそれぞれに、異なる明るさと色温度を割り当てます。
【Home Assistatのオートメーションの.yaml

alias: ir_remote_from_esphome
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.IR-1_button-1
      - binary_sensor.IR-1_button-2
      - binary_sensor.IR-1_button-3
condition: []
action:
  - choose:
      - conditions:
          - condition: state
            entity_id: binary_sensor.IR-1_button-1
            state: "on"
        sequence:
          - service: light.turn_on
            data:
              transition: 2
              brightness_pct: 100
              kelvin: 6500
            target:
              entity_id: light.ledvance_classic_tunable_white_l
      - conditions:
          - condition: state
            entity_id: binary_sensor.IR-1_button-2
            state: "on"
        sequence:
          - service: light.turn_on
            data:
              transition: 2
              kelvin: 3500
              brightness_pct: 50
            target:
              entity_id: light.ledvance_classic_tunable_white_l
      - conditions:
          - condition: state
            entity_id: binary_sensor.IR-1_button-3
            state: "on"
        sequence:
          - service: light.turn_on
            data:
              transition: 2
              kelvin: 2700
              brightness_pct: 20
            target:
              entity_id: light.ledvance_classic_tunable_white_l
mode: single

■まとめ

これで、赤外線リモコンを使って、Home Assistatで照明の明るさや色温度を切り替えることが出来るようになりました。
赤外線リモコンを受信してHome Assistantへ入力できるようになったので、例えばHome Assistantから電源状態の取得が出来ない機器を赤外線リモコンで電源オンオフした時にHome Assistantに電源状態を同期したりとか、赤外線リモコンでテレビをオンにした時に他のデバイスもオンにするとか、色々使い道がありそうです。

それでは。たぶんつづく。