Home Assistant Mealie 集成:使用 mealie.get_recipe 动作按 ID 或 Slug 获取完整菜谱
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
本指南以 Home Assistant 的 Mealie 集成为背景,系统讲解mealie.get_recipe动作的完整用法:它如何通过菜谱 ID 或 slug 从自托管的 Mealie 实例中取回包含全部细节与步骤的菜谱数据,并将其存入响应变量供自动化或脚本的后续步骤使用。读完本文,你将掌握在界面与 YAML 两种方式下调用该动作、理解其全部参数与响应数据的含义,并能结合mealie.get_recipes、mealie.get_mealplan等关联动作,构建从"搜索菜谱 → 读取详情 → 展示今日晚餐"的完整智能厨房自动化链路。
mealie.get_recipe是 Home Assistant Mealie 集成提供的一组菜谱管理动作之一,其权威使用说明位于 source/_actions/mealie.get_recipe.markdown。Mealie 是一个开源自托管的菜谱管理、膳食规划与购物清单应用;该集成(ha_integration_type: service,质量等级为 platinum,自 2024.7 起可用)允许 Home Assistant 读取并更新 Mealie 实例中保存的数据。本文即围绕"读取菜谱"这一核心动作展开。
动作概述与工作原理
使用mealie.get_recipe动作,可以从 Mealie 按ID 或 slug获取一份菜谱,返回的响应中包含该菜谱的完整细节与步骤(食材、做法步骤等)。其核心特点有两个:
- 定位方式灵活:只需提供菜谱的 ID 或 slug(例如
roasted-tomato-soup)即可取回菜谱,无需提前知道菜谱在 Mealie 中的完整对象结构。 - 结果通过响应变量返回:动作不会创建设备或实体,而是把结果写入你在调用时命名的response variable(响应变量),供同一自动化或脚本中的后续步骤继续使用。这是 Home Assistant 服务调用(service call)的一种标准能力,适合在自动化中"先取数据、再加工使用"的串联式场景。
前置条件:先配置好 Mealie 集成
在调用本动作之前,需要先在 Home Assistant 中完成 Mealie 集成的配置(Config Flow)。配置前提与步骤见 Mealie 集成文档:
- 支持Mealie 2.0 及更高版本的实例;
- 在 Mealie 中生成 API Token:登录 Mealie → 进入用户资料页 →Manage Your API Tokens(
/user/profile/api-tokens)→ 命名(如Home Assistant)→Generate→ 复制 Token; - 在 Home Assistant 中通过配置流程填入三个参数:
| 参数 | 说明 |
|---|---|
| URL | Mealie 安装实例的访问地址 |
| API token | 上一步生成的 API Token |
| Verify SSL certificate | 默认启用;仅当使用自签名证书时才关闭 |
完成配置后,Home Assistant 会为每种膳食计划类型创建日历、为每个购物清单创建待办列表,并提供菜谱数、分类、标签、工具、用户等统计传感器。此时mealie.get_recipe等动作即可直接使用,你可以在自动化、脚本或临时服务调用中指定该配置条目的config_entry_id。
在界面中使用:从自动化或脚本获取菜谱
如果你偏好可视化方式构建自动化和脚本,Home Assistant 会一步步引导你完成操作,无需掌握 YAML 知识(此引导片段定义于 actions/ui_header.md)。
按照 mealie.get_recipe.markdown 中的步骤操作:
- 进入设置(Settings)> 自动化与场景(Automations & scenes)。
- 打开一个已有的自动化或脚本;或选择创建自动化(Create automation)> 创建新自动化(Create new automation)。
- 若是新建自动化,需要在When(何时)部分添加一个触发器;脚本不需要触发器,它们在被其他东西调用时运行。
- 在Then do(然后执行)部分,选择添加动作(Add action)。
- 在搜索框中搜索并选择Mealie: Get recipe。
- 选择要使用的Mealie 实例(Mealie instance),并设置菜谱 ID 或 slug(Recipe ID or slug)。
- 在响应变量(Response variable)字段中输入一个名称来存放数据,例如
recipe。 - 点击保存(Save)。
界面选项一览
界面中出现的选项如下(模板定义于 options_ui.rb):
| 界面选项 | 说明 |
|---|---|
| Mealie instance | 要从中获取菜谱的 Mealie 实例 |
| Recipe ID or slug | 要获取的菜谱的 ID 或 slug |
关于 Targets(目标选择)
需要特别说明:本动作不支持 targets(目标选择)。在界面中,它不会提示你选择区域(area)、设备(device)、实体(entity)或标签(label);你直接选择 Mealie 实例即可。这是因为该动作操作的是 Mealie 服务端的数据,而非 Home Assistant 本地实体。
在 YAML 中使用:完整参数参考
如果你直接编写 YAML,或想确切了解 Home Assistant 底层做了什么,请参考本节的技术参考(该段引导定义于 actions/yaml_header.md),其中列出了 YAML 中使用的字段名、类型及必填性。
在 YAML 中,本动作的服务名称为mealie.get_recipe。把结果存入响应变量,以便在后续步骤中使用:
action: mealie.get_recipe data: config_entry_id: YOUR_MEALIE_CONFIG_ENTRY_ID recipe_id: roasted-tomato-soup response_variable: recipe上述示例通过 slugroasted-tomato-soup获取菜谱,并将其存入recipe响应变量。
YAML 参数表
| 参数 | 必填 | 类型 | 说明 |
|---|---|---|---|
config_entry_id | 是 | string | 要从中获取菜谱的 Mealie 配置条目(config entry)的 ID |
recipe_id | 是 | string | 要获取的菜谱的 ID 或 slug |
其中config_entry_id即集成配置完成后生成的配置条目 ID,可在设置 > 设备与服务中查看该 Mealie 条目的详情获取。
响应数据:拿到手的到底是什么
调用mealie.get_recipe后,动作会返回所请求菜谱的完整细节与步骤。这些数据被写入你指定的响应变量(例如recipe),可以在同一自动化/脚本的后续模板、条件或后续服务调用中引用。
值得补充的是:这一"完整详情"与搜索动作返回的"简要描述"形成对比。若你只需要一份菜谱列表或菜谱 ID/slug,应使用mealie.get_recipes;而当需要展开某份菜谱的全部内容(如食材清单、做法步骤)时,再用本动作取回完整数据。这种"先搜索定位、后取详情"的两步式用法,正是这两个动作设计上的搭配关系。
实战组合:先搜索定位,再获取完整菜谱
正如 mealie.get_recipes.markdown 所述,要找到一份菜谱的 ID 或 slug,请使用mealie.get_recipes动作:它会在所有菜谱属性上执行搜索,返回每份菜谱的简要描述,并可通过result_limit控制返回数量(默认 10)。
一个典型的自动化链路可以这样组织:
action: mealie.get_recipes data: config_entry_id: YOUR_MEALIE_CONFIG_ENTRY_ID search_terms: tomato soup result_limit: 5 response_variable: recipesaction: mealie.get_recipe data: config_entry_id: YOUR_MEALIE_CONFIG_ENTRY_ID recipe_id: "{{ recipes[0].id }}" response_variable: recipe即先用mealie.get_recipes搜索并取回菜谱列表(含 ID/slug),再从中取第一个结果,交给mealie.get_recipe获取完整详情。
两个关联动作的 YAML 参数对比如下:
| 参数 | get_recipes | get_recipe |
|---|---|---|
config_entry_id | 必填,string | 必填,string |
search_terms | 选填,string(在所有属性上搜索) | — |
result_limit | 选填,integer,默认 10 | — |
recipe_id | — | 必填,string(ID 或 slug) |
关于搜索行为的细节
mealie.get_recipes的搜索行为取决于 Mealie 后端:使用 PostgreSQL 后端时为模糊搜索(fuzzy search),否则为字面搜索(literal search)。因此在依赖搜索结果时,需要注意你的 Mealie 实例所使用的数据库类型。
深度应用:把菜谱接入"今日晚餐"展示与通知
mealie.get_recipe擅长取回单份菜谱的完整细节;若你想读取某天的膳食计划(例如"今天晚饭吃什么"),则可以与mealie.get_mealplan动作配合使用。
mealie.get_mealplan会按日期范围返回膳食计划条目,响应数据位于mealplan键下,每条包含膳食类型(如breakfast、dinner)、日期,以及计划中的菜谱或备注。其 YAML 参数为:config_entry_id(必填)、start_date(选填,默认今天)、end_date(选填,默认今天)。
mealie.get_mealplan.markdown 给出了一个实用的模板传感器示例——每小时触发一次,读取今天的膳食计划,并把晚餐菜名展示为传感器状态:
template: - triggers: - trigger: time_pattern hours: /1 actions: - action: mealie.get_mealplan data: config_entry_id: YOUR_MEALIE_CONFIG_ENTRY_ID response_variable: result sensor: - name: "Dinner today" unique_id: mealie_dinner_today state: > {% for meal in result.mealplan if meal.entry_type == "dinner" -%} {{ meal.recipe['name'] if meal.recipe is not none else meal.title -}} {{ ", " if not loop.last }} {%- endfor %}在这个链路中,mealie.get_mealplan返回的计划条目里带有菜谱引用;若需要在仪表板或通知中展示完整菜谱细节,则可在后续步骤调用mealie.get_recipe,以计划条目中携带的菜谱 ID 或 slug 取回完整数据,用于展示做法步骤、食材清单或生成购物提醒。
关联的膳食计划动作族
围绕膳食计划,Mealie 集成还提供了一组可与本动作搭配的动作(见 mealie.set_mealplan.markdown、mealie.set_random_mealplan.markdown、mealie.update_mealplan.markdown、mealie.delete_mealplan.markdown):
| 动作 | 作用 | 关键参数 |
|---|---|---|
mealie.set_mealplan | 在指定日期安排一份菜谱或膳食备注 | date、entry_type(breakfast/lunch/dinner/side/dessert/snack/drink)、recipe_id或note_title/note_text |
mealie.set_random_mealplan | 在指定日期随机安排一份菜谱 | date、entry_type |
mealie.update_mealplan | 更新已有膳食计划(菜谱或备注) | mealplan_id、date、entry_type、recipe_id或note_title/note_text |
mealie.delete_mealplan | 删除已有膳食计划 | mealplan_id |
mealie.import_recipe | 从 URL 将菜谱导入 Mealie(可选返回导入的菜谱) | url(必填)、include_tags(选填,boolean,默认 false) |
这些动作与本动作共享同一config_entry_id参数与"响应变量"机制:set_mealplan、set_random_mealplan、update_mealplan、import_recipe均可选择性地把结果写入响应变量;而get_recipe、get_recipes、get_mealplan则始终通过响应变量返回结果。整体上构成"查询 → 规划 → 更新 → 展示"的完整闭环。
Good to know:使用要点与排障
- 如何找到菜谱 ID 或 slug:使用
mealie.get_recipes动作搜索菜谱,即可从响应中取得菜谱 ID 或 slug,再传入mealie.get_recipe获取完整详情。 - 本动作不产生实体:它属于纯服务调用,结果只进入响应变量;若需要把菜谱数据可视化,应结合模板传感器(如上面"今日晚餐"示例)或模板卡片输出。
- Mealie 版本要求:集成仅支持 Mealie 2.0 及更高版本(见 Mealie 集成文档)。
- 连接排查:若你使用的是 Home Assistant 的 Mealie 应用(原 Mealie 插件),请使用带端口号的直连 URL(默认 9090),不要使用以
/xxx_mealie结尾的 ingress 地址。 - 排障方式:如遇问题,可启用调试日志并重启集成,复现问题后停止调试日志,并(如有可能)下载诊断数据一并提交问题报告。
小结
mealie.get_recipe是 Home Assistant Mealie 集成中用于按 ID 或 slug 取回完整菜谱细节的核心动作:界面操作只需选择实例、填写菜谱标识并命名响应变量;YAML 调用只需config_entry_id与recipe_id两个必填参数。将其与mealie.get_recipes(搜索定位)、mealie.get_mealplan(读取膳食计划)以及mealie.set_mealplan等规划类动作配合,即可在自动化中实现从菜谱搜索、详情读取到"今日晚餐"展示与提醒的完整智能厨房工作流。相关动作的权威参数说明与界面操作步骤,均可在仓库的 source/_actions/ 目录下按动作名逐一查阅。
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考