# HearthNodes recipe 20 - storm reserve
alias: "Energy - storm reserve arms and sheds"
id: hn_energy_storm_reserve
description: "Raise the reserve floor to 60 percent, shed discretionary loads"
mode: restart
max_exceeded: silent
trigger:
- platform: state
entity_id: binary_sensor.storm_warning
to: "on"
- platform: numeric_state
entity_id: sensor.grid_frequency
below: 49.8
for: "00:00:30"
id: freq_low
- platform: numeric_state
entity_id: sensor.grid_frequency
above: 50.2
for: "00:00:30"
id: freq_high
variables:
reserve_floor_pct: 60
charge_target_pct: 95
shed_order:
- switch.pool_pump
- number.ev_charger_current
- switch.immersion_element
- climate.heating
condition:
- condition: state
entity_id: binary_sensor.grid_connected
state: "on"
- condition: numeric_state
entity_id: sensor.battery_soc
above: 30
- condition: state
entity_id: input_boolean.inverter_maintenance
state: "off"
action:
- service: number.set_value
target:
entity_id: number.battery_reserve_floor
data:
value: "{{ reserve_floor_pct }}"
- service: switch.turn_off
target:
entity_id:
- switch.pool_pump
- switch.immersion_element
- service: number.set_value
target:
entity_id: number.ev_charger_current
data:
value: 6
- service: switch.turn_on
target:
entity_id: switch.battery_grid_charge
data:
power_w: 3000
until_soc: "{{ charge_target_pct }}"
- service: light.turn_on
target:
entity_id:
- light.stair_emergency
- light.hall_emergency
data:
brightness_pct: 15
- service: script.arm_emergency_circuit
data:
circuits: [light.stair_emergency, light.hall_emergency]
# Disarm when the warning expires and either 24 hours have passed or the grid
# frequency has been nominal for 6 hours. A brief frequency dip alone must not
# change the house's operating mode for a day, hence the 30 second confirmation.
触发器 · state
binary_sensor.storm_warning
本地区发布恶劣天气预警,或电网频率超出 49.8–50.2 Hz 并持续 30 秒以上。
分步说明
- number.battery_reserve_floor把备用下限从 20 % 提到 60 %,使逆变器在下限达成之前充电而非放电。
set 60 % - switch.water_heater · number.ev_charger_current · switch.pool_pump让浸没加热器、电动车充电与泳池泵让路——这三项是在停电时最快耗空电池的负载。
shed - switch.battery_grid_charge在便宜的夜间窗口以 3 kW 从电网充电,而不是等第二天早上的光伏。
turn_on · 3 kW until 95 % - light.stair_emergency · light.hall_emergency将应急照明回路置为布防,使电网断电时它由电池后备回路供电。
arm · on battery only
提高下限,而不只是充满
充到 95 % 却把下限留在 20 %,意味着太阳一落山房子就开始放电,等 22:00 风暴来临时电池又回到了 40 %。把下限提到 60 % 才是真正把电量留住的办法,它也能避免之后不必要的深度放电。
按固定顺序让路,并把它写下来
比预期更长的停电需要一个既定顺序,而不是临场发挥。先泳池泵(无影响),再电动车,再浸没加热器,再供暖,绝不切冰箱、冷柜、网络或医疗回路。把这份顺序写成家人能读到的文档。
每季度刻意测一次储备
把下限设为 60 %,断开电网,看哪些回路真的还在供电。每个季度都会发现有新设备被接到了后备回路上、而它本不该在那里——新冰柜、第二台交换机、电暖器。从未测试过的储备只是猜测。
硬件
| 型号 | 协议 | 连接 | 在本链路中的作用 |
|---|---|---|---|
| Hybrid inverter with a settable reserve floor | matter |
有线 | 备用下限是本配方的关键杠杆;不支持设置下限的逆变器根本无法实现本配方。 |
| Grid frequency sensor (or inverter-reported frequency) | modbus · wired |
有线 | 频率偏移是电网承压的早期信号,通常比该区域供电中断早 30–90 秒。 |
| Severe weather warning feed | wifi |
有线 | 为大风与洪水预警提供 6–12 小时的提前量,比仅靠频率偏移有用得多。 |
失效时怎么办
如果天气数据源不可用,基于频率的触发仍会启用储备,只是提前量更少。如果风暴到来前电池没能达到 60 % 下限,配方会按既定顺序让负载让路——泳池泵、电动车、浸没加热器、供暖——让关键回路尽可能长时间保持供电。