Home Assistant 购物清单批量重置:shopping_list.incomplete_all 动作完整实战指南
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
导读
shopping_list.incomplete_all是 Home Assistant 购物清单(Shopping list)集成提供的动作(action),用于将清单中的全部条目一次性标记为未完成。在 shopping_list 集成文档 中它归属于 To-do list(待办清单)能力范畴,最常见的应用场景是每周自动重置常购清单——例如周日晚上把整张"周度采购清单"恢复为全部待购状态,让所有条目重新激活。读完本文,你将掌握该动作在 UI 可视化编辑与 YAML 自动化两种模式下的完整用法、它与其他购物清单动作(complete_all、incomplete_item、clear_completed_items)的配合方式,以及它触发shopping_list_updated事件时的底层行为细节。
动作概览:一条命令重置整张清单
shopping_list.incomplete_all的官方定义是"将购物清单中的所有条目标记为未完成"(Marks all items as incomplete in the shopping list)。它的核心特征有三点:
- 作用于整张清单:与
shopping_list.incomplete_item(仅将名称匹配的首个条目改回未完成)不同,它不做任何匹配,一次性覆盖全部条目; - 只改状态、不删条目:被重置的条目仍然保留在清单上,仅将
complete标记改为false,后续仍可通过shopping_list.clear_completed_items单独清理已完成项; - 无任何参数:该动作在 UI 与 YAML 两种模式下均不接收任何选项,是最"零配置"的购物清单动作之一,动作文档 中明确注明"This action has no options"。
注意:Home Assistant 的购物清单集成维护的是唯一一张清单(单例结构),add_item 动作文档 也确认了这一点——所有动作操作的都是该集成提供的同一张列表,因此
incomplete_all的"全部"即指这张全局清单的全部条目。
在 UI 中创建动作:可视化配置流程
如果你习惯用可视化方式搭建自动化或脚本,Home Assistant 会引导你逐步完成该动作的配置,全程无需手写 YAML(参见 actions/ui_header.md 的说明)。官方文档给出了标准操作路径:
- 进入Settings(设置) > Automations & scenes(自动化与场景);
- 打开一个已有的自动化或脚本;如果是新建,选择Create automation(创建自动化) > Create new automation(创建新自动化);
- 若在搭建新自动化,需在When(触发条件)部分添加一个触发器;脚本(script)不需要触发器——它们在被其他自动化调用时才运行;
- 在Then do(执行动作)部分选择Add action(添加动作);
- 搜索并选择Incomplete all shopping list items;
- 点击Save(保存)完成配置。
由于该动作没有可选参数,UI 中的配置面板非常简洁——选中动作后无需填写任何字段即可直接保存。
在 YAML 中使用动作:零参数调用
如果你直接编写 YAML 自动化/脚本,或想精确了解 Home Assistant 的底层行为(参见 actions/yaml_header.md 的说明),调用方式如下:
action: shopping_list.incomplete_all该动作没有可选参数,因此不需要data字段。一个最小可用的自动化示例如下:
alias: "Reset weekly shopping list every Sunday" triggers: - trigger: time at: "21:00:00" # 建议配合 weekday 条件限定在周日 conditions: - condition: time weekday: sun actions: - action: shopping_list.incomplete_all在 YAML 模式中,该动作的字段表为空:无必填项(required: none)、无字符串参数(type 均不适用),唯一的合法写法就是上面这种不带data的裸调用。
典型场景:基于时间或状态的自动重置
官方文档给出的核心使用场景是重置周期性清单,例如周度杂货清单——当所有条目被重置为未完成时,整张清单恢复"待采购"状态,随时可以再次使用。结合其他动作可以构建完整的"采购闭环":
场景一:每周定时重置
alias: "Weekly grocery list reset" triggers: - trigger: time at: "06:00:00" conditions: - condition: time weekday: mon actions: - action: shopping_list.incomplete_all每周一清晨自动把上一轮采购后已勾选的条目全部重置为待购,无需人工干预。
场景二:采购完成 → 清空 → 等待下轮重置
将incomplete_all与它的互补动作组合使用,可以实现完整的清单生命周期管理:
| 阶段 | 动作 | 效果 |
|---|---|---|
| 采购中勾选 | shopping_list.complete_item | 逐项标记为已完成 |
| 采购结束 | shopping_list.clear_completed_items | 移除所有已完成条目(未勾选条目保留) |
| 下一轮开始 | shopping_list.incomplete_all | 将所有条目重置为未完成,重新激活 |
其中shopping_list.complete_all(动作文档)是incomplete_all的直接对应动作(counterpart):前者把全部条目标记为已完成但不移除,后者把全部条目标记为未完成。官方文档在"Good to know"一节明确指出了这层对应关系。
场景三:语音/会话触发重置
购物清单集成支持通过 conversation 集成用语音操作(例如 "Add eggs to my shopping list"),同理你也可在自动化中配合conversation.process或语音助手流程调用shopping_list.incomplete_all,实现"重置我的购物清单"这样的口语化控制。
底层原理:incomplete_all 触发的事件与载荷
理解该动作的底层行为,关键在于 shopping_list 集成文档 中描述的shopping_list_updated事件。当清单条目被修改时,集成会触发该事件,并携带如下数据载荷:
| 数据载荷属性 | 说明 |
|---|---|
action | 对条目执行的动作类型,取值见下文 |
item | 被更新条目的详情字典 |
item.id | 该条目的唯一 ID |
item.name | 条目文本,例如Milk |
item.complete | 布尔值,表示条目是否已标记为完成 |
其中action的取值分为两组:
- 逐条操作:
add(新增条目)、update(更新条目,但经shopping_list.complete_item或整表动作触发时除外)、complete(仅通过shopping_list.complete_item完成勾选)、remove(移除条目); - 整表操作:
clear(清空已完成项)、sorted(按名称排序)、reorder(条目重排)、update_list(全部条目被更新,例如通过shopping_list.complete_all或shopping_list.incomplete_all动作触发)。
关键实现事实:当调用shopping_list.incomplete_all时,事件载荷中的action值恒为update_list,且事件不返回具体的 list item("In these cases, the event does not return a list item")——因为整表重置无法归属到单一条目上。这也意味着,如果你的自动化依赖shopping_list_updated事件做精细化处理,需要特别区分逐条操作与整表操作两种事件形态。
实战:监听整表重置事件
以下自动化演示了如何监听update_list事件(即incomplete_all/complete_all触发的整表更新),并在重置完成后发送通知:
alias: "Notify when shopping list is bulk reset" triggers: - trigger: event event_type: shopping_list_updated event_data: action: "update_list" actions: - action: notify.notify data: message: "Your shopping list has been reset to incomplete."集成文档中的示例还展示了逐条操作事件的典型用法——当有人通过语音或自动化添加条目(action: add)时发送推送通知,并附带clickAction/url跳转到/shopping-list页面:
alias: "Notify on new shopping list item" triggers: - trigger: event event_type: shopping_list_updated event_data: action: "add" actions: - action: notify.notify data: message: "{{ trigger.event.data.item.name }} has been added to the shopping list" data: clickAction: "/shopping-list" url: "/shopping-list"与其他购物清单动作的协作矩阵
shopping_list.incomplete_all所在的动作家族完整定义了清单的状态流转。官方文档通过related_actions字段将该动作与以下动作关联:
| 动作 | 作用范围 | 与 incomplete_all 的关系 |
|---|---|---|
shopping_list.add_item | 单条 | 新增条目,是清单内容的来源 |
shopping_list.complete_item | 单条 | 将首个名称匹配条目标记为完成 |
shopping_list.incomplete_item | 单条 | 将首个名称匹配条目标记为未完成(动作文档) |
shopping_list.complete_all | 整表 | 全部标记为已完成,是incomplete_all的直接对应动作 |
shopping_list.clear_completed_items | 整表 | 移除所有已完成条目,仅保留未勾选项(动作文档) |
shopping_list.remove_item | 单条 | 从清单移除条目 |
shopping_list.sort | 整表 | 按名称排序条目 |
从事件角度归纳:单条操作会返回携带item载荷的逐条事件(add/update/complete/remove),而incomplete_all、complete_all这类整表操作统一发出不含条目详情的update_list事件。选择动作时,判断依据很明确——只处理单个条目用incomplete_item(需传name参数),批量重置整张清单用incomplete_all(零参数)。
总结与使用要点
shopping_list.incomplete_all用于将整张购物清单的所有条目一次性标记为未完成,不删除条目、无任何参数;- UI 路径为Settings > Automations & scenes,在Then do中搜索 "Incomplete all shopping list items" 即可添加;YAML 中直接写
action: shopping_list.incomplete_all,无需data; - 典型场景是周期性清单重置(如每周杂货清单),可结合
time/weekday条件或 zone 事件(如离开超市)自动触发; - 底层会触发
shopping_list_updated事件,action值为update_list且不携带 list item——设计依赖该事件的自动化时需注意区分整表操作与逐条操作; - 与
shopping_list.complete_all、shopping_list.clear_completed_items组合,可构建"勾选 → 清理 → 重置"的完整采购清单生命周期闭环。
相关参考:shopping_list 集成完整文档、complete_all 动作文档、incomplete_item 动作文档、clear_completed_items 动作文档。
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考