第 8 章

組合裝置與關聯實體

把分散的 Home Assistant sensors、selects、switches 與 buttons 連到一個主要 Matter endpoint,並分清自動 feature flags、明確 linked fields、composed sub-endpoints 與 Controller 支援。

HA 的多個實體不一定要變成多張 Controller 卡片

許多整合把一台實體裝置拆成主控制 entity、電池、溫濕度、功率、累積能源、模式 select 與動作 button。若每個 entity 都各自成為 Matter endpoint,Controller 可能顯示大量碎片,或無法把輔助數值放到正確 cluster。Entity Mapping 的 linked fields 讓你指定「哪個 entity 是哪一種資料來源」;composedEntities 則把額外 entities 建成同一 BridgedNodeEndpoint 下的 sub-endpoints。

組合前要先確認 unit、device_class、state 語意與更新頻率。把 current sensor 填進 voltage 欄位不會因為欄位名稱而自動轉換正確;把不同實體設備的電池 sensor 接到主 entity 也會造成錯誤警告。每次只建立一組 link,回到 Devices card 檢查 mapping 與 cluster。

版本邊界:本章欄位位於 Stable 2.0.55。electrical_utility_meter 是 Stable 內可選用的 Matter 1.4 override,固定來源沒有把它標為實驗性:Apple/Google/Alexa 不支援、Aqara 未驗證、SmartThings 支援。EVSE 是 Stable override:Apple/Google/Alexa 不支援、Aqara 支援、SmartThings 未驗證;bridged EVSE 可能破壞 Alexa 裝置辨識,不可放進 Alexa Bridge。

自動映射、明確連結與 Composed Sub-Endpoint

模型啟用位置適用資料限制
自動 mappingBridge feature flags同一 HA device 的 battery、humidity、pressure、power、energy依 registry 關聯與 device class 推導;不涵蓋所有 vacuum、EVSE、lock 或 select helper。
明確 linked fieldEntity Mapping dialogbatteryEntity、powerEntity 等單一用途欄位由你負責選對 entity、unit 與語意;特定欄位只在相符 domain/type 顯示。
composedEntitiesEntity Mapping 的 composed 清單額外 entityId 與可選 matterDeviceType,形成 sub-endpoint來源註解明確要求 autoComposedDevices;每筆空 entityId 會在儲存前濾掉。

autoComposedDevices 是自動組合 master toggle:開啟後同時允許 battery、humidity、pressure、power、energy 自動合併。autoBatteryMapping 預設 false;autoHumidityMapping 與 autoPressureMapping 預設 true。手動填 batteryEntity 等欄位是明確映射,不應在文件中說成由 flag 自動找到。

Devices card 會列出 mapping 中 battery、humidity、pressure、power、energy、voltage、current、battery power/energy、charging switch、current limit 等關聯,並據此標記對應 clusters。這個卡片資訊同時可能來自 runtime auto mapping 與保存 mapping;判讀時回到 Bridge flags 與 entity mapping 交叉確認。

Battery、溫濕壓、濾網與 Fault

欄位資料來源/效果注意
batteryEntity電池百分比 sensor,附加 PowerSource cluster可用於各類 sensor;與 auto battery mapping 重疊時以實際 mapping 檢查。
disableBatteryMapping阻止同 device 自動 battery 或 entity 自身 battery attributes 附加適合市電裝置卻被整合錯報 battery;預設 false。
temperatureEntity將溫度 sensor 連到 fan/air purifier 等主 endpointUI 在 air_purifier 明確 type 顯示;選正確溫度 unit 與有效 state。
humidityEntity把濕度加入 temperature sensor 或 fan/air purifier可建立溫濕度組合;不同於 autoHumidityMapping 的自動同-device 推導。
pressureEntity把氣壓加入 temperature sensor形成溫度+壓力組合;不同於 autoPressureMapping。
filterLifeEntity0–100 的濾網壽命 sensor,供 air purifier HEPA filter 監測UI 對 fan 自動偵測或 air_purifier type 顯示。
faultEntity同裝置的 problem/safety binary sensor,驅動 smoke/CO alarm 的 hardwareFaultAlert在 EntityMappingConfig 有宣告;v2.0.55 的 EntityMappingRequest 與 dialog 沒有此欄位,不能宣稱可由現有 UI 儲存。視為來源層能力缺口,不手改 storage。
chargingStateEntityvacuum 專用充電狀態 sensor,直接驅動 Matter batChargeState取代由 docked+battery level 推導;profile v1 不包含此欄位。

Battery Storage 另有 batteryPowerEntity 與 batteryEnergyEntity,不要與一般裝置的 battery percent 混淆。前者描述家庭儲能的充放電功率與 lifetime throughput;batteryEntity 描述裝置本身電量來源。

Power、Energy、Voltage、Current、Utility Meter 與 EVSE

欄位預期 entity/值Matter 作用
powerEntitydevice_class power、功率單位 sensor加入 ElectricalPowerMeasurement 即時功率。
energyEntitydevice_class energy、累積能源 sensor加入 ElectricalEnergyMeasurement 累積能源。
voltageEntitydevice_class voltage sensor併入同裝置 ElectricalPowerMeasurement。
currentEntitydevice_class current sensor併入同裝置 ElectricalPowerMeasurement。
batteryPowerEntity家庭儲能功率;HA 正值放電、負值充電BatteryStorage 側充電回報 imported 正值、放電回報 exported 負值。
batteryEnergyEntity家庭儲能 lifetime energyBatteryStorage 的 ElectricalEnergyMeasurement。
meterSerialNumber文字 meter serial只有 electrical_utility_meter 保存,透過 MeterIdentification 回報;未填回報 unavailable。文件只用 <METER_SERIAL>。
pointOfDelivery文字 metering point ID只有 utility meter type 保存;文件只用 <POINT_OF_DELIVERY>,不得公開實際供電識別。
chargingSwitchEntityEVSE 充電啟停 switchEnableCharging 開啟,Disable 關閉。
currentLimitEntity以安培為值的 number entity設定與回報最大充電電流;寫入會夾在合理範圍。

一般 switch/light/plugin unit 可連 power 與 energy;on_off_switch 被呈現為 plain On/Off Light,UI 不提供電力欄位。electrical_meter、solar_power、electrical_sensor、electrical_utility_meter 會顯示完整 power/energy/voltage/current 群組。EVSE 顯示 charging switch、current limit 與可選 power/energy,避免與一般群組重複。

成熟度與支援:Utility Meter 是 Stable 內 opt-in Matter 1.4 override,並非來源指定的 experimental;Apple/Google/Alexa no、Aqara unknown、SmartThings yes。EVSE 為 Stable opt-in override;Apple/Google/Alexa no、Aqara yes、SmartThings unknown。能建立 endpoint 不等於 Controller 一定顯示,EVSE 也不得放入 Alexa Bridge。

Lock、Vacuum、Fan、Cover、Select 與 Climate 完整 Helpers

Lock

  • disableLockPin:單一 lock 不要求 credential 驗證;若系統有設定 credential,預設仍要求。不得在文件填實際 lock code。
  • lockUsercodeService:選配 HA service,把 Controller 設定/清除的 credential 同步到實體 lock;未設定時只保存在 Matter Hub。這是 opt-in 寫入外部裝置的行為,先確認整合服務語意。
  • lockUsercodeSlot:實體 lock 的 code slot,預設 1;UI 只接受 1 以上整數。
  • lockPinMinLength/lockPinMaxLength:廣告給 Controller 的長度 1–20,預設 4/8;固定 attributes 可能被 Controller 快取到重新配對。只記錄長度,不記錄實際 credential。

Vacuum 與區域

  • cleaningModeEntity:清潔模式 select;未指定時 backend 可由 vacuum entity ID 推導慣例名稱。
  • suctionLevelEntity、mopIntensityEntity:吸力與拖地水量 select,為 cleaning modes 增加 intensity variants。
  • roomEntities:room/scene button 陣列;Matter 選房後按對應 button。UI 可讀相關 buttons,也允許輸入 entity ID。
  • currentRoomEntity:目前房間 sensor;cleanedAreaEntity:累積清掃面積 sensor,搭配每區 sizeSqm 推進 progress。
  • vacuumAscendingRoomOrder:依 area ID 升冪 dispatch,不依 Controller 選取順序;同時影響 current 與 progress 歸屬。
  • vacuumRoomSwitches:每區建立 momentary sibling switch,供不能發 array command 的平台例行程序使用。
  • disableCustomAreaRoomModes:不把 custom areas 建成 per-room RvcRunMode,讓 Apple Home 使用多房 area picker;Google/Alexa 依賴 modes 時應保持關閉。
  • valetudoIdentifier:保留 Valetudo MQTT identifier 的精確大小寫;未設時由小寫 entity ID 推導。
  • customFanSpeedTags:HA option 字串到 Matter ModeTag number 的 map,覆蓋預設 speed tags。
  • cleanAreaRooms:runtime 在 vacuum 支援 HA 2026.3 CLEAN_AREA 時自動填入,用 HA area 到 Matter ServiceArea ID 的 mapping;不是 dialog 的人工欄位。

customServiceAreas 每區含必填 name、service,可選 target、plain-object data、batchDispatch 與 sizeSqm。batchDispatch 會以第一個匹配區的 service/target 當模板,能合併 arrays、以逗號串 primitive 並注入選取 metadata;預設逐區 dispatch。data 必須是 JSON object,array 或 primitive 會被 UI 判無效。服務會造成真實裝置動作,先在 HA 以最小範圍驗證。

Fan、Cover、Select、Climate 與 Momentary

  • fanWindPresets.natural/.sleep:本地化 HA preset 名稱陣列映射 Matter wind modes;UI 以逗號分隔輸入。
  • fanRestoreSpeedOnPowerOn:fan 從 off 開啟時忽略 Controller 注入的 100%/High,恢復上次速度;較低速度仍可在 off 時指定。
  • coverSwapOpenClose:單一 cover 交換開關並覆蓋 Bridge flag;coverExposeAsDimmableLight:Alexa workaround,以 level 當 position、on/off 當開關,沒有 stop,且不應放進 Alexa room 的 lights 群組。
  • selectExposeAsSwitch 搭配 selectSwitchOnOption/selectSwitchOffOption:把 select/input_select 轉成開關,兩個 option 必須精確符合;變更後需要重新配對該裝置。
  • disableClimateOnOff:略過 climate OnOff,避免房間關閉語音呼叫 climate.turn_off。
  • disableClimateFanControl:略過 FanControl,改為 ThermostatDevice,以相容不認 RoomAirConditioner 的 Controller;HA 仍可控制 fan modes。
  • climateKeepModeOnIdle:HA off+hvac_action idle 時仍回報上次模式,讓內部清潔週期可取消;HA 與 Matter 暫時刻意不同。
  • climateExposeFan:同 HA climate 建立 companion Fan tile;需 entity 回報 FAN_MODE,會把該 AC 重新註冊為 composed device並造成此 AC 一次性重新配對。
  • climateAutoMode:只可 heat 或 cool,固定 single-setpoint auto climate 的 Matter 方向。
  • disableMomentaryFlip:script、scene、automation、input_button、button 不送 optimistic on→off report,底層 HA action 仍執行;針對部分 Echo 被此 report pair 卡住的 workaround。

Throttle 與 Debounce 不可互換

欄位方向範圍/優先序用途
coverSliderDebounceMsController → HA commandper-entity UI 只接受正值並夾到 5000;空/0 回退 Bridge 或內建等待 slider 最後寫入,避免 cover 先移往中間值。
fanSliderDebounceMsController → HA commandper-entity 優先於 Bridge,UI 夾到 5000;空/0 回退或立即送合併連續 fan speed writes,降低 IR/UART 重複命令。
updateThrottleMsHA state → Matter reportUI 正值,最大 60000;0/空維持預設限制 chatty power/energy sensors 至多每 N ms 一次更新。

Debounce 等「最後一次」輸入後才執行,會增加控制延遲;Throttle 限制輸出報告頻率,可能略過中間狀態。你不應用 updateThrottleMs 解決窗簾多次移動,也不應用 fan debounce 解決功率 sensor 報告過密。先從單一 entity、小數值測試,再依 log 與操作體感調整。

profile v1 會攜帶 cover/fan debounce,但不包含 updateThrottleMs。若以 profile 搬設定,匯入後必須手動核對 throttle;也不要假設 Bridge 的全域 debounce 被 mapping profile 搬走。

建立一個可回復的 Linked Mapping

  1. 確認主 entity 與同裝置來源

    在 Home Assistant 唯讀確認主 entity、device 關聯、各 sensor 的 device_class、unit 與有效 state。記錄為本地清單,不在文件貼 live entity ID 或供電識別。

  2. 確認 Bridge 自動 flags

    檢查 autoComposedDevices、auto battery/humidity/pressure。若自動結果已正確,不再重複手動連結;若只一台例外,優先使用 Entity Mapping。

  3. 開啟主 entity Mapping

    在 Devices card 按 Edit Mapping,保持正確主 Matter type。依欄位 autocomplete 選 battery、humidity、power 等來源;只有相符 type/domain 才會顯示專用群組。

  4. 設定一組 helper

    一次只填同一目的的欄位,例如 power+energy,或 humidity+pressure。需要額外 sub-endpoint 才加入 composed entity,並確認 Bridge 已開 autoComposedDevices。

  5. 儲存並檢查 endpoint

    回 Devices card 展開 clusters,確認關聯 entity labels 與數值。若 endpoint failed,先刪除剛加入的 mapping 回到基準,不要 reset Bridge。

  6. 做 Controller 特定驗證

    依 support chips 與 maturity 檢查目標 Controller。電力/utility/EVSE 先確認是否顯示,再測讀值;lock、vacuum service area 等會下命令的功能只做經授權的最小測試。

回復點:刪除單一 mapping 可回到自動偵測;關閉 auto flag 可停止自動組合。會改 endpoint topology 的 composed entity、climate companion fan 或 select-as-switch 可能需要重新探索/配對該裝置,因此操作前先保留原 mapping。

組合與關聯實體排錯

  1. 手動 link 儲存後沒有數值

    檢查 linked entity state 是否可用、device_class 與 unit 是否符合欄位。autocomplete 選得到不代表數值語意正確;先清除該 link,確認主 endpoint 恢復。

  2. Composed Entities 沒有成為 sub-endpoint

    確認 Bridge 已開 autoComposedDevices,每筆 composed entityId 非空且 type 可支援。再看 failed entities;不要把一般 linked field 誤當 composed sub-endpoint。

  3. 市電裝置在 Controller 顯示低電量

    檢查是否由 auto battery、手動 batteryEntity 或 entity 自身 battery attribute 加入。對該主 entity 開 disableBatteryMapping,不要全域關閉所有裝置的 battery。

  4. Utility Meter/EVSE endpoint 不顯示

    先讀固定矩陣:Utility Meter 為 Stable opt-in override,只有 SmartThings yes;EVSE 只有 Aqara yes,且不得加入 Alexa Bridge。其他 no/unknown 平台應還原為 Controller 支援的 type,不要反覆改 identity 或 commissioning。

  5. Vacuum room progress 錯位

    確認 currentRoomEntity、cleanedAreaEntity、每區 sizeSqm 與實際 dispatch 順序。若機器按 area ID 排序,才開 vacuumAscendingRoomOrder;否則維持 Controller 選取順序。

  6. Slider 操作延遲或裝置連續動作

    分辨方向:連續 command 用 cover/fan debounce;過密 state report 用 update throttle。逐步調小/清空 per-entity 值回退 Bridge 預設,不要同時改全域與單體。

  7. 找得到 faultEntity 說明但 UI 沒欄位

    這是 v2.0.55 型別與 request/dialog 的落差。不要手改 storage 或杜撰操作;保留預設 smoke/CO mapping,等待有正式 API/UI 支援的版本。

Composed/Linked Entity 常見問題

開 Auto Composed Devices 後還需要手動 mapping 嗎?
視裝置而定。master toggle 自動處理同 HA device 的 battery、humidity、pressure、power、energy;EVSE current limit、vacuum selects、lock service、utility meter identification 等仍是明確 helper。
composedEntities 與 humidityEntity 相同嗎?
不同。前者建立帶 entityId/可選 type 的 sub-endpoint 並要求 autoComposedDevices;後者把濕度資料連到主要裝置的相關 cluster。
可以把任何 sensor 填進 powerEntity 嗎?
不應。來源註解要求 power device_class 與相符功率單位。欄位不會替錯誤語意做可靠修正,應先核對 HA state metadata。
Lock helper 會把實際 credential 放進教學或 profile 嗎?
本章只說明 disable、service、slot 與長度 metadata,絕不記錄實際 credential。Mapping profile 也不是分享秘密資料的管道,匯出後仍要人工檢查。
updateThrottleMs 越大越穩定嗎?
不一定。值越大,Controller 看到更新的頻率越低。它適合 chatty sensors,不適合需要即時狀態的控制 entity;從單一 entity 的小範圍開始。

Stable 2.0.55 固定版本來源