昼は電気を買わずに、太陽光の余りだけでATTO 3を充電したい。そのために、まず家の買電と売電をHome Assistantで見える化しました。
Home Assistantは、前の記事で買ったラズパイに入れています。といっても、設定のコードは全部AI(Claude Code)に作ってもらったもので、自分は中身をほとんど理解できていません。
実際の画面と、公開できる範囲の設定ファイル(YAML)を載せて紹介します。
Home Assistantを動かしているのは、Raspberry Pi 4B(4GB)のスターターセットです。
もくじ
ホーム画面に家の電気の流れをまとめた

スマホのHome Assistantアプリで見ているホーム画面です。画面の上が今の電気の流れで、太陽光・電力会社・家・EVの4つを線でつないでいます。
夜に撮ったので太陽光は0Wで、家で使っている1,096Wを全部買っています。EVの丸は、Wallbox Pulsar Plusの充電電力です。

下の「Today」は今日1日の合計です。9月16日は発電7.03kWhのうち、4.36kWhを家で使って2.67kWhを売りました。
この日はATTO 3をWallboxにつないでいなかったので、余った分がそのまま売電になっています。
1時間ごとの内訳はエネルギーの画面で見る

1時間ごとの内訳は、Home Assistantに最初から入っているエネルギーの画面で見られます。青が買電、オレンジが発電、紫が売電です。
昼のあいだは紫がマイナス側に出ていて、ここが売った分です。
全館空調とエコキュートも同じ画面に

さらに下には、全館空調とエコキュートの状態も並べています。この日の全館空調は冷房24℃、エコキュートのタンクの残りは490Lでした。
AIが全部作った、買電・売電を取り込むYAML
ここからは設定ファイルの中身です。
先に書いておくと、ここから載せるコードは全部AIに作ってもらったものです。
自分は1行も書いていませんし、読んでもところどころしかわかりません。
説明もClaude Codeにしてもらった内容をそのまま書いています。
Natureのアクセストークンと、Wallboxのシリアルナンバーは、「x」の並びに置き換えて伏せています。
YAMLは設定を書くための書き方
YAMLという言葉も自分は知らなかったので、Claude Codeに聞きました。
YAML(ヤムル)は、人が読み書きしやすいように作られた、データや設定を書くための形式です。プログラムというより、決まった形で並べた設定のメモに近いものだそうです。
- 「項目名: 値」を1行に1つずつ書く
- 行頭の字下げ(スペース)で、どの項目の中身かを表す
- 「- 」で始まる行は、並べたもののうちの1つ
- 「#」から後ろはメモ(コメント)で、動きには関係しない
- 「{{ }}」や「{% %}」で囲まれた部分は、Home Assistantが値を計算するための式(テンプレート)
Home Assistantでは、configuration.yamlのような設定ファイルがこの形で書かれていて、画面で作ったオートメーションもautomations.yamlというYAMLのファイルに保存されます。
字下げが1つずれるだけで意味が変わってしまうので、自分で書くのはハードルが高そうです。
Nature Remo EのAPIから50秒おきに取る
買電と売電の数字は、Nature Remo EのクラウドAPIから取ってくる設定で、configuration.yamlに書いてあります。
rest:
- resource: "https://api.nature.global/1/appliances"
method: GET
headers:
Authorization: "Bearer xxxxxxxxxxxxxxxx"
scan_interval: 50
sensor:
# 1. スマートメーター(売買電の瞬時値)
- name: "Grid Power"
unique_id: "grid_power_fixed"
unit_of_measurement: "W"
device_class: "power"
state_class: "measurement"
availability: >
{{ value_json | selectattr('type', 'equalto', 'EL_SMART_METER') | list | length > 0 }}
value_template: >
{% set dev = value_json | selectattr('type', 'equalto', 'EL_SMART_METER') | first | default(none) %}
{% if dev %}
{{ dev.smart_meter.echonetlite_properties | selectattr('name', 'equalto', 'measured_instantaneous') | map(attribute='val') | first | int(0) }}
{% else %}
{{ none }}
{% endif %}
# 2. 太陽光発電(現在の発電量)
- name: "Solar Generation"
unique_id: "solar_gen_fixed"
unit_of_measurement: "W"
device_class: "power"
state_class: "measurement"
value_template: >
{% set dev = value_json | selectattr('type', 'equalto', 'EL_SOLAR_POWER') | first | default(none) %}
{% if dev %}
{{ dev.smart_meter.echonetlite_properties | selectattr('name', 'equalto', 'measured_instantaneous') | map(attribute='val') | first | int(0) }}
{% else %}
0
{% endif %}
# 3. スマート分電盤(家全体の消費電力計測値)
- name: "House Consumption Raw"
unique_id: "house_dist_meter_fixed"
unit_of_measurement: "W"
device_class: "power"
state_class: "measurement"
value_template: >
{% set dev = value_json | selectattr('type', 'equalto', 'EL_POWER_DIST_METER') | first | default(none) %}
{% if dev %}
{{ dev.smart_meter.echonetlite_properties | selectattr('name', 'equalto', 'measured_instantaneous') | map(attribute='val') | first | int(0) }}
{% else %}
0
{% endif %}
# 4. 買電量(Grid Powerがプラスの時だけ)
- name: "Power Import"
unique_id: "power_import_calc"
unit_of_measurement: "W"
device_class: "power"
state_class: "measurement"
availability: "{{ has_value('sensor.grid_power') }}"
value_template: >
{% set val = states('sensor.grid_power') | int(0) %}
{{ val if val > 0 else 0 }}
# 5. 売電量(Grid Powerがマイナスの時だけ、絶対値にする)
- name: "Power Export"
unique_id: "power_export_calc"
unit_of_measurement: "W"
device_class: "power"
state_class: "measurement"
availability: "{{ has_value('sensor.grid_power') }}"
value_template: >
{% set val = states('sensor.grid_power') | int(0) %}
{{ val | abs if val < 0 else 0 }}
- 取りに行く先はNatureのクラウドで、アクセストークンが要ります(
Authorizationの行) scan_interval: 50で、50秒おきに取り直します- 「Grid Power」はスマートメーターの値で、プラスなら買電、マイナスなら売電です
- 「Solar Generation」は太陽光、「House Consumption Raw」はスマート分電盤の値で、取り方は同じです
- 「Power Import」「Power Export」は、Grid Powerをプラスとマイナスで分けたものです。充電の自動制御は、この2つを見て動きます

太陽光とエコキュートはECHONET Liteで直接読む
画面に出している太陽光の発電量と、全館空調・エコキュートの状態は、家のLANにあるECHONET Liteの機器からHome Assistantが直接読んでいます。
ECHONET Lite用の追加機能(echonetlite_homeassistant)は、Claude CodeがGitHubから取ってきて入れてくれました。こちらは画面から機器を足していく方式なので、YAMLはありません。
電気の流れのカードのYAML
画面の上の電気の流れは、HACS(有志が作った追加機能を入れる仕組み)で入れたPower Flow Card Plusというカードです。
type: custom:power-flow-card-plus
entities:
grid:
entity:
consumption: sensor.power_import
production: sensor.power_export
name: Grid (+/-)
color_circle: true
color_value: false
secondary_info:
template: "← {{ states('sensor.power_export') }} W"
color_value: false
solar:
entity: sensor.auto_discovery_measured_instantaneous_amount_of_electricity_generated
name: Solar
display_zero_state: true
home:
name: Home
color_circle: true
secondary_info:
template: "☀ {{ states('sensor.solar_self_consumption') }} W"
color_value: false
individual:
- entity: sensor.wallbox_pulsar_plus_na_sn_xxxxxx_charging_power
name: EV
icon: mdi:car-electric
color:
- 180
- 180
- 180
show_direction: false
display_zero: true
display_zero_state: true
unit_of_measurement: W
color_value: false
secondary_info:
template: "{% set s = states('sensor.wallbox_pulsar_plus_na_sn_xxxxxx_status_description') %}{% if s == 'Charging' %}🔋⚡{% elif s == 'Waiting for car demand' %}🔌{% else %}💤{% endif %}"
color_value: false
clickable_entities: true
display_zero_lines:
mode: show
transparency: 50
grey_color:
- 189
- 189
- 189
use_new_flow_rate_model: true
base_decimals: 0
kilo_decimals: 2
min_flow_rate: 0.75
max_flow_rate: 6
max_expected_power: 5500
min_expected_power: 0.01
kilo_threshold: 1000000
card_mod:
style: ".circle-container.grid .circle .return { display: none !important; }"
gridが電力会社、solarが太陽光、homeが家、individualがEV(Wallboxの充電電力)です- 丸の中の上にある小さい数字(
secondary_info)には、電力会社の丸に売電、家の丸に自家消費を出しています max_expected_power: 5500は、線の流れる速さの目安にする最大の電力です- 最後の
card_modは見た目を細かく調整する設定で、これも追加機能(card-mod)を入れて使っています
まとめ
ばらばらのアプリで見ていた家の電気が、Home Assistantの1つの画面にまとまりました。
載せたコードは全部AIが作ったもので、自分は今もほぼわかっていません。そんな状態でも作れてしまうのは最近のAIのすごいところですね。
次の記事で、この画面にWallboxの操作パネルを足した話を紹介します。
