在给烤箱让路的同时不把车晾着的充电调度
充电桩在 6 A 至 16 A 之间调节,把全屋负载压在 63 A 总保险之下;烤箱或烘干机启动时暂停而不是停止充电;并保证无论家里怎么用电,07:00 前都充到 40 %。
# HearthNodes recipe 18 - EV charging that yields to the oven
alias: "Energy - EV charging modulates under the main fuse"
id: hn_energy_ev_load_shed
description: "Clamp total house current, pause rather than stop, honour departure"
mode: restart
max_exceeded: silent
trigger:
- platform: numeric_state
entity_id: sensor.house_total_current
above: 45
for: "00:00:15"
id: shed
- platform: numeric_state
entity_id: sensor.house_total_current
below: 30
for: "00:00:30"
id: restore
variables:
fuse_a: 63
control_target_a: 45
shed_threshold_a: 52
restore_threshold_a: 34
min_charge_a: 6
max_charge_a: 16
headroom_a: "{{ control_target_a - states('sensor.house_total_current') | float(0) }}"
wanted_a: "{{ [[headroom_a, min_charge_a] | max, max_charge_a] | min | round(0) }}"
condition:
- condition: state
entity_id: binary_sensor.ev_plugged_in
state: "on"
- condition: state
entity_id: input_boolean.charger_manual_pause
state: "off"
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.house_total_current
above: "{{ shed_threshold_a }}"
for: "00:00:30"
sequence:
- service: switch.turn_off
target:
entity_id: switch.charger_session
- delay: "00:00:30"
- service: switch.turn_on
target:
entity_id: switch.charger_session
data:
note: "pause keeps the session alive; resume in seconds"
- conditions: []
sequence:
- service: number.set_value
target:
entity_id: number.charger_current
data:
value: "{{ wanted_a }}"
- service: script.assert_departure_floor
data:
departure: "{{ states('input_datetime.ev_departure') }}"
minimum_soc: 40
# the floor overrides load shedding when the car cannot otherwise leave
# Current transformer loss -> fixed 10 A, which is safe alongside an oven and a
# dryer on a 63 A supply. Shed at 52 A, restore only below 34 A with a 60 second
# dwell, otherwise the charger and the oven trade places every minute.
触发器 · numeric_state
sensor.house_total_current
全屋总电流超过 45 A,或降到 30 A 以下。
分步说明
- number.charger_current以整安培为步长调节充电电流,每 15 秒重新计算,且不低于标准要求的有效充电会话最低值 6 A。
set · clamp(computed, 6 A, 16 A) - switch.charger_session在预计要超出安全带时暂停而不是停止;暂停会保持会话存活,使充电能自动恢复。
pause when house current > 52 A for 30 s - number.charger_current让路后每 30 秒回升一安培,避免系统来回震荡,也让保险丝永远不会看到阶跃变化。
ramp up 1 A per 30 s - sensor.ev_energy_added记录每晚是否达成 07:00 的最低充电量,以便依据证据整定截止逻辑。
log · deadline compliance
在保险额定值之下留出裕量
63 A 的保险丝不会在 63 A 时立刻熔断,而是在持续过载几分钟后才熔断,这意味着一个粗糙的控制器可以整晚跑在 62 A,然后在电水壶加入时崩掉。把控制目标设在 45 A、让路阈值设在 52 A,就能为电水壶带来的 10 A 阶跃留出无需反应时间的余量。
要暂停,绝不要停止
停止会话会终止握手,需要车辆重新协商,可能要花一分钟,而且在某些车型上无人值守时不会重启。暂停会保持控制导引信号存活,充电在几秒内即可恢复。所有让路事件都用暂停命令。
用出发时间兜底最低充电量
不考虑出发时间的让路策略迟早会把人晾在路上。计算 07:00 前达到最低电量所需电流,把它作为让路不可突破的下限——改为让烘干机让路,或者接受更高的进户功率。
硬件
| 型号 | 协议 | 连接 | 在本链路中的作用 |
|---|---|---|---|
| Mode 3 charger with an OCPP or local API current setpoint | wifi |
有线 | 必须接受以安培为单位的电流设定值;只支持开/停的充电桩无法调节,会烧断保险。 |
| Whole-house current transformer on the main tails | wifi |
有线 | 在进户主线上读取总取电;回路级电表会漏掉烤箱的贡献。 |
| Solar inverter with export metering (optional) | matter |
有线 | 允许白天按光伏余电充电,那是另一条配方,但共用这套硬件。 |
失效时怎么办
如果电流互感器停止上报,充电桩降到固定 10 A——在 63 A 进户容量下同时开烤箱和烘干机也是安全的——并通知动态控制已离线。如果充电桩在 16 A 时失联,车辆自身的控制导引信号会把会话限制在最后收到的指令值;此时会提示家庭手动暂停。