Home Assistant 本機空氣品質監測:感測器選型、安裝與控制實作
臺灣住宅的空氣品質控制經常同時碰到三件事:夏天開冷氣不想長時間開窗,室外 PM2.5 偶爾不適合直接引入,廚房與清潔活動又會在室內造成短暫高峰。只看一個紅黃綠燈,無法回答當下該換氣、淨化、除濕,還是先檢查感測器。
Home Assistant 與 ESPHome 適合把量測、紀錄和控制留在本地,但系統是否可靠,取決於測點、感測原理、資料處理和故障行為。本文不提供一組可以套遍所有住宅的「健康門檻」,而是用兩週試點建立自己的基線,再把有效的判斷擴充到其他房間。
先做兩週試點,不要一開始就裝滿整間房子
先挑一個有明確問題、也有可控設備的空間。例如臥室有機械換氣,或廚房有可連動的排風與空氣清淨機。試點只要回答四個問題:
- 哪一種事件會讓讀值改變?
- 現有設備啟動後,數值多久開始回落?
- 感測器失聯、重啟或移位時,系統能不能被發現?
- 家人能否接受設備噪音、通知頻率與手動覆寫方式?
| 試點層級 | 要留下的資料 | 驗收方式 |
|---|---|---|
| 事件 | 烹飪、睡眠、清潔、開窗、排風與清淨機時間 | 曲線能對回事實事件,而非只剩不明尖峰 |
| 量測 | PM2.5、直接量測的 CO₂、溫濕度;VOC 指標依需求加入 | 同位置比對後,偏差與反應方向可解釋 |
| 控制 | 啟動門檻、停止門檻、持續時間、最短運轉時間 | 不在門檻附近反覆啟停,也不因一筆尖峰誤動作 |
| 故障 | unavailable、最後更新時間、重啟次數、手動覆寫 | 拔掉節點、關閉 Wi-Fi 或致動器後,系統會進入預期狀態 |
圖一把一筆讀值走到設備動作前需要確認的環節排在一起。每次修改門檻前,都應知道問題出在量測、位置、濾波,還是控制端。

先決定要換氣還是除粒子
臺灣住宅很常遇到室內通風需求與室外粒子污染互相衝突。控制邏輯至少要同時看室內 CO₂ 趨勢與室外 PM2.5;若沒有可靠的室外感測器,可使用可信的官方測站資料作為參考,但仍要考慮測站距離、時間差與局部交通來源。

CO₂ 較低、室外 PM 較低
維持現況。若風機或清淨機正在運轉,可在最短運轉時間結束、並低於停止門檻後逐步降載。正常區間仍要保留趨勢,因為設備效果常表現在回落速度,而不是單一數值。
CO₂ 偏高、室外 PM 較低
提高外氣量,或在安全條件下開窗,再觀察 CO₂ 的下降速度。若數值沒有改善,檢查佔用人數、門窗路徑、風量與感測器位置;單純把通知門檻調高只會掩蓋問題。
CO₂ 較低、室外 PM 偏高
關窗、使用內循環或粒子淨化。若室內 PM 仍上升,優先追查煎炒、香燭、吸菸、清掃、雷射列印或建築滲漏等室內來源。
CO₂ 偏高、室外 PM 也高
HEPA 濾網能處理粒子,卻不會移除 CO₂;直接開窗可改善 CO₂,又可能把室外粒子帶進來。這時需要有過濾的機械換氣、分時換氣、來源管理,或依房屋條件安排換氣與淨化的優先順序。
四種情況都要保留手動覆寫。烹飪、睡眠、會議或對噪音敏感時,住戶的操作需求可能比自動升到最高風量更重要。
一顆節點要先解決電源、匯流排與風道
本機空品節點可用 ESP32 搭配 PM、CO₂、VOC/NOx 與溫濕度模組。不過正式部署時,腳位數量通常不是主要風險。
| 工程面向 | 試作時要確認 | 長期部署常見問題 |
|---|---|---|
| 供電 | PM 風扇、CO₂ 光源與 Wi-Fi 同時工作時是否掉壓 | 品質不佳的 USB 電源、細線與接頭造成隨機重啟 |
| 介面 | PMSX003 在 ESPHome 使用 UART;SPS30 官方元件目前只實作 I²C | I²C 線太長、位址衝突、上拉電阻不合適 |
| 熱設計 | 感測區是否遠離 ESP32、穩壓器和顯示器 | 機殼內升溫使溫度偏高、相對濕度偏低 |
| 空氣交換 | 進氣與排氣是否分開,開孔是否被牆面或濾網遮住 | 排氣回吸、死體積過大、油霧與粉塵累積 |
| 維修 | 接頭、感測器與外殼能否拆換 | 杜邦線鬆脫、節點無標示、同型號備品無法快速替換 |
SCD4x 類 CO₂ 模組使用 I²C,並能輸出溫濕度;其溫度讀值會受外殼與鄰近熱源影響。SGP40 是 I²C 的 VOC 感測器;SGP41 另有 NOx pixel,可形成 VOC 與 NOx 兩種指標。兩者都是 MOx 交叉敏感訊號的相對指標,不是特定化學物的 ppm/ppb 濃度,且必須維持官方演算法所需的取樣節奏。若啟用溫濕度補償,資料應來自同一氣流位置。環境溫濕度若要拿來控制除濕,另設位置妥當的 SHT4x 類感測器通常較容易驗證。
一份可驗證的 ESPHome 最小設定
以下範例把 PMSX003 的 PM2.5 與 SCD4x 放在同一個試點節點,並示範 API 加密、OTA 密碼與裝置端中位數濾波。GPIO、名稱、加密金鑰與密碼都必須依實機修改;範例中的金鑰只是可通過語法檢查的公開測試值,不可用於正式設備。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | esphome: name: iaq-pilot esp32: board: esp32dev framework: type: arduino logger: api: encryption: key: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" ota: - platform: esphome password: "replace-with-a-unique-ota-password" wifi: ssid: "REPLACE_ME" password: "replace-with-wifi-password" i2c: sda: GPIO21 scl: GPIO22 uart: rx_pin: GPIO16 tx_pin: GPIO17 baud_rate: 9600 sensor: - platform: pmsx003 type: PMSX003 pm_2_5: name: "IAQ Pilot PM2.5" id: iaq_pm25 filters: - median: window_size: 5 send_every: 5 send_first_at: 5 - platform: scd4x update_interval: 30s co2: name: "IAQ Pilot CO2" id: iaq_co2 temperature: name: "IAQ Pilot Temperature" humidity: name: "IAQ Pilot Humidity" |
這段設定刻意不替讀者決定 SCD4x 的自動自我校正。原廠的預設校正假設裝置每週能接觸約 400 ppm 的背景空氣;長期有人、很少充分換氣的空間,未必符合這個條件。正式設定前要先確認安裝環境,再決定是否沿用預設或安排可信的校正流程。
filters 會依列出的順序執行。上例每五筆輸出一次中位數,適合壓低孤立尖峰,但也會帶來延遲。烹飪事件、風機啟動與資料庫負擔各有不同需求,不能把五筆視為通用答案。
Home Assistant 用兩個門檻控制,不要只設一條線
先建立兩個 input_number:啟動門檻高於停止門檻。數值應由試點基線、設備能力與可接受的反應時間決定,不直接複製法規的長時間平均值。
以下自動化示範「持續超過啟動門檻三分鐘才開啟」、「低於停止門檻十分鐘才關閉」。實際的風扇實體、百分比與 helper 名稱需調整。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | alias: IAQ - PM2.5 啟動清淨機 triggers: - trigger: numeric_state entity_id: sensor.iaq_pilot_pm2_5 above: input_number.iaq_pm_start for: "00:03:00" actions: - action: fan.turn_on target: entity_id: fan.living_room_air_purifier data: percentage: 60 mode: restart |
1 2 3 4 5 6 7 8 9 10 11 12 | alias: IAQ - PM2.5 停止清淨機 triggers: - trigger: numeric_state entity_id: sensor.iaq_pilot_pm2_5 below: input_number.iaq_pm_stop for: "00:10:00" actions: - action: fan.turn_off target: entity_id: fan.living_room_air_purifier mode: restart |
數值進入 unavailable 時,以上兩段不會自動替你決定故障狀態。應再建立失聯通知,並依設備用途選擇維持、關閉或轉固定風量。Home Assistant 重新啟動或重新載入自動化時,numeric_state 的 for 等待時間不會保留;重要的舒適性控制若需要在 Home Assistant 或 Wi-Fi 中斷時繼續運作,可把最低限度邏輯留在 ESPHome 裝置端。這只降低網路與 Home Assistant 的單點故障,不等於硬體故障安全或生命安全認證。
若要自動控制抽油煙機或局部排風,必須確認原廠允許遠端控制,且補風、燃燒設備排氣、停電復歸與設備安全互鎖都已驗證;否則只發通知,由人員操作。外加繼電器不可繞過設備原有的安全設計。
感測器量到的不是同一件事
| 指標 | 常見原理 | 適合回答 | 解讀邊界 |
|---|---|---|---|
| PM1/PM2.5/PM10 | 雷射光散射後估算質量濃度 | 烹飪、香燭、清掃、室外粒子滲入與清淨機效果 | 不知道粒子化學成分;高濕、凝結、油霧與風道會影響結果 |
| CO₂ | 直接光學量測;SCD4x 為光聲式 NDIR | 人員活動與換氣趨勢 | 不是所有空氣污染的總分;校正假設、氣壓與測點會影響解讀 |
| VOC/NOx 指標 | MOx 原始訊號加 Gas Index Algorithm | 相對近期基線的氣體事件 | 不是 ppm/ppb,無法辨識甲醛、酒精、油煙或黴菌 |
| 溫度/相對濕度 | 電容式濕度與溫度量測 | 除濕、凝結風險、舒適與其他感測器補償 | 熱源與機殼通風可造成固定偏差或隨負載漂移 |
ESPHome 會以元件要求的 1 Hz 節奏驅動 SGP4x;update_interval 管的是對外發布頻率,不是把晶片改成每分鐘才量一次。演算法狀態若在每次重啟後都丟失,近期基線會反覆重新學習,因此部署時還要監看 uptime、重啟次數與狀態還原。
BME68x 類元件也需要區分原始氣體阻值與演算法輸出。原始阻值應按原意標示;若顯示 IAQ 或類似分數,必須說明使用的演算法、暖機與狀態保存方式,不能改名成實驗室濃度。
用事件測試找測點
正式鎖牆前,把節點在候選位置各放幾天,用日常事件比較反應。測點的目標不是「量到整間房子的平均」,而是能穩定回答控制問題。
| 控制目的 | 建議測點 | 應避開的位置 | 驗證事件 |
|---|---|---|---|
| 改善臥室換氣 | 一般呼吸區、遠離床頭直吹與門窗縫 | 正對人的呼氣、冷氣出風口、窗邊 | 比較入睡後上升、換氣啟動後回落速度 |
| 判斷空調混合空氣 | 回風附近但不阻礙風道 | 送風口正前方 | 開關空調、切換風量,觀察數值是否只受送風溫度支配 |
| 追查烹飪逸散 | 廚房外圍或相鄰空間的代表位置 | 爐火、蒸氣和油煙正上方 | 記錄抽油煙機開啟前後 PM 峰值與回落時間 |
| 控制浴室或牆角潮濕 | 可反映空間濕度、又不直接淋水的位置 | 出風口正前方、冷凝水可能滴落處 | 洗澡後記錄排風與除濕所需時間 |
| 建立室外粒子參考 | 遮雨、通風且遠離自家排風的位置 | 排油煙口、車庫口、日曬密閉盒 | 與鄰近官方測站和室內滲入事件比對 |
移動節點時要留下日期與位置。若半年後曲線改變,沒有移位紀錄就很難判斷是季節、住戶行為,還是感測器搬家造成。
本機系統仍要盤點資料會去哪裡
把節點留在區網,只是縮小資料出口的第一步。圖三把 ESPHome、Home Assistant、Recorder、備份、致動器與外部通知分開,方便逐項設定權限與保留期。

只寫 api: 並不會自動啟用加密。ESPHome 節點應使用每台不同的 API encryption key 與 OTA 密碼,關閉不需要的 Web Server 和除錯入口,也不應直接暴露在公網。IoT 網段的防火牆規則要保留節點與 Home Assistant、DNS、時間同步及管理端真正需要的本機流向。
Home Assistant Recorder 可用 include/exclude 控制哪些實體進資料庫。原始 state 與短期統計依保留策略清除,預設是 10 天;具有有效 state_class、而且確實被 Recorder 記錄的感測器,才會進入每小時長期統計管線。長期統計不會隨一般 Recorder purge 自動刪除,因此縮短 purge_keep_days 並不代表所有長期資料都消失。
CO₂、濕度與烹飪事件的長期曲線,可能間接反映作息與房間佔用。若啟用遠端存取、手機推播或雲端備份,需另外設定存取權限、加密與刪除週期;Recorder 位於本機不會自動完成這些工作。
臺灣法規數值有平均時間與適用場所
臺灣《室內空氣品質標準》列出的部分項目如下:
| 項目 | 標準值 | 法定平均時間 |
|---|---|---|
| CO₂ | 1,000 ppm | 八小時值 |
| CO | 9 ppm | 八小時值 |
| 甲醛 | 0.08 ppm | 一小時值 |
| TVOC | 0.56 ppm | 一小時值 |
| PM2.5 | 35 μg/m³ | 二十四小時值 |
| PM10 | 75 μg/m³ | 二十四小時值 |
法規管理核心是依法公告的場所;私人住宅不能直接套用相同的定期檢測與裁罰義務。表中的 TVOC 也有指定 12 種揮發性有機物濃度總和的定義,與 SGP4x 的 VOC 指標、BME68x 演算法分數或消費型裝置顯示的 TVOC 並非同一種量測。
一分鐘讀值無法直接與依法定方法取得的一小時、八小時或二十四小時平均結果畫等號。家用節點適合觀察趨勢、事件與設備效果,不是法定檢測儀器或醫療診斷工具。若懷疑燃燒廢氣、甲醛或特定化學污染,應使用合適儀器並尋求合格人員。
一般空品節點也不取代合格的一氧化碳與住宅火災警報器。CO₂ 與 CO 是不同氣體,VOC、CO₂ 或 PM 模組不應承擔生命安全警報設備的責任。若 CO 警報器響起,或多人同時出現頭痛、暈眩、噁心、意識混亂、胸痛或呼吸困難,應立即離開到戶外新鮮空氣處並聯絡消防或緊急醫療服務;不要留在室內等待儀表板恢復,也不要先尋找來源。
DIY、可本機整合成品與工業設備的選擇
| 路線 | 適合情況 | 優點 | 需承擔的工作 |
|---|---|---|---|
| ESPHome DIY 節點 | 能處理配線、韌體、機構與維護 | 設定可追蹤,容易加入特殊控制與故障訊號 | 電源、外殼、校正、備品與文件都由自己負責 |
| 可本機整合的成品 | 想快速部署,仍要求 LAN API | 外觀、電源與安裝通常較完整 | 驗證帳號需求、離線行為、韌體更新與 API 是否長期可用 |
| Modbus/Ethernet 工業設備 | SI、辦公室、機房或固定維護專案 | 供電與介面較適合固定安裝,便於納入既有控制 | 成本、體積、校正服務與 Home Assistant 轉接工作較高 |
採購時要求完整型號、感測原理、輸出語意、校正條件、維護方法、離線行為與韌體政策。商品只寫「高精度」、「TVOC」或「支援智慧家庭」,仍不足以判斷是否適合長期控制。
四個部署後常見問題
Home Assistant 還顯示最後一筆值,怎麼知道節點已離線?
儀表板同時顯示 unavailable、最後更新時間與裝置 uptime。測試時拔掉節點電源,確認控制自動化不會把最後一筆正常值繼續當成即時值,並驗證通知和致動器安全狀態。
CO₂ 到多少一定要開窗?
沒有適合所有房間的單一瞬時值。先記錄一週的人數、時段、室外條件與回落速度,再訂初始啟停門檻;若使用機械換氣,也要核對風量和噪音。法規的八小時值不能直接改成一分鐘自動化門檻。
感測器怎樣比對才有意義?
把多顆感測器放在同一位置,於熱平衡後涵蓋正常、烹飪、換氣與高濕等事件。先看偏差是否固定、是否只在某些條件放大,再依確切型號規格判斷。這種同位置比對能找出異常節點,但不等於可追溯校正。
沒有可控的換氣或清淨設備,還值得監測嗎?
可以,但通知只保留住戶能採取的動作,例如提醒開啟抽油煙機、檢查窗戶或移除污染來源。若每次告警都無法處理,很快就會形成告警疲勞;這時應先調整通知條件,而不是增加更多感測器。
結論:用試點結果決定是否擴充
兩週後,檢查曲線能否重現日常事件、設備動作是否帶來可見改善、失聯是否會被發現,以及另一位維護者能否依文件重建節點。若讀值仍無法解釋設備效果,先處理位置、供電、風道與資料品質。
完成這些驗證後,再把相同方法擴充到臥室、廚房或其他區域。每增加一顆節點,都應同時增加型號、位置、韌體設定、校正條件與故障處理紀錄,否則數量增加只會讓日後維護更困難。

發佈留言
很抱歉,必須登入網站才能發佈留言。