Sympapaのスマートホーム日記

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

新居のスマート化: おひさまおつきさまハイブリッドエコキュートを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電気錠の不満点を解消するシリーズを書きたいと思います。
それでは。