作詳解:動(dòng)態(tài)創(chuàng)建與更新 Old-Style Group 的完整指南)
Home Assistant group.set 動(dòng)作詳解動(dòng)態(tài)創(chuàng)建與更新 Old-Style Group 的完整指南【免費(fèi)下載鏈接】home-assistant.io:blue_book: Home Assistant User documentation項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io本文基于 Home Assistant 官方文檔倉庫中的 group.set 動(dòng)作文檔系統(tǒng)講解group.set這一服務(wù)動(dòng)作它是做什么的、只適用于哪種 group、如何在 UI 與 YAML 中調(diào)用、全部選項(xiàng)參數(shù)的含義與互斥規(guī)則并結(jié)合文檔倉庫中的 Group 集成說明、模板函數(shù)文檔補(bǔ)充其狀態(tài)計(jì)算規(guī)則與周邊用法。讀完后你將能夠在自動(dòng)化或腳本中通過object_id動(dòng)態(tài)創(chuàng)建、更新 old-style group 的成員與行為并正確組合group.remove、group.reload完成生命周期管理。1. group.set 是什么只面向 old-style group 的創(chuàng)建/更新服務(wù)group.set用于創(chuàng)建一個(gè)新的 old-style group或更新一個(gè)已存在的 old-style group。你通過object_id定位 group并可設(shè)置它的名稱name、圖標(biāo)icon、成員列表entities等以及狀態(tài)聚合行為all。文檔中有兩條必須牢記的邊界它只作用于 old-style group——即通過configuration.yaml中頂層group:配置段或通過本動(dòng)作創(chuàng)建的那類通用型 group。它不能用于在 UI 中新建的 new-style group即 Settings Devices services Helpers 里創(chuàng)建的 Light group、Switch group、Sensor group 等 Helper 型 group。關(guān)于兩種 group 的關(guān)系文檔倉庫中 Group 集成文檔 的 Old style groups 一節(jié)有權(quán)威說明old-style group 是 Home Assistant 早期用于在界面上視覺歸組實(shí)體的機(jī)制如今雖不再被官方推薦使用官方建議改用按域劃分的 Helper group但仍然受支持它的特點(diǎn)是更通用可組合更多實(shí)體域如climate、device_tracker、vacuum等 20 余個(gè)域但也更受限只能通過 YAML 或本動(dòng)作創(chuàng)建且 UI 自定義能力有限。group.set正是這類 group 的編程式創(chuàng)建/更新入口典型使用場(chǎng)景是在自動(dòng)化中按條件動(dòng)態(tài)拼裝一組實(shí)體供后續(xù)expand()展開、模板引用或homeassistant.turn_on/turn_off整組操作。2. 在 UI 中使用從自動(dòng)化/腳本里添加 Group: Set group如果偏好可視化操作按文檔給出的步驟完成進(jìn)入Settings Automations scenes。打開一個(gè)已有自動(dòng)化或腳本或選擇Create automation Create new automation。若是新建自動(dòng)化在When區(qū)域添加觸發(fā)器腳本不需要觸發(fā)器它由其他東西調(diào)用時(shí)運(yùn)行。在Then do區(qū)域選擇Add action。在搜索框中搜索并選擇Group: Set group。填入Object ID及其他要設(shè)置的選項(xiàng)。選擇Save。注意該動(dòng)作不支持 targets。在 UI 中你不會(huì)看到選擇區(qū)域、設(shè)備、實(shí)體或標(biāo)簽的提示框——它只接受data里的選項(xiàng)參數(shù)。2.1 UI 中的可選項(xiàng)選項(xiàng)說明Object IDgroup 的對(duì)象 ID用于拼成實(shí)體 ID格式為group.object_idNamegroup 的名稱Icongroup 的圖標(biāo)名Entitiesgroup 成員的完整列表不能與Add entities或Remove entities組合使用Add entities要添加到 group 的成員不能與Entities或Remove entities組合使用Remove entities要從 group 移除的成員不能與Entities或Add entities組合使用All啟用后只有當(dāng)所有成員都為 on 時(shí) group 才為 on3. 在 YAML 中使用 group.set在 YAML 中該動(dòng)作寫作action: group.set。原文檔給出的基礎(chǔ)示例如下action: | action: group.set data: object_id: my_group name: My group entities: - light.living_room - light.kitchen這個(gè)調(diào)用會(huì)創(chuàng)建或更新 groupgroup.my_group并把它設(shè)置為包含兩個(gè)燈光成員的組。由于是創(chuàng)建或更新語義對(duì)已存在的group.my_group該調(diào)用會(huì)直接覆蓋其成員與屬性。3.1 選項(xiàng)參數(shù)完整參考YAML參數(shù)必填類型說明object_id是stringgroup 的對(duì)象 ID用于拼成實(shí)體 ID格式為group.object_idname否stringgroup 的名稱icon否stringgroup 的圖標(biāo)名entities否listgroup 成員的完整列表不能與add_entities或remove_entities組合add_entities否list要添加到 group 的成員不能與entities或remove_entities組合remove_entities否list要從 group 移除的成員不能與entities或add_entities組合all否boolean啟用后只有當(dāng)所有成員都為 on 時(shí) group 才為 on默認(rèn)false3.2 成員管理三參數(shù)的互斥規(guī)則重點(diǎn)entities、add_entities、remove_entities三個(gè)參數(shù)一次調(diào)用只能使用其中一個(gè)它們不能組合。從文檔的表述可以推斷其語義分工entities全量替換——把 group 的成員精確重置為你列出的這一組實(shí)體add_entities增量追加——在現(xiàn)有成員基礎(chǔ)上加入新實(shí)體remove_entities增量刪除——從現(xiàn)有成員中剔除指定實(shí)體。這種全量 vs 增量的區(qū)分在自動(dòng)化里很實(shí)用例如夜間自動(dòng)化先用entities建立客廳夜燈組白天回家時(shí)再對(duì)同一個(gè)object_id用add_entities追加快照傳感器而無需重新枚舉整個(gè)列表。4. 典型實(shí)戰(zhàn)在自動(dòng)化中完成 group 的完整生命周期結(jié)合本動(dòng)作的兩個(gè)關(guān)聯(lián)動(dòng)作一個(gè)完整的動(dòng)態(tài) group 使用模式如下以下均為文檔中已存在的動(dòng)作group.remove、group.reloadautomation: - alias: 按時(shí)間動(dòng)態(tài)重組夜間燈光組 trigger: - time: at: 19:00 action: - action: group.set data: object_id: night_lights name: Night lights icon: mdi:lightbulb-multiple entities: - light.hallway - light.bedroom - light.bathroom all: false - alias: 早晨清理動(dòng)態(tài) group trigger: - time: at: 07:00 action: - action: group.remove data: object_id: night_lights要點(diǎn)說明group.remove只移除由group.set創(chuàng)建的 old-style group即帶auto: true屬性的那類不會(huì)移除你在 YAML 配置里寫死的 group若你修改的是configuration.yaml中的 group 配置應(yīng)改用group.reload讓改動(dòng)免重啟生效它沒有任何參數(shù)直接action: group.reload即可。5. old-style group 的狀態(tài)計(jì)算與all參數(shù)all參數(shù)控制 group 狀態(tài)如何由成員狀態(tài)聚合而來。在all: false默認(rèn)下只要有任一成員ongroup 即為on在all: true下必須全部成員ongroup 才on。old-style group 可以對(duì)其成員所在域計(jì)算狀態(tài)。Group 集成文檔 列出了受支持的域清單alert、alarm_control_panel、automation、binary_sensor、calendar、climate、cover、device_tracker、fan、humidifier、input_boolean、light、lock、media_player、person、plant、remote、script、switch、vacuum、water_heater并明確聲明其他平臺(tái)域不受支持且未來也不會(huì)加入。當(dāng)成員實(shí)體只有單一on/off兩態(tài)時(shí)group 狀態(tài)直接按on/off計(jì)算對(duì)少數(shù)具有雙值語義的域映射關(guān)系為域視為 on視為 offdevice_trackerhomenot_homecoveropenclosedlockunlockedlockedpersonhomenot_homemedia_playerokproblem當(dāng) group 混合了多態(tài)域如climate、media_player與兩態(tài)域時(shí)group 狀態(tài)統(tǒng)一為on/off。需要留意如果 group 中包含不受支持域的實(shí)體系統(tǒng)將無法計(jì)算該 group 的狀態(tài)其狀態(tài)會(huì)一直為 unknown——這類 group 仍可配合expand()或homeassistant.turn_on/turn_off使用但不能指望它有可用狀態(tài)。6. 與auto屬性、expand() 及整組操作的關(guān)系原文檔 Good to know 一節(jié)的兩條要點(diǎn)結(jié)合倉庫其他文檔展開如下auto: true屬性標(biāo)記。通過group.set創(chuàng)建或更新的 group 會(huì)帶有一個(gè)恒為true的auto屬性。Group 集成文檔 的 old-style group Attributes 表格也印證了這一點(diǎn)old-style group 有三個(gè)屬性——entity_id成員實(shí)體 ID 列表、order創(chuàng)建順序整數(shù)從 0 開始、auto布爾Only appears in groups that were created with thesetaction即只出現(xiàn)在由set動(dòng)作創(chuàng)建的 group 上。這解釋了為什么group.remove能精確區(qū)分動(dòng)態(tài) group與YAML 靜態(tài) group它只移除帶auto: true標(biāo)記的 group。expand()模板函數(shù)。對(duì)于狀態(tài)為 unknown 的 group文檔明確建議配合expand()函數(shù)使用它把 group 展開成去重、按實(shí)體 ID 排序的獨(dú)立實(shí)體 State 對(duì)象列表支持遞歸展開嵌套 group。典型用法例如在模板中統(tǒng)計(jì)組內(nèi)亮燈數(shù)量{{ expand(group.night_lights) | selectattr(state, eq, on) | list | count }}整組開關(guān)。old-style group 本身可被homeassistant.turn_on/homeassistant.turn_off這類通用動(dòng)作整體操作這也是動(dòng)態(tài)建組 → 整組操作 → 動(dòng)態(tài)刪組模式的最后一環(huán)。7. 驗(yàn)證與排錯(cuò)建議在開發(fā)者工具中直接試跑打開Settings Tools Actions搜索Group: Set group填好Object ID等字段后點(diǎn)Perform action即可在不寫一行 YAML 的情況下在真實(shí)實(shí)例上驗(yàn)證效果原文檔 Try it yourself 一節(jié)的標(biāo)準(zhǔn)做法。確認(rèn)創(chuàng)建成功調(diào)用后檢查實(shí)體group.object_id是否存在、entity_id屬性是否列出你預(yù)期的成員、auto屬性是否為true。常見誤區(qū)把entities與add_entities混用——一次調(diào)用只能三選一期望用group.set修改 UI Helper group——它只作用于 old-style group期望修改 YAML 里的 group 后立即生效——那是group.reload的職責(zé)不是group.set。8. 關(guān)聯(lián)動(dòng)作group.remove按object_id移除 old-style group是group.set的配對(duì)清理動(dòng)作group.reload免重啟重新加載 YAML 中配置的 groups、entities 與 notify services適合修改configuration.yaml后使用。本文全部結(jié)論均出自文檔倉庫中的 source/_actions/group.set.markdown、source/_integrations/group.markdown、source/_actions/group.remove.markdown、source/_actions/group.reload.markdown 與 source/_template_functions/expand.markdown。若你的 Home Assistant 版本界面文案與上述步驟略有出入以 Group 集成文檔 對(duì) old-style group 的定義為準(zhǔn)。【免費(fèi)下載鏈接】home-assistant.io:blue_book: Home Assistant User documentation項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考