找回密碼
 立即註冊
    查看: 21|回覆: 0

    哪些 Home Assistant 實體進得了「家庭」App:完整對照表與五種轉換做法

    [複製鏈接]

    !lvup!   100%

    384

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005869
    發表於 2026-9-21 11:07:24 | 顯示全部樓層 |閱讀模式
    把實體丟進 HomeKit Bridge 之後,結果通常是三種之一:
    出現而且正常、出現但變成奇怪的東西、完全沒出現。

    這一篇把三種情況各自的原因、怎麼判斷、怎麼修,一次講完。
    讀完你會知道手上任何一個實體會變成什麼,以及不滿意的話怎麼改。

    哪些 Home Assistant 實體進得了「家庭」App:完整對照表與五種轉換做法

    先建立正確的心智模型:HomeKit 看的是網域和 device_class

    Home Assistant 的 HomeKit 整合在啟動時,會對每一個要橋接的實體做兩件事:


    • 看它的網域(entity_id 的第一段,light / switch / sensor / binary_sensor…)決定大方向
    • 看它的device_class 與單位決定變成哪一種 HomeKit 配件


    兩件事都對,才會變成你想要的東西。
    很多人只改了其中一個,然後對著「怎麼還是不對」發呆。

    對照表一:開關類(這些都支援,而且很多人以為不支援)

    下面這些網域全部以「開關」的形式出現在「家庭」App:


    • switch —— 一般開關
    • input_boolean —— 輔助元件的開關,支援
    • input_button、button —— 按鈕,按下去執行然後自己彈回,支援
    • script —— 腳本,按下去執行,支援
    • scene —— 場景,支援
    • automation —— 自動化,變成一個可以開關的開關(開關的是「啟用/停用」)
    • vacuum —— 掃地機,變成一個開關(只能開始/停止,看不到狀態)
    • lawn_mower —— 割草機
    • remote —— 遙控器(不支援「活動」的那種)


    網路上很多教學說 input_boolean 和 input_button 不能橋接,那是舊資訊。
    現在直接收進 filter 就會出現,不需要用 template switch 包一層。

    input_select 和 select 也支援,不過型態特別:它會變成一個
    延長線型的配件(power strip),每一個選項是上面的一個插座按鈕。
    按下「看電影」那個按鈕就等於把 input_select 切到「看電影」。

    對照表二:感測器類

    binary_sensor(只有開/關兩種狀態的),支援這十種 device_class:


    • door、window、garage_door、opening —— 門窗接觸
    • motion —— 動作偵測
    • occupancy —— 佔用偵測
    • smoke —— 煙霧
    • gas —— 可燃氣體
    • co2 —— 二氧化碳
    • moisture —— 漏水


    這裡有一個很關鍵、而且跟直覺相反的行為:
    不在清單裡的 device_class,不會被跳過,而是會被當成 occupancy(佔用偵測)。

    所以一個 device_class: running 的 binary_sensor,送過去之後
    會出現,只是「家庭」App 裡顯示成「偵測到/未偵測到」。

    這件事的實務意義是:binary_sensor 沒出現的話,原因絕對不是 device_class,
    去查 filter 有沒有把它收進來、實體當下是不是 unavailable。
    很多人在這裡浪費一整個晚上去改 device_class。

    數值型 sensor,只有六種對得上,而且每一種都有明確的判定條件:


    • 溫度 —— device_class 是 temperature而且單位是 °C 或 °F
    • 濕度 —— device_class 是 humidity而且單位是 %
    • 光照 —— 單位是 lx 或 lm,或者 device_class 是 illuminance
    • 空氣品質 —— device_class 是 gas / pm10 / pm25 / nitrogen_dioxide / volatile_organic_compounds,或者 entity_id 裡含有 gas / pm10 / pm25 字樣
    • 二氧化碳 —— device_class 是 carbon_dioxide,或者 entity_id 裡含有 co2
    • 一氧化碳 —— device_class 是 carbon_monoxide


    溫度和濕度是「兩個條件都要成立」,這是最常中的坑:
    device_class 設對了但單位寫成 "C" 而不是 "°C",它就不會出現,而且日誌不會特別講。

    空氣品質和二氧化碳則寬鬆很多,連 entity_id 裡有那幾個字都算。
    所以一個叫 sensor.bedroom_pm25_raw 的東西就算沒設 device_class 也會被當成空氣品質感測器 ——
    這也解釋了某些「我明明沒設定它為什麼跑出來」的情況。

    對照表三:其他網域


    • light —— 燈,支援開關、亮度、RGB 色彩
    • cover —— device_class 是 garage 或 gate 的變成車庫門;支援 set_cover_position 的變成窗簾;device_class 是 door 的變成門
    • climate —— 冷暖氣。有兩段以上風速或可關閉的擺葉,會變成 Heater Cooler 型態(模式、溫度、風速、擺葉在同一張卡);其他變成 Thermostat
    • fan —— 風扇。綁了 PM2.5 感測器的話會自動變成空氣清淨機
    • humidifier —— 加濕機與除濕機
    • water_heater —— 熱水器
    • valve —— 閥門
    • alarm_control_panel —— 保全系統
    • media_player —— 會變成一組開關(開關機、播放暫停、播放停止、靜音),要在 entity_config 裡用 feature_list 指定要哪幾個
    • device_tracker、person —— 變成佔用偵測(occupancy)感測器
    • 裝置觸發(device_automation) —— 支援觸發的裝置(例如 Zigbee 無線按鈕)會變成 HomeKit 的「可程式化開關」,能直接拿來當 HomeKit 自動化的觸發來源


    真正完全不支援的


    • 文字狀態的 sensor(例如「洗衣機:脫水中」)
    • 功率、電壓、電流、用電量、氣壓、風速、雨量、距離、重量、流量
    • input_number、number、input_text、text
    • counter、timer


    這些不會出現,而且不會有紅字錯誤,症狀就是「它就是沒有」。

    不會有紅字錯誤

    步驟 1:先確認實體現在到底是什麼樣子

    動手改之前先看清楚,不然你會改錯東西。


    • 設定 → 工具 → 狀態
    • 在「實體」欄位輸入你的實體 ID
    • 看右邊的屬性區塊


    你會看到什麼:類似這樣的屬性清單。
    1. device_class: temperature
    2. state_class: measurement
    3. unit_of_measurement: °C
    4. friendly_name: 客廳溫度
    複製代碼

    屬性裡沒有 device_class 這一行,就是它不會被 HomeKit 認出來的原因,
    往下走步驟 2。
    有 device_class 但單位不對(例如溫度的單位是 C 而不是 °C),走步驟 3。

    步驟 2:補上 device_class(三種改法,由簡到難)

    改法 A:在介面上改(最快,適合單一實體)


    • 設定 → 裝置與服務 → 實體
    • 找到那個實體點進去 → 右上角齒輪
    • 展開「進階設定」,找到「顯示為」,選正確的類型
    • 單位也在同一頁可以改


    你會看到什麼:存檔之後回「設定 → 工具 → 狀態」,屬性裡會多出 device_class 那一行。

    這個下拉選單是灰色的、點不動,代表這個實體的整合沒有開放讓使用者改,
    走改法 B。

    改法 B:用 template 包一層鏡射實體

    原本的實體不動,另外做一個帶正確 device_class 的新實體,橋接新的那個。
    1. # configuration.yaml
    2. template:
    3.   - sensor:
    4.       - name: Living Room Temperature
    5.         unique_id: living_room_temperature_hk
    6.         device_class: temperature
    7.         state_class: measurement
    8.         unit_of_measurement: "°C"
    9.         state: "{{ states('sensor.raw_temp_reading') | float(0) }}"
    10.         availability: "{{ states('sensor.raw_temp_reading') not in ['unknown', 'unavailable'] }}"
    複製代碼

    三件事不能省:


    • unique_id —— 沒有它就不能在介面上改設定,而且 HomeKit 的配件編號是從 entity_id 算的,將來改名會掉設定
    • availability —— 來源掛掉時讓這個實體也變成不可用。不寫的話來源變 unknown 時,float(0) 會讓它變成 0 度,「家庭」App 裡就是一個永遠顯示 0 度的感測器
    • name 用英文 —— 原因看下面


    ⚠ name 寫中文的話,entity_id 會變成你認不出來的東西

    Home Assistant 產生 entity_id 時會把名稱轉成小寫英數字。
    中文會被音譯成拼音 —— 寫 name: 建議色溫,實際產生的可能是
    sensor.jian_yi_se_wen 這種東西。

    然後你在自動化裡寫 states('sensor.建議色溫'),它永遠回傳 unknown,
    而且不會報錯,因為「查詢一個不存在的實體」在 Home Assistant 裡是合法的。

    所以 name 一律用英文,要中文顯示名稱的話另外設:
    在介面上改「顯示名稱」,或是在 HomeKit 的 entity_config 裡設 name。

    確認的方法:存檔重啟後去「設定 → 工具 → 狀態」,
    在實體欄位打 sensor. 然後往下捲,看實際產生的 entity_id 是什麼,不要用猜的。

    改法 C:在 HomeKit 的 entity_config 裡直接指定型別

    這個不是改 device_class,是改「變成哪一種 HomeKit 配件」。
    只對 switch、fan、climate 三個網域有效。

    以下還有約 61% 的內容
    登入後即可閱讀完整教學

    登入繼續閱讀使用 Google 登入
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    延伸閱讀

    加入惟家 LINE 群 QR Code加入惟家 LINE 群

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-9-29 05:42 , Processed in 0.141564 second(s), 25 queries .

    快速回覆 返回頂部 返回列表