組合裝置與關聯實體
把分散的 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。
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
| 模型 | 啟用位置 | 適用資料 | 限制 |
|---|---|---|---|
| 自動 mapping | Bridge feature flags | 同一 HA device 的 battery、humidity、pressure、power、energy | 依 registry 關聯與 device class 推導;不涵蓋所有 vacuum、EVSE、lock 或 select helper。 |
| 明確 linked field | Entity Mapping dialog | batteryEntity、powerEntity 等單一用途欄位 | 由你負責選對 entity、unit 與語意;特定欄位只在相符 domain/type 顯示。 |
composedEntities | Entity 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 等主 endpoint | UI 在 air_purifier 明確 type 顯示;選正確溫度 unit 與有效 state。 |
humidityEntity | 把濕度加入 temperature sensor 或 fan/air purifier | 可建立溫濕度組合;不同於 autoHumidityMapping 的自動同-device 推導。 |
pressureEntity | 把氣壓加入 temperature sensor | 形成溫度+壓力組合;不同於 autoPressureMapping。 |
filterLifeEntity | 0–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。 |
chargingStateEntity | vacuum 專用充電狀態 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 作用 |
|---|---|---|
powerEntity | device_class power、功率單位 sensor | 加入 ElectricalPowerMeasurement 即時功率。 |
energyEntity | device_class energy、累積能源 sensor | 加入 ElectricalEnergyMeasurement 累積能源。 |
voltageEntity | device_class voltage sensor | 併入同裝置 ElectricalPowerMeasurement。 |
currentEntity | device_class current sensor | 併入同裝置 ElectricalPowerMeasurement。 |
batteryPowerEntity | 家庭儲能功率;HA 正值放電、負值充電 | BatteryStorage 側充電回報 imported 正值、放電回報 exported 負值。 |
batteryEnergyEntity | 家庭儲能 lifetime energy | BatteryStorage 的 ElectricalEnergyMeasurement。 |
meterSerialNumber | 文字 meter serial | 只有 electrical_utility_meter 保存,透過 MeterIdentification 回報;未填回報 unavailable。文件只用 <METER_SERIAL>。 |
pointOfDelivery | 文字 metering point ID | 只有 utility meter type 保存;文件只用 <POINT_OF_DELIVERY>,不得公開實際供電識別。 |
chargingSwitchEntity | EVSE 充電啟停 switch | EnableCharging 開啟,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,避免與一般群組重複。
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 不可互換
| 欄位 | 方向 | 範圍/優先序 | 用途 |
|---|---|---|---|
coverSliderDebounceMs | Controller → HA command | per-entity UI 只接受正值並夾到 5000;空/0 回退 Bridge 或內建 | 等待 slider 最後寫入,避免 cover 先移往中間值。 |
fanSliderDebounceMs | Controller → HA command | per-entity 優先於 Bridge,UI 夾到 5000;空/0 回退或立即送 | 合併連續 fan speed writes,降低 IR/UART 重複命令。 |
updateThrottleMs | HA state → Matter report | UI 正值,最大 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
確認主 entity 與同裝置來源
在 Home Assistant 唯讀確認主 entity、device 關聯、各 sensor 的 device_class、unit 與有效 state。記錄為本地清單,不在文件貼 live entity ID 或供電識別。
確認 Bridge 自動 flags
檢查
autoComposedDevices、auto battery/humidity/pressure。若自動結果已正確,不再重複手動連結;若只一台例外,優先使用 Entity Mapping。開啟主 entity Mapping
在 Devices card 按 Edit Mapping,保持正確主 Matter type。依欄位 autocomplete 選 battery、humidity、power 等來源;只有相符 type/domain 才會顯示專用群組。
設定一組 helper
一次只填同一目的的欄位,例如 power+energy,或 humidity+pressure。需要額外 sub-endpoint 才加入 composed entity,並確認 Bridge 已開 autoComposedDevices。
儲存並檢查 endpoint
回 Devices card 展開 clusters,確認關聯 entity labels 與數值。若 endpoint failed,先刪除剛加入的 mapping 回到基準,不要 reset Bridge。
做 Controller 特定驗證
依 support chips 與 maturity 檢查目標 Controller。電力/utility/EVSE 先確認是否顯示,再測讀值;lock、vacuum service area 等會下命令的功能只做經授權的最小測試。
組合與關聯實體排錯
手動 link 儲存後沒有數值
檢查 linked entity state 是否可用、device_class 與 unit 是否符合欄位。autocomplete 選得到不代表數值語意正確;先清除該 link,確認主 endpoint 恢復。
Composed Entities 沒有成為 sub-endpoint
確認 Bridge 已開
autoComposedDevices,每筆 composed entityId 非空且 type 可支援。再看 failed entities;不要把一般 linked field 誤當 composed sub-endpoint。市電裝置在 Controller 顯示低電量
檢查是否由 auto battery、手動 batteryEntity 或 entity 自身 battery attribute 加入。對該主 entity 開
disableBatteryMapping,不要全域關閉所有裝置的 battery。Utility Meter/EVSE endpoint 不顯示
先讀固定矩陣:Utility Meter 為 Stable opt-in override,只有 SmartThings yes;EVSE 只有 Aqara yes,且不得加入 Alexa Bridge。其他 no/unknown 平台應還原為 Controller 支援的 type,不要反覆改 identity 或 commissioning。
Vacuum room progress 錯位
確認 currentRoomEntity、cleanedAreaEntity、每區 sizeSqm 與實際 dispatch 順序。若機器按 area ID 排序,才開 vacuumAscendingRoomOrder;否則維持 Controller 選取順序。
Slider 操作延遲或裝置連續動作
分辨方向:連續 command 用 cover/fan debounce;過密 state report 用 update throttle。逐步調小/清空 per-entity 值回退 Bridge 預設,不要同時改全域與單體。
找得到 faultEntity 說明但 UI 沒欄位
這是 v2.0.55 型別與 request/dialog 的落差。不要手改 storage 或杜撰操作;保留預設 smoke/CO mapping,等待有正式 API/UI 支援的版本。