Sympapaのスマートホーム日記

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

新居のスマート化: YKK AP玄関ドア電気錠をHome Assistantでオートロック化する(2)

Sympapaです。


新居の玄関ドアには工務店の標準仕様であるYKK APのヴェナートD30を採用しました。
電気錠はリモコンを持っていれば帰宅時にドアノブに付いたボタンを押すだけで解錠できるリモコンキー仕様です。
Home Assistantと連携したいので100V仕様にしてJEM-A端子が付いている操作盤YS KAG-B3を導入しました。


しかしYKK APの電気錠は、玄関ドアの屋内側には解施錠ボタンが無く、オートロック機能も帰宅時に機能するものは付いていますが外出時に機能するものは付いていません。
私は何故か実物を見るまで、屋内側にも解施錠ボタンがあってオートロック機能も当然あるものだと思い込んでいたのです。痛恨のミスでした。


そんなワケで、YKK AP玄関ドアをJEM-A端子 - ESP32 - ESP HOME - Home Assistantと繋いでHome Assistantから電気錠を操作できるようにし、更にドアの屋内側に解錠ボタンを追加してオートロック機能を実現しちゃおうってのがこのシリーズになります。
前回はHome Assistantと接続するところまでを書きました。
sympapa.hatenablog.com


今回は、ドアの屋内側に解錠ボタンを取り付け、オートロック制御のオートメーションを組むところまでを書いていきます。

■玄関ドアの屋内側に取り付けるボタンを選ぶ

この計画で最も悩んだのが玄関ドアの屋内側に取り付けるボタン選びです。
手っ取り早いのはZigbbe接続のリモートボタンなのですが小さいものを探しても40mm×40mmくらいあります。ドアノブに取り付けるには大きすぎます。ドアノブに手をかけてボタンを押してそのままドアノブを押してドアを開けるってのがスマートだと思うんですよね。
それに後付け感もなるべく出したくないので結構悩みました。


そんなワケでマルツで物色していたところ、薄型で14mm×14mmというサイズでクリック感も悪くないタクトスイッチを見つけました。これならドアノブ上にくっつけられそうです。

www.nkkswitches.co.jp


Zigbee接続のドア開閉センサーのリードスイッチを取り外して代わりにこのタクトスイッチを接続し、Zigbeeで接続できるようにしてやりました。
リードスイッチは磁力でオンオフする単純なスイッチなので、リードスイッチ式のドア開閉センサーのリードスイッチを取り外して代わりに好きなスイッチを接続すれば無線式リモートスイッチが簡単に作れます。ドア開閉センサーは小さいものがほとんどなのでコンパクトに作れるし、工夫次第で色々な使い道があるDIYスマートホーム化の強い味方です。
このドア開閉センサーの改造についてはこちらの記事で書いています。
sympapa.hatenablog.com


ドア開閉センサーの本体はドアノブの裏側にくっつけて目立たないようにします。黒の塗装をしてやろうと思いましたが、とりあえず黒のビニルテープを貼ってごまかしました(笑)
というわけで取り付けた感じ、いつも見る角度から見ればさほど後付け感も無くクリック感も良いので及第点ですが、覗き込んだら落第です(笑)
できれば3Dプリンターで何か作ってうまいことしたいですね。3Dプリンター欲しい。。。

■オートロックのオートメーションを組む

まずは構想です。
我が家の玄関ドアの電気錠の仕様として、JEM-A端子を使って解錠した場合、ドアを一定時間(設定により25秒 or 50秒)開けなければ自動的に再施錠されますが、ドアを開けるとその後自動施錠はされません。
従って、このボタンで解錠した後は、ドアを開けて閉めた後に施錠するオートメーションを組まなくてはいけません。
誤動作やバグを減らすために、このボタンは「解錠専用」とすることに決めました。
このボタンを押すと、解錠する→ドアが開くのを待つ→ドアが閉まるのを待つ→施錠する というオートメーションを組むことにします。


そして、操作盤にはロックだけではなくドアの開閉状態も表示されるのですが、ドアの開閉状態を出力する端子などはありません。ドアが開くと操作盤のLEDが光るので、操作盤を改造してLEDの電流を拾えばドアの開閉状態をESP32を使って取得できそうな気がしますが、ハンダ付けしてしまうと保証がきかなくなりそうだしハンダづけが苦手なので(笑)、ドアにドア開閉センサーを取り付けてドア開閉状態を取得することにしました。
そうすると、ドア開閉センサーの通信エラーなどで状態を正しく取得できなかった場合のフェールセーフも考えなくてはいけません。
ここはボタンを押して解錠後5分間「解錠」状態の場合は、2分毎に施錠されるまで施錠の操作を繰り返すことで対応することにしました。
まぁ途中でエラーなどによりHome Assistantが停止してしまったらどうしようもありませんが。。。


実際に組んだオートメーションは下記のモノです。
オートロックのシーケンスが作動中であることのフラグとして、"input_boolean.auto_lock_running"を先に作成しておきました。

alias: Entrance_door_button_pushed
description: ""
trigger:
  - type: not_opened
    platform: device
    device_id: ボタンのドア開閉センサー
    entity_id: ボタンのドア開閉センサーの開閉
    domain: binary_sensor
condition:
  - condition: state
    entity_id: binary_sensor.entrance_lock_status
    state: "on"
    enabled: true
action:
  - service: switch.turn_on
    data: {}
    target:
      entity_id: switch.entrance_lock_toggle
  - service: input_boolean.turn_on
    target:
      entity_id: input_boolean.auto_lock_running
    data: {}
  - wait_for_trigger:
      - type: opened
        platform: device
        device_id: ドアのドア開閉センサー
        entity_id: ドアのドア開閉センサーの開閉
        domain: binary_sensor
        for:
          hours: 0
          minutes: 0
          seconds: 1
    timeout:
      hours: 0
      minutes: 0
      seconds: 55
      milliseconds: 0
  - wait_for_trigger:
      - type: not_opened
        platform: device
        device_id: ドアのドア開閉センサー
        entity_id: ドアのドア開閉センサーの開閉
        domain: binary_sensor
        for:
          hours: 0
          minutes: 0
          seconds: 1
    timeout:
      hours: 0
      minutes: 5
      seconds: 0
      milliseconds: 0
  - repeat:
      sequence:
        - if:
            - type: is_off
              condition: device
              device_id: 対象のESP32
              entity_id: ロックの状態
              domain: binary_sensor
              for:
                hours: 0
                minutes: 0
                seconds: 1
          then:
            - type: turn_on
              device_id: 対象のESP32
              entity_id: ロックの開閉
              domain: switch
            - delay:
                hours: 0
                minutes: 0
                seconds: 5
                milliseconds: 0
            - if:
                - type: is_on
                  condition: device
                  device_id: 対象のESP32
                  entity_id: ロックの状態
                  domain: binary_sensor
                  for:
                    hours: 0
                    minutes: 0
                    seconds: 1
              then:
                - service: input_boolean.turn_off
                  metadata: {}
                  data: {}
                  target:
                    entity_id: input_boolean.auto_lock_running_boolean
                - stop: ""
                  error: false
            - delay:
                hours: 0
                minutes: 2
                seconds: 0
                milliseconds: 0
      until:
        - type: is_on
          condition: device
          device_id: 対象のESP32
          entity_id: ロックの状態
          domain: binary_sensor
          for:
            hours: 0
            minutes: 0
            seconds: 1
mode: single


そしてこのオートメーションが走っている時に他の方法で施錠された場合を想定し、施錠されたら上のオートメーションの動作を停止するオートメーションを作成します。
まぁこのオートメーションを作成するんだったら、上のオートメーションでロックしたら停止するシーケンスは要らなかったですね(汗)

alias: auto_lock_running_cancel
description: ""
trigger:
  - type: turned_on
    platform: device
    device_id: 対象のESP32
    entity_id: ロックの状態
    domain: binary_sensor
    for:
      hours: 0
      minutes: 0
      seconds: 2
condition:
  - condition: state
    entity_id: input_boolean.auto_lock_running_boolean
    state: "on"
    for:
      hours: 0
      minutes: 0
      seconds: 2
action:
  - service: automation.turn_off
    metadata: {}
    data:
      stop_actions: true
    target:
      entity_id: automation.entrance_door_button_pushed
  - service: automation.turn_on
    target:
      entity_id:
        - automation.entrance_door_button_pushed
    data: {}
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.auto_lock_running_boolean
    data: {}
mode: single

■まとめ

これで、外出時にボタンで解錠でき、ドアが閉まると自動でロックされるようになりました。
サムターン2つを手動で回して解錠した場合はオートロックは有効にならないので、ちょっとだけ外に出る時などは使い分けができます。
ZigbeeWi-Fiによる通信を介しているにも関わらず、ボタンを押してから解錠まで全くラグを感じずレスポンスは良好です。
あとは誤動作しないことを祈るのみ。
ってか、これから電気錠付玄関ドアを選ぶ方は、よーく仕様を確認することをおススメします(笑)
利便性で選ぶならYKK APよりLIXILがおススメ。


それでは。

新居のスマート化: YKK AP玄関ドア電気錠をHome Assistantでオートロック化する(1)

Sympapaです。

新居の玄関ドアには工務店の標準仕様であるYKK APのヴェナートD30を採用しました。
電気錠はリモコンを持っていれば帰宅時にドアノブに付いたボタンを押すだけで解錠できるリモコンキー仕様です。
Home Assistantと連携したいので100V仕様にしてJEM-A端子が付いている操作盤YS KAG-B3を導入しました。


しかし、電気錠の仕様に関しては私の大きな勘違いがありました。
家を建てることを決めた方なら誰しもそうだと思いますが、ハウスメーカー工務店を決める過程でたくさんのモデルハウス見学や内覧会に行きました。
そこで色々と玄関ドアをみたわけですが、何故か電気錠にはどのメーカーのものでも「屋内側にも解施錠ボタンが付いている」と思い込んだんですね。
そして更にネットでLIXIL玄関ドアの電気錠の仕様をみて何故か「YKK APの玄関ドアにもオートロック機能がある」と思い込んでいました。


しかし我が家に取り付けられた玄関ドアは屋外側には解施錠ボタンがついていましたが屋内側には解施錠ボタンが無く、オートロック機能も帰宅時に機能するものはありましたが外出時に機能するものはありませんでした。初めて気づいた時はボーゼン。。。
もう少し詳しく書くと、帰宅時に外側から解錠する時は「ポケットキーとかリモコンキー(を所持した状態でのドアノブについているボタン操作)でワンタッチ解錠可能」、帰宅時に内側から施錠する時は「上のサムターンを回せば下の鍵も施錠されるしオートロック機能も使える」、外出する時に内側から解錠する時は「サムターン2個を回す必要がある」、外出する時に外側から施錠する時は「ポケットキーとかリモコンキー(を所持した状態でのドアノブについているボタン操作)でワンタッチ施錠が可能だがオートロック機能は無い」という仕様になっていて、外出する時にはサムターンを2個回して解錠しなければならずオートロック機能はないということになります。
どうもYKK APさんは利便性よりも「締め出し(による対応増加や苦情の)防止」を優先していそうな感じです。お堅いですねぇ。
YKK-APの電子錠の仕様に関してはこの記事で書いています。
sympapa.hatenablog.com


前の家では後付けのQrio Lockを設置しオートロック機能を有効にしていたので家族がオートロックに慣れ切っており、新居に住み始めたら施錠し忘れる輩も。。。ちゃんと鍵をしめるようにと注意したところ、「なんとかしてくれ」と逆に指示を受けてしまいました(笑)


そんなワケで、YKK AP玄関ドアをJEM-A端子 - ESP32 - ESP HOME - Home Assistantと繋いでHome Assistantから電気錠を操作できるようにし、更にドアの屋内側に解錠ボタンを追加してオートロック機能を実現しちゃおうってのがこのシリーズになります。
LIXILの玄関ドア選んどけばこんな面倒なことせずに済んだのに~と思いながらもまぁ自分が悪いのだし、せっかくなのでDIYを楽しんでまいりましょう(笑)
今回はHome Assistantと接続するところまでを書いていきます。

■JEM-A端子とESP32の接続

Home Assistantとの連携はしたいので、電気錠とHome Assistantを接続する方法は家を建てようと決めた頃から調べていました。
どのメーカーも公式的には、電気錠をHEMSなどに接続するならIP/JEM-A変換アダプターを使ってEchonet Liteで接続してくれってことになっています。
しかしIP/JEM-A変換アダプターを後付けする人がほとんどいないのかググってもあまり情報が見つかりませんでした。でもIP/JEM-A変換アダプターは何も情報が無い中でお試しで買ってみるにはなかなか高価です。
ググっている中で、JEM-A端子は2値の単純な構成で動くこと、それをArdinoやESP32で操作している人が一定数存在することを知りました。
そうなると、JEM-A端子 - ESP32 - ESP HOME - Home Assistantと接続すれば簡単なんじゃね?ってことで過去に調べて回路の妄想までを記事にしていました。
sympapa.hatenablog.com



事前に調査して妄想した回路は上図のとおりですが、事前調査で不明だったのがC1-C2間の電圧です。M1-M2間も15Vと書いていましたが、あくまでもネットで見つけたLIXIL玄関ドアにおける情報でした。
新居の電気錠操作盤でテスターを使い実測したところ、C1-C2間、M1-M2間ともに約15Vであることが確認できました。
そしてせっかく実測したのに過去記事にグダグダと書いてある計算式が良くわからず、他の人の事例をみると1000Ωでやっている人が多く、C1-C2側もM1-M2側も安全をみて2000Ωで試してみたらちゃんと動いたので「大体でおーけー」ってことにして下図のとおりとしました(笑)


回路はハンダ付けが面倒なので構築してから3ヶ月以上経った今もブレッドボードのままです(汗)
電気錠操作盤が取り付けられているニッチの裏には収納があり、あらかじめ操作盤の裏あたりにケーブルを引き出すプレートを付けておいて貰ったので、ここからケーブルを通し収納の中に置いた回路(ESP32含む)と繋いでいます。


そしてESP32の電源は収納内に設けたコンセントから取っています。
ニッチにはタブレットGoogle Nest HUBなど電源が必要なものを置いているのでここから電源を供給しており、電源タップやアダプター類を収納するボックスを設置しているので、その中に今回の回路ユニットも収めました。

ESP HOMEの設定

ESP HOMEが何なのかというと、公式ページには「シンプルでありながら強力な構成ファイルによってESP8266 / ESP32を制御し、ホームオートメーションシステムを介してそれらをリモートで制御するシステムです。」と書かれています。
ESP8266/ESP32とセンサーなどを組み合わせてホームオートメーション用のデバイスを簡単に構成できます。ホームオートメーション用として大概思いつく組み合わせが網羅されていると思います。たぶん。
esphome.io


Pythonで動くプログラムですが、Home Assistantクラウドを運営している"NabuCasa"が開発しているだけあってHome Assistant用のアドオンが存在するので、私はこれを使っています。
esphome.io


ESP HOMEの使い方はこの記事で書いています。
sympapa.hatenablog.com


さて、今回の電気錠用のESP32の設定も、以前試していたとおりに動きました。HA端子(JEM-A端子)のC1-C2トリガーは200ms~300msで受け付けるようなので250msのモメンタリースイッチとしています。これでバッチリでした。
ESP HOMEの設定は以下のとおりです。

captive_portal:

switch:
  - platform: gpio
    pin: 32
    id: entrance_lock_toggle
    name: "entrance_lock_toggle"
    icon: "mdi:gate"
    on_turn_on:
    - delay: 250ms
    - switch.turn_off: entrance_lock_toggle

binary_sensor:
  - platform: gpio
    pin:
      number: 33
      mode: INPUT_PULLUP
      inverted: true
    filters:
      - delayed_on: 50ms
    name: 'entrance_lock_status'


設定を終えるとHome Assistantにはスイッチエンティティ"entrance_lock_toggle"とセンサーエンティティ"entrance_lock_status"が現れます。
"entrance_lock_toggle"をオンにすると250msの間ESP32がC1-C2間を短絡させて解施錠が行われ、現在の解施錠状態はM1-M2間の電流をESP32が検出して"entrance_lock_status"に反映されます。施錠=ONになります。
JEM-A端子による解施錠はあくまでもトグルであるため、解施錠状態をチェックした上で"entrance_lock_toggle"をオンにする必要があり、この点には注意が必要です。

■まとめ

これでHome Assistantから玄関ドアの電気錠を操作できるようになりました。
前の家で使っていた後付けのQrio LockもQOLを上げる素晴らしいガジェットでしたが、ドア内蔵の電気錠は動作がカッチリしていて安定感があるし、サーバーを介さないHome Assistantからのローカルでの操作は全くタイムラグを感じないほどレスポンスが良好です。


次回はドアの屋内側にボタンスイッチを取り付けて解錠できるようにし、オートロックの制御をするオートメーションを作成するところを書きたいと思います。
それでは。つづく

新居のスマート化: おひさまおつきさまハイブリッドエコキュートをHome Assistantで作る(2)

Sympapaです。

太陽光パネルで発電した電力の自家消費率向上策として、昼間に沸き上げする「おひさまエコキュート」が注目されています。
しかし、昼間に固定して沸き上げした場合、天気が悪い日は一部を買電して沸き上げするので夜間に沸き上げするよりお得になるのか結構ビミョーです。(ここらへんの詳しいことは前回の記事に書いています。)
このため我が家では普通の夜間に沸き上げするエコキュートをHome Assistantで制御して、太陽光での発電量がエコキュート以外の消費を差し引いても沸き上げするのに十分な日だけ昼間に沸き上げするようにしています。
名付けて「おひさまおつきさまハイブリッドエコキュート」(笑)です。


前回の記事では、「おひさまおつきさまハイブリッドエコキュート」の実現のための「エコキュートとHome Assistantの接続」と「発電量の予測」について書きました。
sympapa.hatenablog.com


今回は、「予想発電量に応じて昼に沸き上げしたり夜に沸き上げしたりを自動制御する」オートメーションの作成について書いていきます。

■余談: 新居に採用したお風呂とエコキュート

新居に採用したのはお風呂は工務店の標準仕様で、TOTOサザナのNタイプがベースなのにほぼワングレード上のSタイプの仕様という謎のカスタム仕様です。
流行りの「必要なモノはマグネットで付けりゃいい」仕様にするため、カウンターも鏡も取っ払い残したのはタオル掛けのみ、マグネットでくっつくTOWERシリーズで儲けている山崎実業の戦略にまんまとハマっています(笑)
一方、追加したのは、照明の変更とお年寄り仕様の手すりと、掃除がしやすいように開き戸にしたくらいです。
窓については不要論も多い中、我が家は昼間に入浴する人がいるので明り取りの小さいFIX窓を付けましたがお風呂の窓ってのはどうしても結露しますね。やはりお風呂に不要だと思います。

お掃除浴槽や床ワイパーなどのお掃除自動化アイテムは魅力的でしたがお高いので断念。いずれもEchonet Liteに非対応だったのも自分の背中を押せなかった理由です(笑)
それにしても、エコキュートは標準的に結構自動機能が充実しているのに浴槽の排水栓を自動にするオプションが無いのは不思議ですね。。。(お掃除浴槽を選べば自動排水栓になりますが。)
お湯張りの操作によって自動で排水栓が閉まってくれれば閉め忘れも防止できるし、リモコンやEchonet Liteでの遠隔お湯張りも安心して出来るようになるので、エコキュートのメーカーさんとシステムバスのメーカーさんで協力して規格作ってくれないかな。


エコキュート工務店標準の三菱SRT-B466U-PVで、リモコンを無線LAN対応のRMCB-F6SE-TにしてEchonet Liteに対応させています。

■オートメーションを組む前に必要なエンティティをみておく

前回の記事で書いたとおり、エコキュートとHome Assistantの接続にはカスタムインテグレーション: echonetlite_homeassistantを使用し、発電予想にはSolcast solarを使用してHome Assistantとの接続にはカスタムインテグレーション: ha-solcast-solarを使用しています。
「おひさまおつきさまハイブリッドエコキュート」に必要となるエンティティをみておきましょう。


〇Solcast solarのエンティティ
1) sensor.solcast_pv_forecast_forecast_tomorrow
明日の発電量予想です。1日の発電量予想が取得できます。


エコキュートのエンティティ
2) select.automatic_water_heating_setting
エコキュートの沸き上げ設定を選択するエンティティで、"auto","manual","stop"が選択できます。通常のエコキュートの設定は"auto"でリモコンに「おまかせ」が表示されている状態と同じで夜間に沸き上げをします。"stop"だとリモコンの表示は「長期停止」となり、"manual"だと「手動沸き上げ」(満タンボタンを押したのと同じ)となります。
「手動沸き上げ」に設定した場合は、昼間でも満タンになるまでは強制的に沸き上げをします。


3) measured_amount_of_water_remaining_in_tank
エコキュートのお湯の残量です。タンク容量が460Lなのに沸き上げして満タンになると700Lとかになるので「単位がリットルではない何かなのか?」と疑問でしたが、時間が経過するとお湯を使わなくても残量が減ってくるので推測できました。
基準としている温度がまだ判っていませんが、例えば基準温度が40℃だとして、タンクのお湯に水を混ぜて40℃のお湯が何リットル供給できるのかを示しているのだと思います。


4) Water heater status
沸き上げ中か否かのステータスです。


〇パワコンのモニタのエンティティ
5)sensor.measured_instantaneous_amount_of_electricity_generated
太陽光発電の瞬間発電電力です。

6)sensor.measured_instantaneous_amount_of_electric_energy
瞬間電力の出入りです。買電中はプラス、売電中(余剰電力がある時)はマイナスとなります。

■「おひさまおつきさまハイブリッドエコキュート」の制御をするためのオートメーション

「おひさまおつきさまハイブリッドエコキュート」にためにやっている制御は大きく下記の2つです。
・翌日の予想発電量が23kWhを超える場合は夜間の沸き上げを強制停止して翌日昼間に沸き上げする。
・翌日の予想発電量が23kWh未満の場合は深夜に沸き上げする。この場合、翌日昼間に余剰電力が1500Wを超えて来たら追加の沸き上げをし(買電電力が100Wを超えて来たらその沸き上げは停止する)、次の沸き上げ時の電力を抑制する。


それに加えて、万一制御のバグなどでお湯切れ事故を起こし家族のお風呂に支障を与えるとその後のスマートホーム人生の死活問題となるため、処理をシンプルにし、かつフェールセーフ的な仕組みも構築しています。
とはいえエコキュートの通信がWi-Fiなので、それが長時間絶たれると事故が起きるリスクがありますね。。。


以降、オートメーションについて書いていきますが、「翌日昼間に沸かす」と判断したフラグとして"input_boolean.ecocute_will_boil_on_daytime"、沸き上げ完了のフラグとして"input_boolean.ecocute_boiled"、補助沸き上げ中のフラグとして、"input_boolean.ecocute_assist_boiling"を事前に作成しています。


1.翌日の発電予想から夜中に沸かすか翌日昼間に沸かすかを決める
まずは、翌日の予想発電量から夜間に沸き上げするか翌日昼間に沸き上げするかを判断するオートメーションです。
19:59 翌日の予想発電量が23kWh以上なら昼間沸き上げフラグをONにし、エコキュートの沸上げモードを「強制停止」に設定する。23kWh未満の場合はエコキュートの沸上げモードを「自動」に設定する。
23:59 翌日の予想発電量が23kWh以上なら昼間沸き上げフラグをONにし、エコキュートの沸上げモードを「強制停止」に設定する。23kWh未満の場合は昼間沸き上げフラグをOFFにしエコキュートの沸上げモードを「自動」に設定する。(19:59とやっていることは同じだが、再度最新の予測で判断する)
尚、積雪を考慮するため、当日の発電量が0.7kWh未満であった場合は翌日の予想発電量が23kWh以上であっても昼間に沸き上げしないようにしています。屋根の積雪を判断できる良いセンサーがあるといいんですけどね。

alias: ecocute_will_boil_daytime
description: ""
trigger:
  - platform: time
    at: "19:59:50"
  - platform: time
    at: "23:59:50"
condition: []
action:
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.ecocute_boiled
    data: {}
  - choose:
      - conditions:
          - condition: and
            conditions:
              - condition: numeric_state
                entity_id: sensor.solcast_forecast_tomorrow
                above: 23
              - condition: numeric_state
                entity_id: sensor.solar_power_amount_of_energy_generated_today
                above: 0.7
        sequence:
          - service: input_boolean.turn_on
            target:
              entity_id: input_boolean.ecocute_will_boil_on_daytime
            data: {}
          - device_id: エコキュート
            domain: select
            entity_id: エコキュートのselect.automatic_water_heating_setting
            type: select_option
            option: Stop
      - conditions:
          - condition: not
            conditions:
              - condition: and
                conditions:
                  - condition: numeric_state
                    entity_id: sensor.solcast_forecast_tomorrow
                    above: 23
                  - condition: numeric_state
                    entity_id: sensor.solar_power_amount_of_energy_generated_today
                    above: 0.7
        sequence:
          - service: input_boolean.turn_off
            target:
              entity_id:
                - input_boolean.ecocute_will_boil_on_daytime
              device_id: []
              area_id: []
            data: {}
          - device_id: エコキュート
            domain: select
            entity_id: エコキュートのselect.automatic_water_heating_setting
            type: select_option
            option: Automatic
mode: single


2.昼間に沸かすと決定した場合の沸き上げスタート
次は昼間に沸上げすると決定した場合に昼間に沸き上げを開始するオートメーションです。この場合、発電量に関わらず沸き上げをしなければお湯切れ事故が起きるので、11:00には強制的に沸き上げを開始させるようにしています。
発電電力が2000Wを超えてきて昼間沸き上げフラグがONの場合、エコキュートの沸上げモードを"Manual"に設定する。
11:00になって昼間沸き上げフラグがONの場合、エコキュートの沸上げモードを"Manual"に設定する。
11:30になって昼間沸き上げフラグがONの場合、エコキュートの沸上げモードを"Manual"に設定する。(11:00にエラーが起きた場合のフェールセーフ)
実際にはお湯の残量が少ない状態のはずなので"Manual"じゃなくて"Auto"に設定しても良いのかもしれません。

alias: ecocute start boiling if decided boil to daytime
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - >-
        sensor.omron_solar_power_generation_measured_instantaneous_amount_of_electricity_generated
    for:
      hours: 0
      minutes: 10
      seconds: 0
    above: 2000
  - platform: time
    at: "11:00:00"
  - platform: time
    at: "11:30:00"
condition:
  - condition: state
    entity_id: input_boolean.ecocute_will_boil_on_daytime
    state: "on"
  - condition: state
    entity_id: select.ecocute_automatic_water_heating_setting
    state: Stop
action:
  - device_id: エコキュート
    domain: select
    entity_id: エコキュートのselect.automatic_water_heating_setting
    type: select_option
    option: Manual
mode: single


3.昼間に沸き上げする決定し昼間に沸き上げしている場合の沸き上げ停止
次は昼間に沸上げすると決定し昼間に沸き上げをしている場合、16:00になったら又はお湯の残量が700L以上になったらエコキュートの沸上げモードを"Auto"にするオートメーションです。
"Manual"のままだと”Auto”よりたくさん沸き上げる("Auto"の場合は最適量を学習して沸き上げる)ようなので、ある程度沸いたら”Auto”に切り替えてエコキュートに制御のバトンを渡していますがここは様子見中です。
あと、昼間に沸かすと決めた場合は強制停止状態となりますが、お湯切れ事故を防止するために残り残量が150L未満になったらエコキュートの沸上げモードを"Auto"にする処理も合わせてしています。

alias: ecocute_change_to_auto_by_remaining_water_or_time
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - sensor.ecocute_measured_amount_of_water_remaining_in_tank
    for:
      hours: 0
      minutes: 0
      seconds: 1
    above: 700
    id: full
  - platform: numeric_state
    entity_id:
      - sensor.ecocute_measured_amount_of_water_remaining_in_tank
    for:
      hours: 0
      minutes: 0
      seconds: 1
    below: 150
    id: empty
  - platform: time
    at: "16:00:00"
    id: evening
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - full
        sequence:
          - device_id: エコキュート
            domain: select
            entity_id: エコキュートのselect.automatic_water_heating_setting
            type: select_option
            option: Automatic
          - service: input_boolean.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.ecocute_assist_boiling
          - service: input_boolean.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.ecocute_boiled
      - conditions:
          - condition: trigger
            id:
              - empty
        sequence:
          - device_id: エコキュート
            domain: select
            entity_id: エコキュートのselect.automatic_water_heating_setting
            type: select_option
            option: Automatic
      - conditions:
          - condition: trigger
            id:
              - evening
        sequence:
          - device_id: エコキュート
            domain: select
            entity_id: エコキュートのselect.automatic_water_heating_setting
            type: select_option
            option: Automatic
          - service: input_boolean.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.ecocute_assist_boiling
mode: single


4.夜中に沸き上げた場合に昼間余剰電力が多い場合追加の補助沸き上げをする
次は夜中に沸き上げた場合にも、昼間に余剰電力が多い場合には補助的に追加沸き上げをするオートメーションです。
Nature Remo Eのブログからヒントを得ました。
nature.global
余剰電力が5分間1500W以上になったら、沸き上げモードを手動沸き上げに切り替え補助沸き上げをします。
その後、買電電力が5分間100W以上になったら、沸き上げモードを自動に切り替えて補助沸き上げをストップします。
補助沸き上げは、夜中に沸き上げをした場合にのみ機能し、かつ、タンク残量が700L未満で、時刻が15:30より前の場合のみ機能するようにしています。

alias: ecocute_assist_daytime
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - >-
        sensor.omron_solar_panel_metering_measured_instantaneous_amount_of_electric_energy
    id: "on"
    for:
      hours: 0
      minutes: 5
      seconds: 0
    below: -1500
  - platform: numeric_state
    entity_id:
      - >-
        sensor.omron_solar_panel_metering_measured_instantaneous_amount_of_electric_energy
    id: "off"
    for:
      hours: 0
      minutes: 5
      seconds: 0
    above: 100
condition:
  - condition: state
    entity_id: input_boolean.ecocute_will_boil_on_daytime
    state: "off"
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - "on"
          - condition: numeric_state
            entity_id: sensor.ecocute_measured_amount_of_water_remaining_in_tank
            below: 700
          - condition: time
            before: "15:30:00"
        sequence:
          - device_id:エコキュート
            domain: select
            entity_id: エコキュートのselect.automatic_water_heating_setting
            type: select_option
            option: Manual
          - service: input_boolean.turn_on
            target:
              entity_id: input_boolean.ecocute_assist_boiling
            data: {}
      - conditions:
          - condition: trigger
            id:
              - "off"
          - condition: state
            entity_id: input_boolean.ecocute_assist_boiling
            state: "on"
          - condition: state
            entity_id: input_boolean.ecocute_will_boil_on_daytime
            state: "off"
        sequence:
          - device_id: エコキュート
            domain: select
            entity_id: エコキュートのselect.automatic_water_heating_setting
            type: select_option
            option: Automatic
          - service: input_boolean.turn_off
            target:
              entity_id: input_boolean.ecocute_assist_boiling
            data: {}
mode: single

■まとめ

これで「おひさまおつきさまハイブリッドエコキュート」が完成しました。
昼に沸き上げすると判断する閾値なんかは、今後のSolcast solarの予測精度の向上とか、電気代などをみて調整していきたいと思います。
次はYKK AP玄関ドアの電気錠をHome Assistantと接続し、YPP AP電気錠の不満点を解消するシリーズを書きたいと思います。
それでは。

新居のスマート化: おひさまおつきさまハイブリッドエコキュートをHome Assistantで作る(1)

Sympapaです。


太陽光発電が良くも悪くも盛り上がっていますね。
我が新居でも、電気代の高騰と太陽光発電の盛り上がりに負けて4.8kWのパネルを設置しました。

そして最近は電気代の高騰だったり、余剰電力の固定価格買取(FIT)単価が年々安くなっていたり、太陽光パネルの設置から10年経って固定価格買取(FIT)期間が終了し売電単価が激減する方が増えて来たこともあって、発電した電気を「売電」するのではなく「自家消費」することに注目が集まってきています。
今後、蓄電池が普及し価格も下がって来るだろうと予想されていますが、現時点でそれより導入しやすい「自家消費策」としてここ数年で「おひさまエコキュート」なるものが登場しました。
もともとエコキュートは安い夜間電力を使って夜中にお湯を沸かしてしまい貯めておけばオトクって発想の給湯器ですが、太陽光パネルが載ってるなら昼間にお湯を沸かした方がオトクって発想のが「おひさまエコキュート」です。
昼間に沸き上げすることにより、沸き上げ時の気温が高いため沸き上げに必要な電力が抑制できるとか、夜にお風呂のお湯張りをする前提の場合は沸き上げ後お湯張りまでの気温の高さと時間の短縮によって放熱によるロスを抑制できるというメリットもあるそうです。
余談ですが、普通のエコキュートで昼間に沸き上げする方法をググると「エコキュートの時刻設定を昼夜逆転させる方法で対策している」という情報がたくさんヒットするので、昼間に沸き上げしたいニーズはかなりあるようです(笑)


と、ここまで受け売り的情報を書きましたが、太陽光発電の普及により昼間の電力が余っているため消費を昼間にシフトさせたいという電力会社の事情もありそうですので、ちょっと冷静に考えてみます。


まず、我が家の場合、2024年3月時点で存在する「政府の電気・ガス価格激変緩和対策事業」(要するに補助金)▲7円/kWhと燃料調整費及び再エネ賦課金を計算した電気の単価は、平日昼間で32円/kWh前後、週末昼間で26円/kWh前後、夜間で19円/kWh前後となっていて、FIT売電単価は16円/kWhです。夜間単価と売電単価の差は僅か3円/kWhしかありません。
エコキュートの沸き上げに1日10kWh使うとして30日で300kWh。300kWh×3円/kWh=900円。実はエコキュートの沸き上げを昼間に行い、その電力を100%太陽光発電で賄えたとしても(つまり最大で)900円/月しかお得になりません(汗
しかもそれは沸き上げに必要な電力を100%太陽光発電で賄えた場合の話であって、天気によっては一部を買電して賄うことになります。エコキュートを昼間に沸き上げ10kWh/日消費するとした場合、それに使用する電力比率の損益分岐点は発電電力:8.125kWh*となり、すなわち沸き上げ時に使用する電力が81.25%以上発電電力でなければ昼間に沸き上げすると損をし夜間に沸き上げた方が良いということになります。
(*計算 昼間に発電電力で沸き上げして得する金額: 夜間単価-売電単価=3円/kWh, 昼間に買電電力で沸き上げして損する金額: 平日昼間単価-夜間単価=13円/kWhで計算すると、8.125kWh×-3円/kWh + 1.725kWh×13円/kWh=0 )
つまり、沸き上げに必要な分の余剰電力が十分確保出来る日しか昼間に沸き上げしてもお得にならないのです。


まぁしかし補助金がいつまで続くのかはわからないので補助金▲7円/kWhが無くなった場合を計算すると、昼間に沸き上げしてお得になる金額は最大3000円/月となり、沸き上げに使用する電力比率の損益分岐点は発電電力:56.5%となります。
ここでもやっぱり、毎日固定して昼間に沸き上げした場合、天気の影響も受けてほとんどお得にならない気がします。


卒FIT後はどうでしょうか。補助金無しで売電単価が8円/kWhだとすると、昼間に沸き上げしてお得になる金額は最大5100円/月となり、沸き上げに使用する電力比率の損益分岐点は発電電力:43.33%となります。
ようやく、毎日固定して昼間に沸き上げした場合もお得になる感じがしてきたものの、それでも天気を考慮すると1000円~2000円/月がいいとこだと思いますがどうでしょう?


私も家を建てるにあたって「おひさまエコキュート」を採用しようかと悩みましたが、家を建てた工務店仕入れを得意としている三菱のエコキュートの場合「おひさまエコキュート(SRT-B466U-PV)」にすると標準のエコキュート(SRT-S466A)より機能がショボい上に数万円高くなる見積りが出てきました。更に、計算結果より「卒FITまでは昼間に固定で沸き上げすると下手すりゃ損する」という判断から、普通の夜間に沸かすエコキュートを導入しました。
そして無線LAN対応リモコン(RMCB-F6SE-T)を導入してEchonet Lite対応にし、確実にエコキュートの消費電力分の余剰電力が確保できそうな日だけ昼間に沸き上げすれば一番お得と判断しました。
まぁそうしたとしても現状では効果が微々たるモンなのでアホくさい気もしますが、補助金が無くなった時、電気代が上がった時、更に太陽光発電の普及により昼間の電力が余り夜間電力単価と日中電力単価の差が縮まった時や出力制御(世の電力が余っている場合に出力制御されて発電した電力を売電できなくなる)が増えて来た時にはその効果は大きくなってきますし、何より浪漫がある(笑)のでHome Assistantから以下のようなエコキュートの制御をしています。
名付けて「おひさまおつきさまハイブリッドエコキュート」です(笑)
・翌日の予想発電量が23kWhを超える場合は夜間の沸き上げを強制停止して翌日昼間に沸き上げする。
・翌日の予想発電量が23kWh未満の場合は夜間に沸き上げする。この場合、翌日昼間に余剰電力が1.5kWを超えて来たら追加の沸き上げをし(買電電力が0.1kWを超えて来たらその沸き上げは停止する)、次の沸き上げ時の電力を抑制する。


このシリーズでは、この「おひさまおつきさまハイブリッドエコキュート」について2回に分けて書きたいと思います。
今回は「エコキュートとHome Assistantの接続」と「発電量の予測」について書いていきます。

エコキュートの接続

エコキュートとHome Assistantの接続にはカスタムインテグレーション: echonetlite_homeassistantを使用させていただいています。
echonetlite_homeassistantはHome AssistantとEchonet Lite対応デバイスを接続できる(たぶん)唯一のインテグレーションです。
数ヶ月前にはエコキュートはサポートしていなかったのですが、githubのissueにコメントしたのをきっかけにサポートしていただきました。ありがとうございます(^^)
インストールはHACSで”Echonet”で検索すれば出来ます。
github.com


エコキュートを接続すると、以下のような31個のエンティティが現れます。


制御系はこんな感じになっています。


今回の「おひさまおつきさまハイブリッドエコキュート」に必要なのは、沸き上げを制御する"Automatic water heating setting"、お湯の残量である"measured_amount_of_water_remaining_in_tank", 沸き上げ中か否かのステータスである"Water heater status"で、他に必要なのは太陽光パネル側のステータスになってきます。
沸き上げを制御する"Automatic water heating setting"では”Auto”,”Manual”,”Stop”が選択でき、”Auto”はエコキュートのリモコン表示でいう「おまかせ」、”Manual”は「満タン」ボタンを押したのと同じで、”Stop”ではリモコンに「長期停止」と表示されます。


他にも、累積消費電量である"measured_cumulative_power_consumption"も使いそうですし、外出先から遠隔でお風呂のお湯張りをしたり(まぁこれは浴槽を掃除して栓がしてあることが前提ですが)とか色々できそうですね(^^)

■発電量の予測

「おひさまおつきさまハイブリッドエコキュート」を実現するためには翌日十分に発電すると予想される場合に夜間の沸き上げを停めなくてはいけないため、翌日の発電量を事前に予想することが必要になります。
ざっくりならば天気予報で良い気もしますが、世の中には、家の場所やパネルのスペック・方位・角度などを設定すると発電量を予測してくれるサービスがあります。そしてHome AssistantにはそのサービスのAPIを使って予想をエンティティとして取り込めるカスタムインテグレーションがあります。


私が利用しているのはSolcast solarというサービスです。機能制限はありますが無料アカウントで今回の目的は果たせます。
solcast.com


そして、Solcast solarとHome Assistantの接続には、こちらのカスタムインテグレーションを使用しています。
github.com


[手順]
1) まず最初にSolcast solarのアカウントを作ります。無料アカウントで問題ありません。
2) Solcast solarで家の場所、パネル容量、方位、角度、力率係数を設定します。パネルが2カ所以上に設置されている場合の設定も出来ますがそれはちょっとややこしそうです。
3) Home Assistantに"ha-solcast-solar"をインストールしHome Assistantを再起動します。(Solcast SolarはHACSで"solcast"で検索するだけでインストール出来るのでその方法は割愛します。)
4) [設定]>[デバイスとサービス]>[統合]と進んで、[統合を追加]を押します。
5) "solcast"で検索して、Solcast PV Forecastを選ぶと、APIキーの入力を要求されます。
6) Solcast solarのページへログインし、右上のアカウント名をクリックするとメニューが表示されるので”Your API key"を選びます。
7) APIキーをコピーして、5)でAPIキーを要求されたところへ貼り付けます。


これで設定は完了です。
以下のようなエンティティが現れますが、多くの場合は「明日の予測」「今日の予測」くらいしか使わないかなと思います。
我が家における「明日の予測」を見ている限り、予測が20kWh未満の時は数値の信頼性は低そうです。
特に予測値が10kWh未満では実績が予測値の20%くらい~予測値の間でバラツキ、予測値が10kWh~20kWhでも予測値の40%くらい~予測値までばらつきます。
一方、予測が20kWhを超えて来ると、予測値の70%~予測値くらいのバラツキに収まってそうです。
なので、しばらく予測値と実績を比較した上で、オートメーションなどに利用する必要があるかなと思います。


■まとめ

今回は「おひさまおつきさまハイブリッドエコキュート」をHome Assistantを使って実現するための「エコキュートの接続」及び「太陽光発電量の予測」について書きました。
ってか前置きの方が長くなりましたが(笑)
次回は、これらを使ってエコキュートを自動制御するオートメーションの作成について書いていきたいと思います。
それでは。つづく

新居のスマート化: 太陽光システムをHome Assistantに接続して電気代を自動計算する(2)

Sympapaです。

前回に引き続き、「太陽光システムをHome Assistantに接続して電気代を自動計算する」シリーズです。
sympapa.hatenablog.com


新居には4.8kWのソーラーパネルを載せました。
パワーコンディショナーはOmron製でEchonet Liteに対応しているので、これを使ってHome Assistantと接続しています。
発電量、売電量、買電量、瞬間発電電力、瞬間使用電力などが取得できます。
これを活用したスマートホーム化のゴールは「電気代の見える化」と「太陽光パネルを導入したことが本当にお得だったのかを自動的に判るようにすること」、そして「発電状況によってエコキュートやエアコンを自動制御する」ことです。


このシリーズでは「電気代の見える化」と「太陽光パネルの導入したことが本当にお得だったのかを自動的に判るようにすること」について書いています。
前回はHome Assistantを使って「夜間(20時~8時)」「週末昼間」「夏季の平日昼間」「夏季以外の平日昼間」の単価別に「買電量」と「消費量」をカウントするところまでを書きました。
今回は「電気料金」と「太陽光パネルがなかった場合の電気料金」の自動計算について書いていきます。

■おさらい:当月の電気の消費量や発電量をカウントする

我が家で契約している電気料金プランの場合、「夜間(20時~8時)」「週末昼間」「夏季の平日昼間」「夏季以外の平日昼間」で単価が異なります。
なので「電気代」と「太陽光パネルがなかった場合の電気料金」が無かった場合の電気代」を計算するには、当月の「消費量」と当月の「買電量」を単価別にカウントしなくてはいけません。
Home Assistantのユーティリティメーターを使って、単価別に「消費量」と「買電量」をカウントできるようにしたのが前回のお話です。


以下のユーティリティメーターを作成しました。


今月の単価別買電量をカウントするユーティリティメーター

select.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff
sensor.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff_night
sensor.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff_weekend
sensor.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff_summer
sensor.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff_other_seasons


今月の単価別消費量をカウントするユーティリティメーター

select.cumulative_electricity_consumption_this_month_separeted_by_tariff
sensor.cumulative_electricity_consumption_this_month_separeted_by_tariff_night
sensor.cumulative_electricity_consumption_this_month_separeted_by_tariff_weekend
sensor.cumulative_electricity_consumption_this_month_separeted_by_tariff_summer
sensor.cumulative_electricity_consumption_this_month_separeted_by_tariff_other_seasons


その他、以下のユーティリティメーターも作成しました。

今月の買電量: sensor.electric_energy_bought_this_month
今月の売電量: sensor.electric_energy_sold_this_month
今月の発電量: sensor.solar_power_amount_of_energy_generated_this_month

■単価を入力する数値入力エンティティを作る

単価を入力するinput.numberエンティティを作成します。
用意するのは、「夜間(20時~8時)」「週末昼間」「夏季の平日昼間」「夏季以外の平日昼間」の他、「売電単価」「燃料費調整額」「再エネ賦課金」「基本料金」の計8個です。
数値入力エンティティは以下のように作成できます。
1) [設定]>[デバイスとサービス]>[ヘルパー]と進みます。
2) [ヘルパーを作成]を押し「数]を選択します。
3) 名前を付けます。
4) その他必要に応じて設定します。
ここで作成したエンティティをダッシュボードに並べ、長押しすると単価を入力できるように設定してやりました。その月の単価を入力してやれば計算に反映されるようにしています。

作成した数値入力エンティティ

input_number.electricity_unit_price_for_night
input_number.electricity_unit_price_for_weekend
input_number.electricity_unit_price_for_daytime_in_other_seasons
input_number.electricity_unit_price_for_daytime_in_summer
input_number.current_electric_sell_unit_price
input_number.current_fuel_cost_adjustment_amount
input_number.current_renewable_energy_charge_unit_price
input_number.current_electricity_bills_basic_monthly_fee

■電気代を計算するテンプレートセンサーを作る

ここまで来れば、あとはテンプレートセンサーで計算式を作って計算させるだけです。
一気に全てを計算しても良いのですがテンプレートエディターが1行しか見えず、長くなると全体を見るのにかなりスクロールさせなければいけないので間違いやすくなるため、第1ステップで[Cost1=夜間買電量×夜間単価+週末昼間買電量*週末昼間単価+夏季昼間買電量*夏季昼間単価+夏季以外昼間買電量*夏季以外昼間単価]を計算し、第2ステップで[Cost2=Cost1+買電量*(燃料費調整額+再エネ賦課金)+基本料金]の計算をしています。
同様に、消費量に対しても同じ計算をしてやれば、それが「太陽光パネルがなかった場合の電気代」ということになります。
あと、「売電金額」のテンプレートセンサーも作成してやります。
テンプレートセンサーの作り方は前回の記事に書いています。

・第1ステップ:
entity id: energy_cost_caliculated_this_month

{{ states( "sensor.electric_energy_bought_this_month_night") | float * states("input_number.electricity_unit_price_for_night") |float + states("sensor.electric_energy_bought_this_month_weekend") | float * states("input_number.electricity_unit_price_for_weekend") | float + states("sensor.electric_energy_bought_this_month_other_seasons") | float * states("input_number.electricity_unit_price_for_daytime_in_other_seasons") | float + states("sensor.electric_energy_bought_this_month_summer") | float * states("input_number.electricity_unit_price_for_daytime_in_summer") | float}}


・第2ステップ:
entity id: energy_cost_various_costs_calculated_this_month

{{ states("sensor.energy_cost_caliculated_this_month") |float + states("sensor.electric_energy_bought_this_month") | float * (states("input_number.current_fuel_cost_adjustment_amount") | float + states("input_number.current_renewable_energy_charge_unit_price") | float ) + states("input_number.current_electricity_bills_basic_monthly_fee") | float }}

太陽光パネルでどれだけお得になっているかを計算する

単純に[消費量に対する電気代 - 買電量に対する電気代 + 売電金額]を計算するテンプレートセンサーを作成しました。

■電気関係のダッシュボード

こんな感じのダッシュボードを作ってリモコンニッチに設置してあるタブレットに表示できるようにしています。

■まとめ

これで、「電気代」と「太陽光パネルがなかった場合の電気代」、「太陽光パネルでお得になった金額」が判るようになりました。
送電会社の情報はあくまでも買電と売電に関するものだけのため太陽光パネルが無かった場合の電気代を知ることが出来ないので、これで太陽光パネルのコスト効果を実績として知ることが出来ます。
来月くらいからは「毎月の太陽光お得金額」の記事を書いていこうと思います。
最終目標はスプレッドシートに月単位で自動保存していくことですが、まぁ月が変わってからでも履歴を見れば確認出来るので、手動で拾ってエクセルやブログに記録していけば目的は果たせるかなと。


次は「エコキュートの自動制御(疑似おひさまエコキュート)シリーズ」を書こうと思います。


それでは。

新居のスマート化: 太陽光システムをHome Assistantに接続して電気代を自動計算する(1)

Sympapaです。


新居には4.8kWのソーラーパネルを載せました。
パワーコンディショナーはOmron製でEchonet Liteに対応しているので、これを使ってHome Assistantと接続しています。
発電量、売電量、買電量、瞬間発電電力、瞬間使用電力などが取得できます。
これを活用したスマートホーム化のゴールは「電気代の見える化」と「太陽光パネルを導入したことが本当にお得だったのかを自動的に判るようにすること」、そして「発電状況によってエコキュートやエアコンを自動制御する」ことです。


このシリーズでは「電気代の見える化」と「太陽光パネルの導入したことが本当にお得だったのかを自動的に判るようにすること」について書いていきたいと思います。

電気の単価は時間帯や曜日で異なるので、買電量や消費量を単価別にカウントしなくてはいけません。
今回はHome Assistantに接続し、買電量や消費量を単価別にカウントするところまでを書いていきます。

■Home AssistantとEchonet Liteを繋ぐためのインテグレーション

2024年3月現在、自力でプログラムを作成する以外でHome AssistantとEchonet Liteを接続する方法は以下の2つかなと思います。
Econet Liteは日本のガラパゴス規格でかつHome Assistantが日本であまり普及していないせいか、Home AssistantとEchonet Liteの接続手段を開発しようという人が少ないようですが、そんな中で開発いただいている方がいらっしゃるのは大変ありがたいです。


1)カスタムインテグレーション: echonetlite_homeassistantを使う
Home AssistantにEconet Liteを接続するインテグレーションとしては唯一の存在じゃないかと思います。
簡単にHome Assistantへデバイスを追加出来、操作や取得値も"Entity"として追加されるので、私のような素人にはありがたい存在です。
github.com


2)EchonetLite2mqttを使う
MQTTを介してEchonet Liteと通信する、Echonet Liteからの通信をMQTTにPublishし、MQTTからの命令をECHONET Lite側に送るしくみのプログラムです。
私のような素人にはとっつきにくい反面、対応しているデバイスが多く、Home Assitant以外でもMQTTが使える環境(Apple HomeKit + Home bridgeやNode-REDなど)で使える点はメリットだと思います。
qiita.com

太陽光発電システムを接続する

我が家には4.8kWの太陽光パネルを載せました。
採用したパワーコンディショナーはOmronのKPW-Aで計測ユニットはKP-MU1P-SET(配電盤と接続する計測ユニットと液晶モニタのセット)です。
最初、"echonetlite_homeassistant"でも”EchonetLite2mqtt”でもKP-MU1PをEchonet liteデバイスとして発見できず、KP-MU1Pの取扱説明書を良く読んでもEchonet Liteに関わる項目は「接続されているEchonet Lite機器台数の表示」しかなかったので1ヶ月以上悩んでいましたが、「施工・保守マニュアル」の方でEchonet Liteを有効化する方法が書かれているのをみつけました。
なんと隠しコマンドでメンテナンスメニューを表示させるとその中にEchonet Liteを有効化するメニューがあるという。こりゃわからんわOmronさん。
Omronのパワコンを導入していて後からHEMSを導入する場合は多くの方が悩むんじゃないでしょうか。。。


有効化したところ"echonetlite_homeassistant"でも"EchonetLite2mqtt"でも接続できました。
今回は"echonetlite_homeassistant"を使って先に進めていきたいと思います。
発電に関わる"Home solar power generation"と買電売電に関わる"Distribution panel metering”の2つのデバイスが現れます。
エンティティは、発電量, 売電量, 買電量, 瞬間発電電力, 瞬間使用電力 など。
他にもいくつかありますが、使うのはこの5つでしょう。

■当月の電気の使用量や発電量をカウントする

「電気代の見える化」と「太陽光パネルの導入したことが本当にお得だったのかを自動的に判るようにすること」がこのシリーズのゴールなので、電気代を自動計算しなくてはいけません。
我が家の契約している電気料金プランでは、時間帯や曜日、季節によって「夜間(20時~8時)」「週末昼間」「夏季の平日昼間」「夏季以外の平日昼間」の4つの単価が存在します。
なので、それぞれの日時帯毎に「買電量」と「消費量」をカウントする必要があります。
Home Assistantにはエネルギーのカウントなどに便利に使える"Utility Meter"があって、これを使うと月毎の累積や単価別のカウントなどが簡単に出来ます。
簡単にできるのですが。。。最初に単価別のカウントを使用した時はさっぱりワケが判らなかったので、ここでは買電量のカウンターを作る例を書いておきます。
www.home-assistant.io


[手順]
1) [設定]>[デバイスとサービス]>[ヘルパー]と進みます。
2) [ヘルパーを作成]を押し「ユーティリティーメーター」を選択します。
3) 名前を付けます。ここでは"sensor.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff"としておきます。
4) 入力エンティティを指定します。ここではOmronのモニターで測定している外から入って来た電気量=買電量である"measured_cumulative_amount_of_electric_energy_normal_direction"を指定します。
5) メーターリセットのサイクルを設定します。ここでは「月間」を選びます。もちろんリセットせずにずっと累積させることも可能です。
5) サポートされている料金に単価毎の名前を設定します。ここでは我が家が契約している電気料金プランの4つの単価に合わせて"night","weekend","summer","other_seasons"を設定してやります。ここを設定しなければ、1つの単純なユーティリティメーター-が作成できます。
6) 送信を押します。
7) Home Assistantを再起動します。(理由は後述します)


すると、以下の1つの選択エンティティと4つのユーティリティメーターエンティティが作られます。

select.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff
sensor.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff_night
sensor.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff_weekend
sensor.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff_summer
sensor.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff_other_seasons


選択エンティティでは"night","weekend","summer","other_seasons"が選択でき、これを切り替えると選んだユーティリティメーターに買電量がカウントされます。
※バグなのか、ユーティリティメーターを作成後にHome Assistantを再起動しないと、選択エンティティを切り替えてもカウントするユーティリティメーターがうまく切り替わらなかったり、2つのユーティリティメーターで重複してカウントされることがあるので再起動することをお勧めします。


次に、電気代の計算だけであれば買電量をカウントすればOKなのですが、「太陽光パネルの導入したことが本当にお得だったのかを自動的に判るようにする」には「買電量」だけではなく「消費量」のカウントも必要です。
「消費量」はパワコンのモニターから直接取得できない(そのエンティティは無い)ので、まず「今月の買電量」「今月の売電量」「今月の発電量」のユーティリティメーターを作成し(ここは割愛)、テンプレートセンサーを使って「今月の消費量」を[今月の買電量+今月の発電量-今月の売電量]で計算するようにしています。


このテンプレートセンサーの作り方は以下のとおりです。
1) [設定]>[デバイスとサービス]>[ヘルパー]と進みます。
2) [ヘルパーを作成]を押し「テンプレート」を選び、[センサーのテンプレート]を選択します。
3) 名前を付けます。今回は"cumulative_electricity_consumption_this_month"としておきます。
4) [今月の買電量+今月の発電量-今月の売電量]のテンプレートを設定します。

{{ states("sensor.electric_energy_bought_this_month") |float - states("sensor.electric_energy_sold_this_month") | float + states("sensor.solar_power_amount_of_energy_generated_this_month") | float}}


その後、「単価別消費量」のユーティリティメーターを作成し、単価別に振り分けできるようにすればOKです。

select.cumulative_electricity_consumption_this_month_separeted_by_tariff
sensor.cumulative_electricity_consumption_this_month_separeted_by_tariff_night
sensor.cumulative_electricity_consumption_this_month_separeted_by_tariff_weekend
sensor.cumulative_electricity_consumption_this_month_separeted_by_tariff_summer
sensor.cumulative_electricity_consumption_this_month_separeted_by_tariff_other_seasons


次は単価選択の自動化です。
毎日8時と20時になったら、曜日と月をチェックして、"select.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff"と”select.cumulative_electricity_consumption_this_month_separeted_by_tariffの"night","weekend","summer","other_seasons"を自動で切り替えます。

alias: chenge_current_electric_unit_price
description: ""
trigger:
  - platform: time
    at: "08:00:00"
    id: 8_oclock
  - platform: time
    at: "20:00:00"
    id: 20_oclock
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - 20_oclock
        sequence:
          - service: select.select_option
            data:
              option: night
            target:
              entity_id:
                - select.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff
                - select.select.cumulative_electricity_consumption_this_month_separeted_by_tariff
      - conditions:
          - condition: time
            weekday:
              - sun
              - sat
            after: "00:00:00"
            before: "00:00:00"
          - condition: trigger
            id:
              - 8_oclock
        sequence:
          - service: select.select_option
            data:
              option: weekend
            target:
              entity_id:
                - select.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff
                - select.select.cumulative_electricity_consumption_this_month_separeted_by_tariff
      - conditions:
          - condition: trigger
            id:
              - 8_oclock
          - condition: time
            weekday:
              - mon
              - tue
              - wed
              - thu
              - fri
            after: "00:00:00"
            before: "00:00:00"
          - condition: template
            value_template: |-
              {% set month = now().strftime('%m') %}
              {{  month >= '7' and month <= '9' }}
        sequence:
          - service: select.select_option
            data:
              option: summer
            target:
              entity_id:
                - select.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff
                - select.select.cumulative_electricity_consumption_this_month_separeted_by_tariff
      - conditions:
          - condition: trigger
            id:
              - 8_oclock
          - condition: time
            weekday:
              - mon
              - tue
              - wed
              - thu
              - fri
            after: "00:00:00"
            before: "00:00:00"
          - condition: template
            value_template: |-
              {% set month = now().strftime('%m') %}
              {{  month <= '6' or month >= '10' }}
        sequence:
          - service: select.select_option
            data:
              option: other_seasons
            target:
              entity_id:
                - select.cumulative_amount_of_electric_energy_normal_direction_this_month_separeted_by_tariff
                - select.select.cumulative_electricity_consumption_this_month_separeted_by_tariff
mode: single

■まとめ

途中細かい点は端折りましたが、下の画像のエンティティを作成し、単価区分別に「当月の買電量」と「当月の消費量」をカウントできるようになりました。

次回は「今月の電気代」と「太陽光パネルが無かった場合の今月の電気代」の計算について書きたいと思います。

それでは。つづく。

新居でHome Assistantを使ってスマートホーム化していること

Sympapaです。

新居へ引っ越して3ヶ月くらい経ちました。
スマートホーム化はHome AssistantによるDIY(と言えるのかはしらんけど)でやっていて、引っ越し後の物理的な環境構築でバタバタしていたのでスマートホームの環境構築の方はボチボチでしたが、漸くやりたかったことの8割は構築が完了した感じです。
そんなワケで今回は、新居においてHome Assistantを使ってスマートホーム化していること、これからしたいことをざざっと書いていこうと思います。

■やっていること

●Home Assistantのダッシュボード設置

リモコンニッチに10インチタブレットを設置してHome Assistantのダッシュボードにし、照明のシーン切替や様々の家のステータス表示をしています。
ニッチには磁石がくっつくクロスの下地を入れてあるので、タブレットは磁石でくっつけあります。
また、ニッチの裏には収納があって、ニッチの目立たない場所に収納へ配線を通すための貫通穴を設けてあり、タブレットGoogle Homeの電源は収納内に設置したコンセントから取っています。


●居室以外の照明の自動化

スマートホーム化の代表格(?)と言えば照明の自動化ではないでしょうか?
我が家では居室以外の全て・・・玄関ホール、シューズクローク、廊下、ウォークインクローゼット、トイレ、洗面所の照明を自動化しています。
このあたりの照明は全てZigbbe接続やWi-Fi接続のスマート電球かスマートシーリングライトで全てHome Assistantと接続しています。
電球タイプのダウンライトは絶滅危惧種となっていますが、E26電球が使用できる断熱材対応のダウンライトの在庫をみつけて採用しました。
工夫した点や苦労している点を少し書いておこうと思います。

・玄関と玄関ホール

玄関と玄関ホールの照明は赤外線人感センサーとミリ波レーダーを使った人存在センサーを組み合わせて自動化しています。赤外線人感センサーだけだと、来客時に玄関で立ち話をしている間に照明が消えてしまう場合があるので、ミリ波レーダーを使った人存在センサーを併用することにしました。
使用しているミリ波レーダーを使った人存在センサーは"Loginovo Zigbee 3.0人体存在センサー ZY-M100-S"です。

・トイレ

トイレの照明は赤外線センサーで自動化するとウ〇チの際に消えるというスーパーなどのトイレで良くあるアレが起きるので、赤外線人感センサー+ミリ波レーダーを使った人存在センサー+ドア開閉センサーを組み合わせてかなり凝った(超面倒くさい)ロジックで自動化しています。ってか、もともと前の家で赤外線人感センサー+ドア開閉センサーのみで自動化していた時にウン〇の時に照明が消えないロジックを作った名残でややこしいままなんですが、ミリ波レーダーを使った人存在センサーでは単純化できるはずです。

・廊下

廊下には途中に収納があるのですが、最初、廊下の両端にだけ赤外線人感センサーを設置したところ、収納をゴソゴソと漁っている時に照明が消えてしまう問題が起きました。
なので収納の中にも赤外線人感センサーを設置しました。
照明を自動で点灯させる際に時間帯によって照明の明るさを自動で変えていて夜中などは暗くしているのですが、収納の中の人感センサーが人感を検出した時には最大照度にするようにしています。

・洗面所

洗面所の照明は自動化すべきか結構悩ましいところです。
我が家の洗面所には洗面台とドラム式洗濯乾燥機と物干しがあります。
最初、赤外線人感センサーを4つ設置して自動化したのですが、洗面台の前で歯を磨いたりしている時にあまり動きが無いと照明が消えてしまうという問題が起きました。
そこでミリ波レーダーを使った人存在センサーによる自動化に変更したのですが、洗濯機の稼働中にミリ波レーダーを使った人存在センサーが検出状態になってしまい照明が消えない問題が発生しました。
現在は、ミリ波レーダーを使った人存在センサーは位置と方向を調整して洗面台付近だけを担当させ、洗面台付近以外のエリア4個の赤外線人感センサーに担当させています。
しかしそれでも、物干しに洗濯物をたくさんかけてサーキュレーターをブン回して乾燥させると洗濯物が暴れてミリ波レーダーが検出状態になって照明が消えない場合があることが最近発覚したのと、洗濯機周りは赤外線人感センサーが担当しているのですがドラムの槽の掃除をしている時に照明が消えてしまったと最近奥様から苦情を受けました。
手動にするか。。。隣にあるウォークインクローゼットと洗面所は結構行き来するので自動が便利ではあるんですよね。

LDKの照明

LDKには2カ所の出入り口があって、ひとつは玄関ホールからリビング付近への出入り口、もうひとつは廊下からキッチン付近への出入り口です。
照明はキッチンの上にあるダウンライトを除き、Home Assistantと接続したスマート電球です。
キッチンの上にあるダウンライトは掃除しやすいようフツーのLED一体型にしたので、Sonoffの壁スイッチに内臓するタイプのスマートスイッチ"ZBMINI L2 Extreme"を使ってスマート化しました。
居室の照明は手動が良いと思うのでLDKの照明は基本的に自動ではなく手動でオンオフするよう構築しており、以下のようなことをやっています。

  • リビング側とキッチン側の2箇所の出入り口にはPhilips HueのDimmerスイッチを取り付けて照明のオンオフを出来るようにしています。リビング側ではリビングの照明を、キッチン側ではキッチンの照明のオンオフとシーン選択が出来ますが、オフボタンを長押しすることによってLDK全体の照明をオフできるようにしています。
  • 照明をオンにした時に、時間帯によって照明のシーンを自動選択して照度や色温度を変えるようにしています。
  • ダッシュボード及びSONY"HUIS"という学習リモコン(廃番)から照明のシーンを変更できるようにしています。
  • LDKは通路を兼ねていて夜中にトイレに行く時なども通ることがあるので、LDKの照明がオフの時にLDKに入るとダウンライトが1つだけ自動で点灯するようにしています。(赤外線人感センサーを設置)
  • LDKにある収納のドアを開けると収納を照らすスポット照明が点灯し、ドアを閉めると消灯するようにしています。

●電気錠

玄関ドアはYKK APのヴェナートD30で電気錠は100Vタイプ、ニッチに操作盤YSKAG B3を設置しています。
前述のとおりニッチの裏側には収納があり、電気錠操作盤の裏あたりの収納の壁に配線用の穴を仕込んであるので、そこにケーブルを通して操作盤のHA端子(JEM-A端子)と収納の中に設置したESP32とを接続し、ESP Homeを使ってHome Assistantと電気錠を接続しています。
LIXILの玄関ドアには屋内側にボタンがあって鍵の操作が出来るし出かける時に機能するオートロックが使えるのですが、YKK APの電気錠は屋内側にボタンが無く解錠するにはサムターンを2つ回す必要があり、外出する時に機能するオートロック機能もありません。入居するまでYKK APLIXILと同じだろうと思い込んでいたのでショックでした(笑)
ってか前の家でQrio Lockを使っていて家族がオートロックに慣れているのでなんとかしろと要求があり。。。
そこで、後付け感はありますがドアにボタンスイッチを貼り付けて、ボタンによる解錠とオートロックをHome Assistantを使って実現しています。
スイッチにはこのタクトスイッチを使いZigbee接続のドア開閉センサーのリードスイッチを外してスイッチを繋ぐことで、スイッチをHome Assistantと接続しています。
まぁ後付け感はなんとかしたいですけど普段見る角度ではさほど後付け感もなく、利便性が勝ってるのでまぁいいか。。。

●窓の鍵の施錠状態検出

窓の施錠状態はダッシュボードに表示し、かつ、どこかの窓が解錠された状態で玄関へ行くと(玄関の人感センサーが反応すると)Goole Nest miniが「窓の鍵が開いています」と喋って警告してくれるようにしています。
どちらかというと防犯用というよりは鍵を閉め忘れて出かけてしまうことの防止用ですね。
施錠状態はZigbee接続のドア開閉スイッチを使って取得しています。
引き違い窓のクレセント錠の方はセンサーを違和感なく取り付けできていますが、横滑り窓の方はちょっと強引(汗)



●空調および温湿度とCO2の測定

エアコンは普通の壁掛けエアコンで各部屋エアコンを採用していますが、全て無線LAN対応のものか無線LANアダプタを取り付けました。
Home Assistantにはカスタムインテグレーション"echonetlite_Homeassisant"を使用して接続しています。
あと、各所にZigbee接続の温湿度計や、ESP32+CO2濃度計(MHZ-19C)を設置してESP HOMEを使ってHome Assistantと接続し、温湿度とCO2濃度をモニタしています。
イマドキの家は気密が高いので換気は大事だし、CO2がモニタできるのは換気がうまく機能しているのかがわかってなかなか良きです。
ちなみに安価な温湿度センサーは湿度の精度がよろしくない場合がありますが、こちらの記事Zigbee接続温湿度計の精度比較をしており、コスパに優れる"IHK-009"を使用しています。

太陽光発電と電気代

採用した太陽光発電のパワコンはオムロン製でEchonet Liteに対応しており"echonetlite_Homeassisant"を使用してHome Assistantに接続しています。
発電量、買電量、売電量や瞬間発電電力、瞬間使用電力などが取得できます。
太陽光発電は本当にお得な投資なのかを検証するために(?)、電気代と売電金額の自動計算および、太陽光パネルが無かった場合の電気代の自動計算をして、太陽光パネルでお得になった額なども表示するようにしています。
まだテスト中ですが、来月くらいからは「太陽光パネルは本当にお得か?」って記事を書くと思います(笑)

エコキュート

最近その界隈(?)で話題になっているのが「おひさまエコキュート」です。
オール電化の家庭の場合、電気消費量の30%はエコキュートだと言われています。もともとエコキュートは安い夜間電力を使って夜中にお湯を沸かしてしまい貯めておけばオトクって発想の給湯器ですが、昨今は夜間電力料金もさほど安いわけではなく(我が家の場合現時点27円/kWhくらい)、また太陽光発電の余剰電力を売電しても16円/kWhくらいにしかならないので、太陽光パネルが載ってるなら昼間にお湯を沸かした方がオトクって発想のが「おひさまエコキュート」です。
私も新居に太陽光パネルを載せたので「おひさまエコキュート」を採用しようかと悩みましたが、私の住んでいるところはあまりお天気がよろしくなく冬は屋根に雪が積もる場合もあるので昼間に沸かさない方が良いと思われる日が結構多いのと、家を建てた工務店仕入れを得意としている三菱のエコキュートの場合「おひさまエコキュート」だと機能がショボくて割高になるので、やっぱり深夜にお湯を沸かすタイプの普通のエコキュートを採用してHome Assistantで制御することにしました。Echonet Liteに対応させるため無線LAN対応リモコンを導入しています。
そんなワケで、翌日の予想発電量が25kWhを超える場合は深夜の沸き上げを強制停止して翌昼間に沸き上げする制御をHome Assisatntを使って自動でやっています。
25kWhっていうとエコキュートの沸き上げを昼間に行ってもまだ余剰が出てしまうのですが、今のところ翌日の発電量の予想精度がそんなに高くなく、特に予想が20kWh未満の時には精度が低くて半分程度しか発電しない場合があるので高めの設定にしています。
ただし予想が25kWh未満で夜中に沸かしてしまった場合も、昼間に余剰電力が1kWを超えてきた場合には追加の沸き上げを補助的に行うことで、その次の沸き上げ時の消費電力を抑制できるようにしています。
発電量の予想には、"Solcast solor"というサービスと、そのAPIを使ってHome Assistantに取り込むカスタムインテグレーション”ha-solcast-solar”を使用しています。

●食洗機

以前の記事でも書きましたが、たまに食洗機に入っている食器が「これ洗ってあるの?ないの?」ってなることありませんか?我が家だけかな(笑)
なので、いつ洗い終わったかを知ることが出来るようにしました。
採用したミーレの食洗機は無線LAN対応モデルではないのでHome Assistantとの接続は諦めてましたが、食洗機用の200Vコンセントと自動水栓用の100Vコンセントがキッチンの奥の手が届く場所に設置されていたので、200Vコンセントに延長ケーブルをかませ、ESP32に繋いだCTクランプセンサーで電流を拾って洗い終わったことを検出できるようにしました。
ESP32とHome Assistantとの接続にはESP Homeを使っています。
ダッシュボードに洗い終わった時間を表示させています。

●洗濯機

我が家の東芝製ドラム式洗濯乾燥機は選んで買ったわけではないのにWi-Fi接続対応です。まぁ出来ることは単にアプリに「乾燥始まった」とか「洗濯終わった」とか警告とかの通知が来たり、アプリで残り時間を見たりできるだけですけど。
APIが公開されていないのでダッシュボード用のタブレットに届いた通知を検出して、ダッシュボード上に洗濯機の状態を表示したり、Google Homeから音声で「洗濯が完了しました」と喋らせたりしています。

●郵便ポスト

今時の住宅では断熱性や気密性を確保するため、壁を貫通するポストをは採用しないのが一般的です。もちろんお金さえ出せば断熱気密処理された壁を貫通するポストも無いわけではありませんが特殊で高価です。
なので普通の壁に取り付けるポストを採用したワケですが、ポストに郵便物が入っているのか家の中からは判らないし取ることもできません。
ポスト周りに電源が無いのでZigbee接続のドア開閉センサーを使って、投函口の蓋が開いたら「郵便物あり」、郵便物を取り出す蓋を開いたら「郵便物なし」とみなしてダッシュボードに表示させえています。

●ロボット掃除機

ロボット掃除機なんて基本はフルオート動かせば良いんですが、「今すぐここを掃除して欲しい」ってこともありますよね。
スマホを取り出してアプリを起動してってやるのはちょっと面倒なのと奥様が使いこなせないので、ダッシュボードからワンタッチで部屋やエリアを選んで掃除出来るようにしています。
我が家のロボット掃除機はEcovacsのDeebot X1 OMNIで、Home Assistantとの接続にはカスタムインテグレーション"Deebot4homeassistant"を使っています。
(最近、このカスタムインテグレーションはHome Assistantの純正インテグレーションとして組み込まれたみたいです。)

●観葉植物

今まで観葉植物とかあまり興味がなかったのですが、インテリアとして置いてみたら結構ハマってしまいました(笑)
しかし、水はやり過ぎてもいけないので加減が難しく、”サスティ”っていうアナログな土の水分インジケータみたいなのを買って使ってみましたが、定量的ではないので結局良くわからず。。。
そこで、Bluetoothで接続できるデジタルな水分計”Flower care”ってのを購入してダッシュボードに水分を表示させています。
それぞれの観葉植物の元気がなくなって来る水分が数値で判るので、それぞれの最適な水やりをすべき水分量をみつけて閾値を設定しダッシュボード上で警告を出すようにしています。
あと、ログを見れば前回いつ水やりをしたかが簡単に判るのも良きです。
”Flower care”の白いグローバルバージョンだと、Home AssistantからはXiaomi BLEデバイスとして認識され簡単に接続できます。
”Flower care”は日本でも結構出回っているようですが法外な価格なのでAliexpressで買いましょう(汗)

■今後やりたいこと

●カーテンの自動化

現在カーテンロボットは導入していませんが、リビングの掃き出し窓に導入したいと考えています。
現在日本で買えるものでHome Assistantと接続できそうなのだとSwitchbotか+Styleの2択だと思いますが、Amazonのレビューを見ると+Styleのはパワー弱そうですねぇ。Switchbotのが酷評は少ないですが、それでも星3つのレビューでさえ結構よろしくないことが書かれていたりします。条件が揃わないとまともに動かないいわゆる「好きな人用デバイス」の臭いがプンプンしますが、その割に普通の人が手を出してしまうようです(笑)
AliexpressでTuya系のを買ってもいいんですが、ここは返品可能なAmazonでSwitchbotのを買うのが無難ですかねぇ。

●空調の自動化

家はそこそこ高気密高断熱で第1種換気による熱交換もしているし太陽光もあるので24時間空調もやってみたいと思っていますがやっぱり電気代がねぇ。。。
まぁでも各所に温湿度センサーも設置したしHome Assistantで温度設定などを自動制御すれば、電気代を抑えつつ家中快適温度とか結露リスクを回避するなんてのも夢ではないかもしれません。
加湿器も欲しいなぁ。。。

●芝生の水やり

なんとなく庭に天然芝を植えましたが、手入れがなかなか大変だと聞きます。
夏場は毎日水やりをしなくてはいけないと知ってはいましたが、入居後に「1㎡あたり8リットル」とかいうとんでもない量の水やりをしなくてはいけないと知り驚愕しています(笑)
水道代も馬鹿にならない気がしますが、それよりも手間というか時間が。。。(汗)
そんなワケで水やりの自動化は決定事項です。(笑)



というわけで久々にスマートホーム化のこと・・・新居においてHome Assistantを使ってスマートホーム化していること、これからしたいことをざざっと書いてみました。
今後ぼちぼちとそれぞれの詳細を書いていくと思いますが、ネタがありすぎて全部書くのに5年くらいかかりそうです(笑)
もし興味があるものがありましたらコメントに書いていただければ、そのネタを優先的に書きたいと思います。


それでは。