能耗管理:峰谷电价与定时

自动化最实在的回报

前面几篇多少带点「炫技」成分,这一篇讲钱。电费是智能家居里少数能精确算出收益的地方:峰谷电价差一倍以上时,把负载挪几个小时的回报清清楚楚。如果一个家庭全年能通过电价调度省下一笔可观的费用,这套系统的投入就算收回来了。

能耗自动化的目标分两层:让耗电的事发生在便宜的时候,并且知道自己每天花了多少。前者靠定时与传感器,后者靠一个統一的統計入口。两件事一起做,自动化才称得上「能源管理」而不只是「定时插座」。这一篇的每条配置都围绕「可算账」三个字展开。

峰谷电价模型

国内常见分时电价大致划分(具体时段以当地电网为准):

时段 名称 相对电价
22:00 - 08:00 谷段 最低
08:00 - 11:00、15:00 - 18:00 平段 中等
11:00 - 15:00、18:00 - 22:00 峰段 最高
午间光伏富余时段(部分地区) 深谷 极低

地区差异很大:有的省份新增「尖峰」,有的地区只分昼夜两段。第一步永远是拿出自己家的电费单,把真实时段和价格抄下来,一切自动化以它为唯一依据。

还有一个现实问题:峰谷电价需要先申请。多数地区的分时电价不是默认开通,居民要向电网报装申请后才按峰谷计费。先确认自家已经在执行分时电价,否则整套错峰自动化就成了自作多情。

一个时段助手

在 HA 里建模电价最干净的方式是一个 input_select:选项是「谷 平 峰 尖峰」,由一条时间自动化按时段切换。所有电价相关的自动化只认这个下拉框,电网改规则时改一条自动化即可,不用逐条改。切换时段的自动化本身用 time 触发器逐个安排,四个时段就是四个触发,margin 几分钟防止整点扎堆。

再配一个 input_number 记录每度电的单价,用模板把「当前时段 单价」合并成一个传感器,仪表盘上就是一张活的电费表:

template:
  - sensor:
      - name: "当前电价"
        state: >-
          {{ states('input_number.price_{{ states("input_select.tariff") }}') }}

这段示意代码表达了思路:真实实现要用变量展开。模板语法会在「Jinja2 速学」一篇细讲。

这个传感器还有两层用途。一层是显示:仪表盘摆一张大数字卡片,家人对「现在用电多少钱」有了直觉,才会主动配合错峰。另一层是判断:洗衣机、热水器这类设备在条件里比较「当前电价高于某阈值就先等等」,比分时段hardcode灵活得多。把知识做成实体,是本篇的一个方法论。

高负载设备的错峰

  1. 谷段给电动车充电:电费单上最大的一块可移动负载,错峰收益最高。私家车一般有十小时以上的停放窗口,完美匹配谷段。
  2. 储热式电热水器:体积大、保温尚可,加热挪到谷段是经典错峰对象。
  3. 洗衣机与洗碗机:运行时间一到三小时,排进谷段或深谷段毫无痛感。
  4. 空调预冷预热:夏天提前把房间拉凉,峰段少开多维持;
  5. 扫地机器人:耗电不大但噪声烦人,谷段开始时全家人正好在卧室,一举两得。
- alias: 谷段给热水器加热
  trigger:
    - platform: time
      at: "22:30:00"
  condition:
    - condition: state
      entity_id: input_boolean.peak_shift_enable
      state: "on"
  action:
    - service: switch.turn_on
      target:
        entity_id: switch.water_heater

要点是时间的留白:谷段从 22 点开始,定时设 22:30 而不是 22:00:00,避开整点可能的转发高峰和大家同时启动的负荷。所有时段类定时都建议错开几分钟。

再想想错峰的边界:什么设备不适合错峰。冰箱显然是,但「储热式热水器」要看保温性能——保温差的水箱半夜烧好一早水温掉了,又得补烧,反而费电。每台设备在错峰之前都要先算一笔账,算不明白的先别动。

电动车的自动充电

电价与存在检测联名款的最佳案例。完整链条:

  1. 插枪信号(充电桩实体变为连接)→ 触发「准备充电」;
  2. 条件判断:现在不是谷段 → 不立刻充;
  3. 定时到谷段 → 开始充电;充电完成或拔枪 → 结束;
  4. 早晨用车前保证电量满足要求 → 谷段结束前的最低电量检查。
- alias: 谷段结束前补电检查
  trigger:
    - platform: time
      at: "07:30:00"
  condition:
    - condition: numeric_state
      entity_id: sensor.car_battery
      below: 60
  action:
    - service: switch.turn_on
      target:
        entity_id: switch.charger

这套逻辑还能进一步细化:只插枪不立刻充需要充电桩本身支持「预约」,或者用智能插座彻底断电再通电来模拟「延后接通」。方案取决于硬件能力,硬件弱就用智能插座兜底,这是工程常态。

另一个细节是沟通成本:家人可能不理解「为什么插上了不充电」。所以在等待期间推一条「已预约 22:30 谷段充电,预计省 XX 元」的通知,既解释了现状,又把省钱这件事可视化,是降低家人质疑成本的好办法。自动化做了好事要会说。

空调的预冷预热

结合峰谷做空调:谷段把房间温度拉到满意区间,峰段保守维持。夏天房子的热容量就是你的「电池」,提前凉,峰段少开。配合上一章的窗帘联动,西晒时挡住热源就等于在省钱。

这类「预冷」策略的前提是温度控制器(上一章的闭环)先建好,它负责执行「把房间推到目标」;峰谷只负责决定「什么时间推、推到多狠」。两个解耦的层级各司其职,是复杂自动化不乱的秘诀。

量化一下收益:峰谷价差按两倍算,每天空调运行六小时里有三小时挪到谷段,一个月下来差额就相当可观。省下的钱让孩子多上几节课、让 NAS 多买两块硬盘,都是这套系统实打实的产出。数字不需要精确,但一定要算。

冬天同理:谷段结束前(早上 7 点前)把地暖或空调推到位,峰段保守维持。北方集中供暖家庭没这个问题,南方家庭则是省电主力。每年冬夏两季分别调一次参数,是长期住着舒服的关键。

度量与回路

能耗自动化没有反馈等于盲飞。三件事值得做:

  1. 每日功率统计:配合功率计量插座,让 recorder 或长期统计数据画出曲线。哪个设备是耗电大户,看一眼图就知道。
  2. 峰谷电费估算:把各时段的用电量乘以对应单价,得到每月估算账单,和电费单对得上说明模型对。
  3. 每周推送结余摘要:家人看到「本周错峰节省约 XX 元」,比任何技术原理都有说服力。

第 1 项落地时有个提醒:功率计量插座的采样精度有限,别指望它做精细的结算级计量,它的价值在于发现异常(「这周热水器耗电突然翻倍,是不是设定被改了」)而非精确到分。定位异常恰恰是自动化最需要的那类数据。

再强调一遍第 3 条。能耗自动化最容易被家人质疑「值不值」,一条带具体数字的周报是最好的回应。当家人开始主动问「谷段洗衣机是不是还没排进去」时,说明它真的走进了日常生活。

峰谷电量对比

错峰后的一日用电安排

常见误区

  • 只看时段不看必要性:老人孩子在家需要开空调时别固执错峰,体验永远大于节省。
  • 频繁切换损害设备:储热设备有热损耗,反复加热不一定省,算总账。
  • 传感器延迟:智能插座的功率上报有间隔,別把短时尖峰当成基准。
  • 峰谷规则会变:记得每年查一次当地电价政策,把规则变化记在配置注释里。
  • 忽略光伏自用:装了屋顶光伏的家庭还有一条更香的规则,午间自发电几乎免费,洗衣机热水器挪到午间比挪到半夜更省——前提是你的电价传感器也建模了「自用光伏」这一档。

顺带提醒一个排查方向:如果某月电费突然异常,先翻功率统计曲线找「新增的大功率常开设备」。家里添了台服务器、孩子加了个取暖器,都可能让整月的错峰成果归零。能耗自动化既是省钱工具,也是家庭用电的体检表。

延伸阅读

  • 用电曲线分析见本系列「自动化的调试与日志追踪」的日志部分。
  • 传感器选型见「空调与温湿度闭环控制」。
  • NAS 长期运行的电费账也是能耗自动化的一部分,见 《NAS 搭建指南》;软路由层面的调度可参考 《软路由指南》。