# Analytics snippet placeholder — HearthNodes (gatherer.top) # Paste the measurement snippet here (server.js inlines any content that contains # a markup tag into on every page). No GA4 property is assigned to this # site yet, so leave this file as comments only and the build emits no tracking # code.
HearthNodesgatherer.top 已发布 13/28 EN 中文

全屋 CO₂ 换气:9 分钟对流通风窗

全屋四个 CO₂ 传感器在平均值超过 1 100 ppm 时,触发对面两扇窗的 9 分钟对流通风,随后复检并最多重复三次。开启阶段的实测换气率为 4.1 次/小时。

协议 · thread 延迟 · 540000 ms 供电 · mains 发布 · 2026-09-26 3 devices
自动化 YAML climate-co2-window-purge.yaml
# 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 分钟。

全屋 CO₂ 换气:9 分钟对流通风窗 topology

分步说明

  1. cover.living_window · cover.bedroom_window把对面两扇窗完全打开 9 分钟——全开而不是留缝,这才有 4 次/小时而不是 1.2 次/小时的换气率。 set_cover_position · 100 for 9 minutes
  2. climate.mvhr换气期间关闭机械新风;同时运行既浪费热量,又会与烟囱效应相互抵消。 turn_off during purge · restore after
  3. timer.purge_recheck关闭后等待 4 分钟让传感器稳定再复读;最多重复三轮,之后放弃并发送通知。 wait 9 min · close · wait 4 min · re-read
  4. 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₂ 传感器在上报,换气完全不执行,并发出传感器故障通知——由单个传感器驱动的换气可能让整间公寓过度通风数小时。如果某扇窗在循环结束时未能关闭,自动化重试两次后触发本地锁定按钮,避免留下一扇没人要求打开的窗。

同一触发源的配方

条款 仅供参考。这些配方会控制市电、水路与物理门禁。当地电气与给排水规范、熔断与隔离措施、以及每一处失效保护的实际测试,都需要你自己负责。本页内容不构成专业工程、法律或安全建议。