把光伏余电导向热水罐,而不是以 4 分钱回售电网
浸没式加热器以 400 W 步进吸收光伏余电,把电网进出功率控制在 -50 W 至 +150 W 之间长达四小时。在 4.2 kWp 的阵列上,一个晴朗的 4 月日可截留 6.8 kWh,而不是按上网电价卖出。
# HearthNodes recipe 16 - solar surplus to hot water
alias: "Energy - divert PV surplus to the cylinder"
id: hn_energy_solar_surplus_water
description: "Hold grid between -50 W and +150 W by modulating the immersion"
mode: single
max_exceeded: silent
trigger:
- platform: numeric_state
entity_id: sensor.grid_power
below: -250
for: "00:01:00"
variables:
band_low_w: -50
band_high_w: 150
step_w: 400
pwm_period_s: 10
cylinder_c: "{{ states('sensor.cylinder_temperature') | float(0) }}"
current_w: "{{ states('sensor.immersion_power') | float(0) }}"
error_w: "{{ states('sensor.grid_power') | float(0) }}"
next_w: "{{ [[current_w + (band_high_w - error_w), 0] | max, 3000] | min }}"
duty: "{{ (next_w / 3000 * 100) | round(0) }}"
condition:
- condition: numeric_state
entity_id: sensor.cylinder_temperature
below: 62
- condition: numeric_state
entity_id: sensor.battery_soc
above: 55
- condition: state
entity_id: binary_sensor.high_power_appliance_active
state: "off"
- condition: template
value_template: "{{ cylinder_c | float(0) < 62 }}"
action:
- service: number.set_value
target:
entity_id: number.immersion_setpoint
data:
value: 62
- service: script.pwm_switch
data:
switch: switch.immersion_element
duty_pct: "{{ duty }}"
period_s: "{{ pwm_period_s }}"
step_w: "{{ step_w }}"
- service: sensor.record
data:
entity_id: sensor.exported_energy_today
note: "compare diversion against the feed-in rate"
# Grid meter loss -> irradiance-based forecast model, so the cylinder is never
# heated from grid import by accident. Cylinder probe failure stops diversion
# entirely: heating water to an unknown temperature is worse than exporting.
触发器 · numeric_state
sensor.grid_power
电网功率低于 -250 W(正在外送)并持续 60 秒。
分步说明
- switch.immersion_element用 10 秒 PWM 周期以 400 W 步进调节浸没加热器;周期更长会让电表读数来回跳,调节器随之来回搜索。
PWM · 400 W steps · 10 s period - number.immersion_setpoint把分流器的目标设为 62 °C,并让热水罐自身的机械温控器保持在 70 °C 作为独立安全限值。
set 62 °C · hard limit 70 °C - sensor.exported_energy_today每日记录外送电量与截留电量的对比,以便依据真实上网电价评估分流策略。
log · compare against diversion - input_boolean.cylinder_boost墙面按钮提供 60 分钟手动强制加热,忽略余电逻辑,用于多来一位客人的晚上。
manual 60 min boost overrides everything
把电网稳定在少量取电,而不是零
把目标精确设为 0 W 会让系统每分钟在取电与外送之间来回震荡数次。维持在 -50 W 至 +150 W 意味着电表大多数时间看到的是极少量的取电,既稳定又几乎不花钱。这是最重要的一个整定值。
电池荷电低于 55 % 时让电池优先
在电池只剩 30 % 时把余电导向热水,意味着当晚你得买市电。55 % 这个阈值对应的是一个夜间用电 4 kWh 的家庭;请根据你自己的夜间用电量重新计算,不要直接照抄。
把分流器上限设在热水罐自身温控器之下
62 °C 目标配合 70 °C 机械限值,形成两层独立保护。一个完全信任自身传感器、没有机械兜底的分流器,距离「把热水罐烧开」只差一个探头故障。每年手动检查一次机械温控器。
硬件
| 型号 | 协议 | 连接 | 在本链路中的作用 |
|---|---|---|---|
| Matter smart relay with power metering (e.g. Shelly or equivalent) | matter |
有线 | 开合并测量浸没加热器负载;正是这个测量值闭合了控制回路。 |
| Bidirectional grid meter (CT clamp or the inverter's own meter) | matter |
有线 | 提供带符号的电网功率值;单向电表无法区分外送与取电。 |
| Cylinder temperature probe on a 1 m immersion pocket | zigbee |
无线 | 绑在热水罐的测温套管上,而不是管道上,这样读到的是储水温度而非流水温度。 |
失效时怎么办
如果电网电表失联,分流器回退到依据辐照度估算余电的光伏预报模型——精度差一些,但能避免用市电加热热水。如果热水罐探头失效,分流完全停止并发出通知——加热到一个未知温度,比便宜地外送更糟。