Sympapaのスマートホーム日記

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

新居のスマート化: 太陽光システムを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

■まとめ

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

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

それでは。つづく。