在dify中结合home assistant实现本地化自然语言智能家居控制,需配置ha rest api、创建长期令牌、在dify中定义http工具插件并构建含rag实体映射与条件分支调用的工作流,全程离线运行且不泄露数据。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Dify中结合Home Assistant实现基于自然语言的智能家居场景控制,需打通AI Agent与家庭自动化平台的数据通路,让用户一句“把客厅空调调到26度并打开落地灯”即可触发真实设备动作,全程不依赖云端语音服务、不泄露设备状态到第三方。
准备Home Assistant基础环境
确保Home Assistant已部署完成且可稳定访问Web界面,推荐使用Home Assistant OS或Docker方式安装,避免使用Supervised模式(因其对自定义集成支持受限)。
进入配置 → 系统 → 高级模式开启,然后前往配置 → 网络确认HTTP端口为8123且勾选“允许来自本地网络的连接”。
在配置 → 系统 → 令牌中创建一个长期访问令牌(Long-Lived Access Token),复制保存——【该令牌等同于你的HA账号密码,请勿截图、勿存明文文件、勿提交至Git】。
启用Home Assistant REST API并验证连通性
Home Assistant默认启用REST API,但需确认其响应正常。在浏览器中访问:http://[你的HA地址]:8123/api/,返回{"message": "API running."}即为就绪。
用curl测试实体查询(替换为你实际的IP和令牌):
curl -X GET "http://192.168.3.10:8123/api/states/light.living_room" \-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..." \-H "Content-Type: application/json"
若返回light实体当前状态(如on/off、brightness等),说明API通道已通;若返回401错误,请检查令牌是否过期或复制遗漏。
在Dify中配置Home Assistant工具插件
登录Dify控制台,进入应用 → 工具 → 创建工具,选择“HTTP请求”类型工具。
填写以下字段:
名称:HA_Control_Light
描述:控制任意灯光开关与亮度
URL:http://192.168.3.10:8123/api/services/light/turn_on
请求方法:POST
Headers:{ "Authorization": "Bearer {token}", "Content-Type": "application/json" }
Body模板:
{ "entity_id": "{entity_id}", "brightness_pct": "{brightness_pct}" }
参数配置三项:token(字符串,必填)、entity_id(字符串,必填)、brightness_pct(数字,可选,默认100)。
重复上述流程,再添加两个工具:
• HA_Control_Climate:调用/api/services/climate/set_temperature,参数含entity_id与temperature;
• HA_Get_State:调用/api/states/{entity_id},仅需token与entity_id参数,用于状态感知。
构建自然语言解析与设备映射逻辑
在Dify工作流中新建一个LLM节点,输入系统提示词:
“你是一个Home Assistant智能管家。用户会用日常语言提出设备控制请求。请严格按以下规则响应:①只输出JSON,无任何额外文字;②键名固定为action、target、value;③action只能是turn_on、turn_off、set_temperature、get_state之一;④target必须是HA中真实存在的实体ID(如light.living_room、climate.bedroom);⑤value为数字或字符串,依action而定。例如用户说‘关掉卧室灯’→{“action”:“turn_off”,“target”:“light.bedroom”,“value”:null}。”
注意:实体ID不能靠猜测,必须提前在Dify知识库中上传一份home-assistant-entities.csv,含三列:中文名(如“客厅主灯”)、实体ID(light.living_room)、类型(light/climate/switch)。Dify将自动启用RAG检索,当用户说“打开大灯”,模型能匹配到“客厅主灯”并提取对应ID。
串联工具调用与错误兜底机制
将LLM节点输出接入“条件分支”节点,判断action字段值:
• 若为turn_on或turn_off → 调用HA_Control_Light工具,传入target作为entity_id,value为空时设brightness_pct=100;
• 若为set_temperature → 调用HA_Control_Climate,传入target与value;
• 若为get_state → 调用HA_Get_State,仅传target。
每个工具节点后接一个“JSON解析”节点,提取响应中的status或error字段;若捕获到HTTP 404或“Entity not found”,则触发备用回复:“未找到设备【{target}】,请确认名称是否正确或设备是否在线”。
最后将所有路径汇总至终态节点,输出纯文本响应,例如:“已将客厅空调设为26℃,落地灯已开启”。










