Sympapaのスマートホーム日記

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

Home Assistant: IHクッキングヒーターの消し忘れを防止する


Sympapaです。
タイトル画像はGeminiにIHクッキングヒーターを描かせたモノで一見するとソレらしく見えますがツッコミどころ満載です。でも子供が描いた絵のようで味がありますね(笑)


さて、我が家の奥様は家事が全般的に嫌いなくせに料理だけはお好きでストウブとかいうお高い鍋を使って煮込み料理をすることが多いのです。
ストウブで作った料理はホントに美味しい!
まぁ超重い鍋の熱容量を考えると電気代が高くつきそうだなぁと思ったりしますけど。


んで、奥様が煮込み料理をしていて出かける前にIHヒーターを止めようと思っていたのに忘れて出かけてしまい、料理を台無しにしてしまった事件が過去に数回起きています。必要な時はOFFタイマーを使っているようですが、出かけるタイミングでオフにしたらちょうどいい場合に忘れてしまう場合があるようです。
IHクッキングヒーターは過熱を検出して自動で止まってくれるので火災のリスクは低いとは思うのですが、せっかくの料理を台無しにしてしまうのはよろしくありません。
先日も奥様はソレをやらかしてしまい「IHクッキングヒーターが加熱中に出かけようとすると教えてくれるように出来んの?」と注文を受けました。もちろんスマートホームオタクとしてはお断りするワケにはいきません。ってか我が家のスマートホーム化は安定期に入っていて新たにやることも無くなってきた中で新ネタをいただきました(笑)


そんなワケで今回はHome Assistantを使った「IHクッキングヒーターの消し忘れ防止」に取り組んでいきたいと思います。

■どうやってIHクッキングヒーターの稼働を検出する?

IoT非対応のデバイスが稼働しているか否かを検出する最も一般的な方法は消費電力による検出です。お手軽なのは消費電力測定機能付スマートプラグによる検出ですがIHクッキングヒーターの電圧は200Vで、日本の200Vコンセント形状に対応した消費電力測定機能付スマートプラグはたぶん存在しないと思います。(当社調べ)
しかし、我が家では既に200V仕様の食洗機の稼働検出をESP32+クランプメーターで実施しているのでこれと同じことをやれば良いだけです。
sympapa.hatenablog.com
ですが、それを実施するには一旦IHクッキングヒーターを取り外さなくてはいけません。しかしながら、我が家のIHクッキングヒーターは半年ほど前、今の家に引っ越して1年ほどで特に何かを落としたりしたワケでもないはずなのに天板ガラスが割れる事件が発生し、お高い費用を払って修理しました。前の家ではIHクッキングヒーターの天板を割ったことなんてなかったので「このIHクッキングヒーターの天板はとても弱い」という認識となっています。なので、できればIHクッキングヒーターを取り外す作業をしたくありません。
ほんとはIHクッキングヒーターがどのくらい電力消費してるのかも知りたいので消費電力測定したいのですけどね。


そこでIHクッキングヒーターとレンジフードの連動機能に着目しました。イマドキのレンジフードはIHクッキングヒーターの稼働に合わせて自動的にON/OFFする機能を持っています。その連動にはテレビなどの赤外線リモコンと同様の赤外線信号が利用されています。
今回はこの赤外線信号を利用してIHクッキングヒーターの稼働状況をHome Assistant上で取得できるようにし、IHクッキングヒーターを停止せずに出かけてしまいそうな時は警告を発するようにしたいと思います。

■IHクッキングヒーターとレンジフードの連動機能について調べる

とりあえず、我が家のIHクッキングヒーター"日立製N8T"とレンジフード"タカラスタンダードVRAT"(だったと思う)の連動機能について調べてみます。
まず、IHクッキングヒーターの方。
赤外線信号の仕様は一般的なNECフォーマット(38kHz)ってことなので、一般的な赤外線受光モジュールや学習リモコンが使えるはずです。
ヒーターがオンになると火力(?)に関わらず同じ信号が発信されるようで、ヒーターがオフになった時には「3分タイマーがスタートする」と書かれています。


次はレンジフードの方です。IHクッキングヒーターがオンになった時に既にレンジフードのファンが「強」又は「中」で運転していればそれを継続し、それ以外であれば「中」で運転するという仕様みたいです。
IHクッキングヒーターがオフになった時は基本「3分タイマーをスタートさせて3分後にファンが停止する」けど、既に10分タイマーが動いている場合は再度10分タイマーをスタートさせ10分後にファンが停止する」という仕様のようです。
ここでふと思いましたが、我が家ではレンジフードのリモコン(オプション)を使っています。IHクッキングヒーターが発する赤外線信号と、リモコンが発する赤外線信号が同じだと、どちらが発した信号かが区別できずIHクッキングヒーターの稼働状況を正確に検出できないことになってしまいます。この点は後で注意してチェックしていきましょう。

■Home Assistantに接続できる赤外線受光機を作る

我が家では既にESP32+赤外線受光センサー+ESP Homeを使い、SONYのHUISという赤外線学習リモコンを使って照明を操作できるようにしています。

それに関してはこのあたりの記事で書いています。
sympapa.hatenablog.com
sympapa.hatenablog.com


今回も同仕様のHome Assistantに接続できる赤外線受光機をESP32と赤外線受信モジュールを準備して作ることにしました。


赤外線受信モジュールは"KY-022"です。
Amazon Primeで届く3個1000円のを購入しました。2年ほど前に購入した時は700円くらいでしたが、ほんとインフレ円安恐ろしい。。。
Aliexpressだと5分の1くらいで買えそうですがAmazon Primeですぐ届くのでまぁヨシとします。


ESP32は稼働していない"ESP32-DevKitC-VE ESP32-WROVER-E開発ボード"が1個転がっていたのでこいつを使います。
akizukidenshi.com


ESP32とKY-022は下の写真のように繋いだだけです。


これをセリアの小物入れに収めてやりました。これも照明用の赤外線受光機で使ってるのと同じです。3面が半透明になっていて中身が見えないけど赤外線は問題なく通してくれるので見た目的にいい感じなのです。


■ESP HOMEの設定

ESP HOMEはESP32を簡単にホームオートメーション向けのデバイスにしてくれるツール(?)です。
Home Assistantとの親和性が高いのもHome Assistant使いとしては高ポイントです。
まずは、IHクッキングヒーターをオン/オフした時に発射される赤外線信号を調べるためにESP Home上で次のとおり設定を書いてESP32に書き込みます。
[ESP Home側の.yaml]

captive_portal:

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


この状態でESP Homeからログを確認すると、IHクッキングヒーターが発する赤外線信号は以下のとおりだとわかりました。
IHクッキングヒーターをオンにした時: Received NEC: address=0x5187, command=0x758A command_repeats=1
IHクッキングヒーターをオフにした時: Received NEC: address=0x5187, command=0x738C command_repeats=1


実際の挙動としては、IHクッキングヒーターをオフにしてから3分後にレンジフードがオフになるのですが、赤外線信号はIHクッキングヒーターをオフにした時点で発射され、レンジフード側で3分タイマーが発動し3分後にオフにしていることが確認できました。
また、。IHクッキングヒーターが発する赤外線信号とレンジフードの赤外線リモコンが発する赤外線信号は異なるものであることが確認できました。
そんなワケで、ESP Home側では受信した赤外線信号が"nec"で"address"と"command"が指定したものと一致した時に"ON"になるbinary_sensorを作ります。


[ESP Home側の.yaml]

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

#IH Heater
binary_sensor:
  - platform: remote_receiver
    name: "IR-4_IH_Heater_ON"
    nec:
      address: 0x5187
      command: 0x758A
    filters:
      - delayed_off: 200ms
  - platform: remote_receiver
    name: "IR-4_IH_Heater_OFF"
    nec:
      address: 0x5187
      command: 0x738C
    filters:
      - delayed_off: 200ms


そうするとHome Assistant側ではESP Home側で作った"binary_sensor"が見えるので、この"binary_sensor"の変化に応じてIHクッキングヒーターのオンオフ状態を情報として保持できるようオートメーションを作成します。
"input_boolean.ih_coocking_heater_power"はヘルパーで予め作成しておきました。

alias: IH_cooking_Heater_power_on_off
description: ""
triggers:
  - trigger: state
    entity_id:
      - binary_sensor.esp32_d_kitchen_ir_4_ih_heater_on
    to: "on"
    from: "off"
    id: IH_Heater_ON
  - trigger: state
    entity_id:
      - binary_sensor.esp32_d_kitchen_ir_4_ih_heater_off
    to: "on"
    from: "off"
    id: IH_Heater_OFF
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - IH_Heater_ON
        sequence:
          - action: input_boolean.turn_on
            target:
              entity_id: input_boolean.ih_coocking_heater_power
            data: {}
      - conditions:
          - condition: trigger
            id:
              - IH_Heater_OFF
        sequence:
          - action: input_boolean.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.ih_coocking_heater_power
mode: single

■警告を出すオートメーションを作る

我が家の玄関ホールには、Google Nest Miniが設置してあります。
既に、窓の鍵が開いている状態で玄関へ行くと「窓の鍵が開いています」とGoogle Nest Miniがしゃべるオートメーションが組んであるので、ここに、IHクッキングヒーターが稼働している状態で玄関へ行くと「IHクッキングヒーターが稼働中ですが大丈夫ですか?」としゃべるシーケンスを追加してやります。
人が玄関へ行ったことの検出は玄関ドア近く屋内側に設置してある赤外線人感センサーでやっていますが、外から玄関へ入った場合は警報を発しないよう玄関ドアが開いた状態で人感を検出した場合には警報を発しないようにしています。
「さっきまでキッチンに居た人が玄関へ行ったら警報を発する」みたいなことが出来たらカンペキですが、スマホの位置検出を使ってもスマホを家の中でずっと持ち歩くわけでもないですしねぇ。キッチンと玄関にカメラを設置して顔認識すれば出来そうですがさすがにそこまでは(笑)

alias: 玄関まで行ったら警告する
description: ""
triggers:
  - type: occupied
    device_id: 玄関ドア付近の人感センサー
    entity_id: 玄関ドア付近の人感センサー
    domain: binary_sensor
    trigger: device
conditions:
  - type: is_occupied
    condition: device
    device_id: 玄関ドア付近の人感センサー
    entity_id: 玄関ドア付近の人感センサー
    domain: binary_sensor
  - type: is_not_open
    condition: device
    device_id: 玄関ドアの開閉センサー
    entity_id: 玄関ドアの開閉センサー
    domain: binary_sensor
actions:
  - if:
      - condition: not
        conditions:
          - condition: state
            entity_id: input_number.window_lock_opened_number
            state: "0"
    then:
      - data:
          volume_level: 0.4
        target:
          device_id: 玄関ホールのGoogle Nest HUB
        action: media_player.volume_set
      - repeat:
          count: 1
          sequence:
            - data:
                entity_id: media_player.玄関ホールのGoogle Nest HUB
                message: 窓の鍵が開いています
                cache: true
              action: tts.cloud_say
            - delay:
                hours: 0
                minutes: 0
                seconds: 2
                milliseconds: 0
  - if:
      - condition: state
        entity_id: input_boolean.ih_coocking_heater_power_booleans
        state: "on"
    then:
      - data:
          volume_level: 0.4
        target:
          device_id: 玄関ホールのGoogle Nest HUB
        action: media_player.volume_set
      - repeat:
          count: 1
          sequence:
            - data:
                entity_id: media_player.玄関ホールのGoogle Nest HUB
                message: IHクッキングヒーターが動いてますが大丈夫ですか?
                cache: true
              action: tts.cloud_say
            - delay:
                hours: 0
                minutes: 0
                seconds: 2
                milliseconds: 0
mode: single

■赤外線受光機を設置する

試した感じ割とテキトーな場所に設置してもうまく受光しそうでレンジフードの上のここに乗っけてやると赤外線信号が自分の体に遮られることもないようなので、ここに仮設置して様子を見ることにしました。


しかし、いざ使い始めてみると、鍋が赤外線を遮ったりして結構な頻度で頻度で赤外線信号を受信してくれないことが判りました。調べてみるとココから赤外線信号が発射されているようです。


レンジフードはIHクッキングヒーターとうまく連動しているので「ならばレンジフードの赤外線受光部に近い場所で受光するしかない」って結論に至りました。
そうなるとESP32と赤外線モジュールは長いケーブルで接続して赤外線モジュールだけをレンジフードの赤外線受光部の近くに設置すれば良い感じになると思うのですが、赤外線受信モジュールをむき出しで設置するのは不格好ですねぇ。3Dプリンターがあれば赤外線受信モジュールを収めるいい感じのケースを作れるのでしょうけど。
そこで思い付いたのが赤外線リモコンリピーターを使う方法です。まぁこれも後付け感満載にはなりますが見た目はマシになります。Amazonで899円で購入しました。


リピーターの受光部をこのへんに設置すれば問題なさそうです。知識があれば、この赤外線リモコンリピーターのケーブルをぶったぎって直接ESP32に接続すれば良さそうなモンですが私にはチンプンカンプンなのでそのままリピーターとして使います。


暫く使ってみて問題なさそうだったので、ESP32やらをレンジフードの内部に隠蔽してやります。レンジフードの前面パネルを取り外すと中にレンジフード用のコンセントがありました。ここからESP32と赤外線リモコンリピーターの電源が取れますが、コンセントもレンジフードのプラグもアース付きの3ピンのやつです。仕方がないので3ピンの2個口電源タップをAmazonで発注。1918円もしましたが。。。3ピンのタップで高いですよねぇ。しかも需要の問題か2個口よりも4個口の方が安かったりするのですよね。


赤外線リモコンリピーターの受光部のケーブルを通すには前面パネルに穴を開けるとかせんといかんなと思ったのですが、前面パネルを下から支えるステー(?)と壁との間に3mmくらいの隙間があることが判ったのでそこからケーブルを通してやりました。これはラッキーでした。


ついでに消費電力を取得できる3ピン仕様のスマートプラグを仕込んで、レンジフードのオンオフを消費電力で取得できるようにしておきました。使う日が来るのかはしらんけど(笑)

■まとめ

今回はHome Assistantを使って「 IHクッキングヒーターの消し忘れ防止」を構築してみました。地味だし発動の機会も少ないので感動はありませんが。
その割に地味に時間もお金もかかってしまったので、やっぱIHクッキングヒーターをめくって消費電力で検出した方が良かったかなとも思ったり。
それでは。