Home Assistant 购物清单批量重置:shopping_list.incomplete_all 动作完整实战指南
2026/9/17 21:29:29 网站建设 项目流程

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 的说明)。官方文档给出了标准操作路径:

  1. 进入Settings(设置) > Automations & scenes(自动化与场景)
  2. 打开一个已有的自动化或脚本;如果是新建,选择Create automation(创建自动化) > Create new automation(创建新自动化)
  3. 若在搭建新自动化,需在When(触发条件)部分添加一个触发器;脚本(script)不需要触发器——它们在被其他自动化调用时才运行;
  4. Then do(执行动作)部分选择Add action(添加动作)
  5. 搜索并选择Incomplete all shopping list items
  6. 点击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_allshopping_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_allcomplete_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_allshopping_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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询