全屋 CO₂ 换气:9 分钟对流通风窗
全屋四个 CO₂ 传感器在平均值超过 1 100 ppm 时,触发对面两扇窗的 9 分钟对流通风,随后复检并最多重复三次。开启阶段的实测换气率为 4.1 次/小时。
# HearthNodes recipe 13 - whole flat CO2 purge
alias: "Climate - whole flat cross ventilation purge"
id: hn_climate_co2_purge
description: "9 minute full-opening cross purge, re-check and repeat up to 3x"
mode: single
max_exceeded: silent
trigger:
- platform: numeric_state
entity_id: sensor.flat_mean_co2
above: 1100
for: "00:05:00"
variables:
purge_windows:
- cover.living_window
- cover.bedroom_window
purge_seconds: 540
settle_seconds: 240
max_rounds: 3
reporting_sensors: >-
{{ states.sensor
| selectattr('entity_id','search','^sensor\.co2_')
| selectattr('state','ne','unavailable') | list | count }}
condition:
- condition: template
value_template: "{{ reporting_sensors | int(0) >= 3 }}"
- condition: numeric_state
entity_id: sensor.indoor_outdoor_delta_t
below: 8
- condition: state
entity_id: input_boolean.window_lockout
state: "off"
- condition: numeric_state
entity_id: sensor.outdoor_pm25
below: 35
action:
- repeat:
count: "{{ max_rounds }}"
sequence:
- service: climate.turn_off
target:
entity_id: climate.mvhr
- service: cover.set_cover_position
target:
entity_id: "{{ purge_windows }}"
data:
position: 100
- delay: "00:09:00"
- service: cover.set_cover_position
target:
entity_id: "{{ purge_windows }}"
data:
position: 0
- delay: "00:04:00"
- if:
- condition: numeric_state
entity_id: sensor.flat_mean_co2
below: 800
then:
- service: climate.turn_on
target:
entity_id: climate.mvhr
- stop: "CO2 cleared"
# Kitchen sensor is excluded from the mean for 45 minutes after the hob exceeds
# 200 W. Fewer than three reporting sensors -> no purge at all, plus a fault
# notification. A window that fails to close trips the local lockout button.
触发器 · numeric_state
sensor.flat_mean_co2
所有上报传感器的 CO₂ 平均值超过 1 100 ppm 并持续 5 分钟。
分步说明
- cover.living_window · cover.bedroom_window把对面两扇窗完全打开 9 分钟——全开而不是留缝,这才有 4 次/小时而不是 1.2 次/小时的换气率。
set_cover_position · 100 for 9 minutes - climate.mvhr换气期间关闭机械新风;同时运行既浪费热量,又会与烟囱效应相互抵消。
turn_off during purge · restore after - timer.purge_recheck关闭后等待 4 分钟让传感器稳定再复读;最多重复三轮,之后放弃并发送通知。
wait 9 min · close · wait 4 min · re-read - sensor.co2_history记录每次换气的起止 CO₂ 值,让通风策略可以依据数据评判,而不是凭体感抱怨。
record purge count and duration
一次 9 分钟,而不是两次短的
4 分钟换气几乎不改变读数,因为它得先把房间容积冲洗一遍;接着你不得不在 20 分钟后再来一次。一次 9 分钟能达到 4.1 次/小时,把全屋降到 620 ppm,能撑大约两个半小时。短脉冲体感更好,但效果更差。
做饭时剔除厨房传感器
燃气灶产生的 CO₂ 与是否需要通风无关。在灶具功率超过 200 W 后的 45 分钟内,把厨房传感器排除在平均值之外,否则冬天每顿晚饭都会触发两次换气。
设定 ΔT 上限,并且真的执行
在极冷的早晨换气,会在九分钟内把全屋热量倒出去,重新加热的代价超过降低 CO₂ 的收益。8 °C 的上限能让做法保持理性;低于该值时,改用机械新风强档。
硬件
| 型号 | 协议 | 连接 | 在本链路中的作用 |
|---|---|---|---|
| NDIR CO₂ sensors (e.g. Aqara or Aranet-class) on Thread where possible | thread |
无线 | 四台:客厅、主卧、次卧、厨房。烹饪期间厨房读数不计入平均值。 |
| Thread window actuators | thread |
有线 | 对面两扇窗上的链条开窗器;在这套公寓里只有这两扇能形成有效的对流通风。 |
| Indoor/outdoor temperature pair | thread |
无线 | 提供 ΔT 条件,避免在 1 月的 -10 °C 早晨执行换气。 |
失效时怎么办
如果少于三个 CO₂ 传感器在上报,换气完全不执行,并发出传感器故障通知——由单个传感器驱动的换气可能让整间公寓过度通风数小时。如果某扇窗在循环结束时未能关闭,自动化重试两次后触发本地锁定按钮,避免留下一扇没人要求打开的窗。