1"use strict";(self.webpackChunkhermes_agent_cn=self.webpackChunkhermes_agent_cn||[]).push([[3502],{2002:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>o,frontMatter:()=>d,metadata:()=>i,toc:()=>h});const i=JSON.parse('{"id":"user-guide/messaging/homeassistant","title":"Home Assistant","description":"\u901a\u8fc7 Home Assistant \u96c6\u6210\uff0c\u4f7f\u7528 Hermes Agent \u63a7\u5236\u60a8\u7684\u667a\u80fd\u5bb6\u5c45\u3002","source":"@site/docs/user-guide/messaging/homeassistant.md","sourceDirName":"user-guide/messaging","slug":"/user-guide/messaging/homeassistant","permalink":"/docs/user-guide/messaging/homeassistant","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":5,"frontMatter":{"title":"Home Assistant","description":"\u901a\u8fc7 Home Assistant \u96c6\u6210\uff0c\u4f7f\u7528 Hermes Agent \u63a7\u5236\u60a8\u7684\u667a\u80fd\u5bb6\u5c45\u3002","sidebar_label":"Home Assistant","sidebar_position":5,"translationStatus":"translated","upstreamPath":"website/docs/user-guide/messaging/homeassistant.md","upstreamSha":"f57b439775d7394b1166771c5a3e6044ff655f04","sourceUrl":"https://github.com/NousResearch/hermes-agent/blob/main/website/docs/user-guide/messaging/homeassistant.md","translatedAt":"2026-04-11T04:12:28.745Z","translationModel":"qwen/qwen3-30b-a3b-instruct-2507"},"sidebar":"docs","previous":{"title":"\u5143\u5b9d","permalink":"/docs/user-guide/messaging/yuanbao"},"next":{"title":"Mattermost","permalink":"/docs/user-guide/messaging/mattermost"}}');var t=s(25105),r=s(35478);const d={title:"Home Assistant",description:"\u901a\u8fc7 Home Assistant \u96c6\u62
110\uff0c\u4f7f\u7528 Hermes Agent \u63a7\u5236\u60a8\u7684\u667a\u80fd\u5bb6\u5c45\u3002",sidebar_label:"Home Assistant",sidebar_position:5,translationStatus:"translated",upstreamPath:"website/docs/user-guide/messaging/homeassistant.md",upstreamSha:"f57b439775d7394b1166771c5a3e6044ff655f04",sourceUrl:"https://github.com/NousResearch/hermes-agent/blob/main/website/docs/user-guide/messaging/homeassistant.md",translatedAt:new Date("2026-04-11T04:12:28.745Z"),translationModel:"qwen/qwen3-30b-a3b-instruct-2507"},l="Home Assistant \u96c6\u6210 {#home-assistant-integration}",c={},h=[{value:"\u8bbe\u7f6e",id:"setup",level:2},{value:"1. \u521b\u5efa\u957f\u671f\u8bbf\u95ee\u4ee4\u724c",id:"1-create-a-long-lived-access-token",level:3},{value:"2. \u914d\u7f6e\u73af\u5883\u53d8\u91cf",id:"2-configure-environment-variables",level:3},{value:"3. \u542f\u52a8\u7f51\u5173",id:"3-start-the-gateway",level:3},{value:"\u53ef\u7528\u5de5\u5177",id:"available-tools",level:2},{value:"<code>ha_list_entities</code>",id:"ha_list_entities",level:3},{value:"<code>ha_get_state</code>",id:"ha_get_state",level:3},{value:"<code>ha_list_services</code>",id:"ha_list_services",level:3},{value:"<code>ha_call_service</code>
1",id:"ha_call_service",level:3},{value:"\u7f51\u5173\u5e73\u53f0\uff1a\u5b9e\u65f6\u4e8b\u4ef6",id:"gateway-platform-real-time-events",level:2},{value:"\u4e8b\u4ef6\u8fc7\u6ee4",id:"event-filtering",level:3},{value:"\u4e8b\u4ef6\u683c\u5f0f\u5316",id:"event-formatting",level:3},{value:"Agent \u54cd\u5e94",id:"agent-responses",level:3},{value:"\u8fde\u63a5\u7ba1\u7406",id:"connection-management",level:3},{value:"\u5b89\u5168\u6027",id:"security",level:2},{value:"\u793a\u4f8b\u81ea\u52a8\u5316",id:"example-automations",level:2},{value:"\u65e9\u6668\u4f8b\u884c\u7a0b\u5e8f",id:"morning-routine",level:3},{value:"\u5b89\u5168\u68c0\u67e5",id:"security-check",level:3},{value:"\u57fa\u4e8e\u7f51\u5173\u4e8b\u4ef6\u7684\u54cd\u5e94\u5f0f\u81ea\u52a8\u5316",id:"reactive-automation-via-gateway-events",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"home-assistant-integration",children:"Home Assistant \u96c6\u62
110"})}),"\n",(0,t.jsxs)(n.p,{children:["Hermes Agent \u901a\u8fc7\u4e24\u79cd\u65b9\u5f0f\u4e0e ",(0,t.jsx)(n.a,{href:"https://www.home-assistant.io/",children:"Home Assistant"})," \u96c6\u6210\uff1a"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"\u7f51\u5173\u5e73\u53f0"})," \u2014\u2014 \u901a\u8fc7 WebSocket \u8ba2\u9605\u5b9e\u65f6\u72b6\u6001\u53d8\u66f4\uff0c\u5e76\u54cd\u5e94\u4e8b\u4ef6"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"\u667a\u80fd\u5bb6\u5c45\u5de5\u5177"})," \u2014\u2014 \u56db\u4e2a\u53ef\u901a\u8fc7 LLM \u8c03\u7528\u7684\u5de5\u5177\uff0c\u901a\u8fc7 REST API \u67e5\u8be2\u548c\u63a7\u5236\u8bbe\u5907"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"setup",children:"\u8bbe\u7f6e"}),"\n",(0,t.jsx)(n.h3,{id:"1-create-a-long-lived-access-token",children:"1. \u521b\u5efa\u957f\u671f\u8bbf\u95ee\u4ee4\u724c"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"\u6253\u5f00\u4f60\u7684 Home Assistant \u5b9e\u4f8b"}),"\n",(0,t.jsxs)(n.li,{children:["\u8fdb\u5165\u4f60\u7684 ",(0,t.jsx)(n.strong,{children:"\u4e2a\u4eba\u8d44\u6599"}),"\uff08\u4fa7\u8fb9\u680f\u70b9\u51fb\u4f60\u7684\u7528\u6237\u540d\uff09"]}),"\n",(0,t.jsxs)(n.li,{children:["\u6eda\u52a8\u5230 ",(0,t.jsx)(n.strong,{children:"\u957f\u671f\u8bbf\u95ee\u4ee4\u724c"})]}),"\n",(0,t.jsxs)(n.li,{children:["\u70b9\u51fb ",(0,t.jsx)(n.strong,{children:"\u521b\u5efa\u4ee4\u724c"}),'\uff0c\u4e3a\u5176\u547d\u540d\uff0c\u4f8b\u5982 "Hermes Agent"']}),"\n",(0,t.jsx)(n.li,{children:"\u590d\u5236\u4ee4\u724c"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"2-configure-environment-variables",children:"2. \u914d\u7f6e\u73af\u5883\u53d8\u91cf"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"# \u6dfb\u52a0\u5230\u201c0\u201d\n\n# \u5fc5\u9700\uff1a\u60a8\u7684\u957f\u671f\u8bbf\u95ee\u6743\u9650 Token\nHASS_TOKEN=your-long-lived-access-token\n\n# \u53ef\u9009\uff1aHA URL\uff08\u9ed8\u8ba4\u503c\uff1ahttp://homeassistant.local:8123\uff09\nHASS_URL=http://192.168.1.100:8123\n"})}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["\u5f53\u8bbe\u7f6e ",(0,t.jsx)(n.code,{children:"HASS_TOKEN"})," \u65f6\uff0c",(0,t.jsx)(n.code,{children:"homeassistant"})," \u5de5\u5177\u96c6\u4f1a\u81ea\u52a8\u542f\u7528\u3002\u7f51\u5173\u5e73\u53f0\u548c\u8bbe\u5907\u63a7\u5236\u5de5\u5177\u5747\u4ece\u6b64\u5355\u4e00\u4ee4\u724c\u6fc0\u6d3b\u3002"]})}),"\n",(0,t.jsx)(n.h3,{id:"3-start-the-gateway",children:"3. \u542f\u52a8\u7f51\u5173"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"hermes gateway\n"})}),"\n",(0,t.jsx)(n.p,{children:"Home Assistant \u5c06\u4f5c\u4e3a\u5df2\u8fde\u63a5\u7684\u5e73\u53f0\uff0c\u4e0e\u5176\u4ed6\u6d88\u606f\u5e73\u53f0\uff08\u5982 Telegram\u3001Discord \u7b49\uff09\u5e76\u5217\u663e\u793a\u3002"}),"\n",(0,t.jsx)(n.h2,{id:"available-tools",children:"\u53ef\u7528\u5de5\u5177"}),"\n",(0,t.jsx)(n.p,{children:"Hermes Agent \u6ce8\u518c\u4e86\u56db\u4e2a\u7528\u4e8e\u667a\u80fd\u5bb6\u5c45\u63a7\u5236\u7684\u5de5\u5177\uff1a"}),"\n",(0,t.jsx)(n.h3,{id:"ha_list_entities",children:(0,t.jsx)(n.code,{children:"ha_list_entities"})}),"\n",(0,t.jsx)(n.p,{children:"\u5217\u51fa Home Assistant \u5b9e\u4f53\uff0c\u53ef\u6309\u9886\u57df\u6216\u533a\u57df\u8fdb\u884c\u7b5b\u9009\u3002"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"\u53c2\u6570\uff1a"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"domain"})," ",(0,t.jsx)(n.em,{children:"(\u53ef\u9009)"})," \u2014\u2014 \u6309\u5b9e\u4f53\u9886\u57df\u8fc7\u6ee4\uff1a",(0,t.jsx)(n.code,{children:"light"}),"\u3001",(0,t.jsx)(n.code,{children:"switch"}),"\u3001",(0,t.jsx)(n.code,{children:"climate"}),"\u3001",(0,t.jsx)(n.code,{children:"sensor"}),"\u3001",(0,t.jsx)(n.code,{children:"binary_sensor"}),"\u3001",(0,t.jsx)(n.code,{children:"cover"}),"\u3001",(0,t.jsx)(n.code,{children:"fan"}),"\u3001",(0,t.jsx)(n.code,{children:"media_player"})," \u7b49"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"area"})," ",(0,t.jsx)(n.em,{children:"(\u53ef\u9009)"})," \u2014\u2014 \u6309\u533a\u57df/\u623f\u95f4\u540d\u79f0\u8fc7\u6ee4\uff08\u5339\u914d\u53cb\u597d\u540d\u79f0\uff09\uff1a",(0,t.jsx)(n.code,{children:"living room"}),"\u3001",(0,t.jsx)(n.code,{children:"kitchen"}),"\u3001",(0,t.jsx)(n.code,{children:"bedroom"})," \u7b49"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"\u793a\u4f8b\uff1a"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"List all lights in the living room\n"})}),"\n",(0,t.jsx)(n.p,{children:"\u8fd4\u56de\u5b9e\u4f53 ID\u3001\u72b6\u6001\u548c\u53cb\u597d\u540d\u79f0\u3002"}),"\n",(0,t.jsx)(n.h3,{id:"ha_get_state",children:(0,t.jsx)(n.code,{children:"ha_get_state"})}),"\n",(0,t.jsx)(n.p,{children:"\u83b7\u53d6\u5355\u4e2a\u5b9e\u4f53\u7684\u8be6\u7ec6\u72b6\u6001\uff0c\u5305\u62ec\u6240\u6709\u5c5e\u6027\uff08\u4eae\u5ea6\u3001\u989c\u8272\u3001\u6e29\u5ea6\u8bbe\u5b9a\u70b9\u3001\u4f20\u611f\u5668\u8bfb\u6570\u7b49\uff09\u3002"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"\u53c2\u6570\uff1a"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"entity_id"})," ",(0,t.jsx)(n.em,{children:"(\u5fc5\u9700)"})," \u2014\u2014 \u8981\u67e5\u8be2\u7684\u5b9e\u4f53\uff0c\u4f8b\u5982 ",(0,t.jsx)(n.code,{children:"light.living_room"}),"\u3001",(0,t.jsx)(n.code,{children:"climate.thermostat"}),"\u3001",(0,t.jsx)(n.code,{children:"sensor.temperature"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"\u793a\u4f8b\uff1a"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"What's the current state of climate.thermostat?\n"})}),"\n",(0,t.jsx)(n.p,{children:"\u8fd4\u56de\uff1a\u72b6\u6001\u3001\u6240\u6709\u5c5e\u6027\u3001\u6700\u540e\u66f4\u6539/\u66f4\u65b0\u65f6\u95f4\u6233\u3002"}),"\n",(0,t.jsx)(n.h3,{id:"ha_list_services",children:(0,t.jsx)(n.code,{children:"ha_list_services"})}),"\n",(0,t.jsx)(n.p,{children:"\u5217\u51fa\u53ef\u7528\u4e8e\u8bbe\u5907\u63a7\u5236\u7684\u53ef\u7528\u670d\u52a1\uff08\u64cd\u4f5c\uff09\u3002\u663e\u793a\u6bcf\u79cd\u8bbe\u5907\u7c7b\u578b\u53ef\u6267\u884c\u7684\u64cd\u4f5c\u53ca\u5176\u63a5\u53d7\u7684\u53c2\u6570\u3002"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"\u53c2\u6570\uff1a"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"domain"})," ",(0,t.jsx)(n.em,{children:"(\u53ef\u9009)"})," \u2014\u2014 \u6309\u9886\u57df\u8fc7\u6ee4\uff0c\u4f8b\u5982 ",(0,t.jsx)(n.code,{children:"light"}),"\u3001",(0,t.jsx)(n.code,{children:"climate"}),"\u3001",(0,t.jsx)(n.code,{children:"switch"})]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"\u793a\u4f8b\uff1a"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"What services are available for climate devices?\n"})}),"\n",(0,t.jsx)(n.h3,{id:"ha_call_service",children:(0,t.jsx)(n.code,{children:"ha_call_service"})}),"\n",(0,t.jsx)(n.p,{children:"\u8c03\u7528 Home Assistant \u670d\u52a1\u4ee5\u63a7\u5236\u8bbe\u5907\u3002"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"\u53c2\u6570\uff1a"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"domain"})," ",(0,t.jsx)(n.em,{children:"(\u5fc5\u9700)"})," \u2014\u2014 \u670d\u52a1\u9886\u57df\uff1a",(0,t.jsx)(n.code,{children:"light"}),"\u3001",(0,t.jsx)(n.code,{children:"switch"}),"\u3001",(0,t.jsx)(n.code,{children:"climate"}),"\u3001",(0,t.jsx)(n.code,{children:"cover"}),"\u3001",(0,t.jsx)(n.code,{children:"media_player"}),"\u3001",(0,t.jsx)(n.code,{children:"fan"}),"\u3001",(0,t.jsx)(n.code,{children:"scene"}),"\u3001",(0,t.jsx)(n.code,{children:"script"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"service"})," ",(0,t.jsx)(n.em,{children:"(\u5fc5\u9700)"})," \u2014\u2014 \u670d\u52a1\u540d\u79f0\uff1a",(0,t.jsx)(n.code,{children:"turn_on"}),"\u3001",(0,t.jsx)(n.code,{children:"turn_off"}),"\u3001",(0,t.jsx)(n.code,{children:"toggle"}),"\u3001",(0,t.jsx)(n.code,{children:"set_temperature"}),"\u3001",(0,t.jsx)(n.code,{children:"set_hvac_mode"}),"\u3001",(0,t.jsx)(n.code,{children:"open_cover"}),"\u3001",(0,t.jsx)(n.code,{children:"close_cover"}),"\u3001",(0,t.jsx)(n.code,{children:"set_volume_level"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"entity_id"})," ",(0,t.jsx)(n.em,{children:"(\u53ef\u9009)"})," \u2014\u2014 \u76ee\u6807\u5b9e\u4f53\uff0c\u4f8b\u5982 ",(0,t.jsx)(n.code,{children:"light.living_room"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"data"})," ",(0,t.jsx)(n.em,{children:"(\u53ef\u9009)"})," \u2014\u2014 \u4f5c\u4e3a JSON \u5bf9\u8c61\u7684\u9644\u52a0\u53c2\u6570"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"\u793a\u4f8b\uff1a"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:'Turn on the living room lights\n\u2192 ha_call_service(domain="light", service="turn_on", entity_id="light.living_room")\n'})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:'Set the thermostat to 22 degrees in heat mode\n\u2192 ha_call_service(domain="climate", service="set_temperature",\n entity_id="climate.thermostat", data={"temperature": 22, "hvac_mode": "heat"})\n'})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:'Set living room lights to blue at 50% brightness\n\u2192 ha_call_service(domain="light", service="turn_on",\n entity_id="light.living_room", data={"brightness": 128, "color_name": "blue"})\n'})}),"\n",(0,t.jsx)(n.h2,{id:"gateway-platform-real-time-events",children:"\u7f51\u5173\u5e73\u53f0\uff1a\u5b9e\u65f6\u4e8b\u4ef6"}),"\n",(0,t.jsxs)(n.p,{children:["Home Assistant \u7f51\u5173\u9002\u914d\u5668\u901a\u8fc7 WebSocket \u8fde\u
163a5\uff0c\u5e76\u8ba2\u9605 ",(0,t.jsx)(n.code,{children:"state_changed"})," \u4e8b\u4ef6\u3002\u5f53\u8bbe\u5907\u72b6\u6001\u53d1\u751f\u53d8\u5316\u4e14\u5339\u914d\u4f60\u7684\u8fc7\u6ee4\u89c4\u5219\u65f6\uff0c\u8be5\u4e8b\u4ef6\u5c06\u4f5c\u4e3a\u6d88\u606f\u8f6c\u53d1\u7ed9 Agent\u3002"]}),"\n",(0,t.jsx)(n.h3,{id:"event-filtering",children:"\u4e8b\u4ef6\u8fc7\u6ee4"}),"\n",(0,t.jsx)(n.admonition,{title:"\u5fc5\u9700\u914d\u7f6e",type:"warning",children:(0,t.jsxs)(n.p,{children:["\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,t.jsx)(n.strong,{children:"\u4e0d\u4f1a\u8f6c\u53d1\u4efb\u4f55\u4e8b\u4ef6"}),"\u3002\u4f60\u5fc5\u987b\u914d\u7f6e\u81f3\u5c11\u4e00\u4e2a ",(0,t.jsx)(n.code,{children:"watch_domains"}),"\u3001",(0,t.jsx)(n.code,{children:"watch_entities"})," \u6216 ",(0,t.jsx)(n.code,{children:"watch_all"})," \u624d\u80fd\u63a5\u6536\u4e8b\u4ef6\u3002\u82e5\u65e0\u8fc7\u6ee4\u89c4\u5219\uff0c\u542f\u52a8\u65f6\u5c06\u8bb0\u5f55\u8b66\u544a\u4fe1\u606f\uff0c\u6240\u6709\u72b6\u6001\u53d8\u66f4\u5c06\u88ab\u9759\u9ed8\u4e22\u5f03\u3002"]})}),"\n",(0,t.jsxs)(n.p,{children:["\u5728 ",(0,t.jsx)(n.code,{children:"~/.hermes/config.yaml"})," \u6587\u4ef6\u4e2d\uff0c\u4e8e Home Assistant \u5e73\u53f0\u7684 ",(0,t.jsx)(n.code,{children:"extra"})," \u90e8\u5206\u914d\u7f6e Agent \u53ef\u89c1\u7684\u4e8b\u4ef6\uff1a"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"platforms:\n homeassistant:\n enabled: true\n extra:\n watch_domains:\n - climate\n - binary_sensor\n - alarm_control_panel\n - light\n watch_entities:\n - sensor.front_door_battery\n ignore_entities:\n - sensor.uptime\n - sensor.cpu_usage\n - sensor.memory_usage\n cooldown_seconds: 30\n"})}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"\u8bbe\u7f6e"}),(0,t.jsx)(n.th,{children:"\u9ed8\u8ba4\u503c"}),(0,t.jsx)(n.th,{children:"\u63cf\u8ff0"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"watch_domains"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:"(\u65e0)"})}),(0,t.jsxs)(n.td,{children:["\u4ec5\u76d1\u89c6\u8fd9\u4e9b\u5b9e\u4f53\u9886\u57df\uff08\u4f8b\u5982 ",(0,t.jsx)(n.code,{children:"climate"}),"\u3001",(0,t.jsx)(n.code,{children:"light"}),"\u3001",(0,t.jsx)(n.code,{children:"binary_sensor"}),"\uff09"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"watch_entities"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:"(\u65e0)"})}),(0,t.jsx)(n.td,{children:"\u4ec5\u76d1\u89c6\u8fd9\u4e9b\u7279\u5b9a\u5b9e\u4f53 ID"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"watch_all"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"false"})}),(0,t.jsxs)(n.td,{children:["\u8bbe\u4e3a ",(0,t.jsx)(n.code,{children:"true"})," \u4ee5\u63a5\u6536 ",(0,t.jsx)(n.strong,{children:"\u6240\u6709"})," \u72b6\u6001\u53d8\u66f4\uff08\u4e0d\u63a8\u8350\u5927\u591a\u6570\u914d\u7f6e\uff09"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"ignore_entities"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:"(\u65e0)"})}),(0,t.jsx)(n.td,{children:"\u59cb\u7ec8\u5ffd\u7565\u8fd9\u4e9b\u5b9e\u4f53\uff08\u5728\u9886\u57df/\u5b9e\u4f53\u8fc7\u6ee4\u524d\u5e94\u7528\uff09"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"cooldown_seconds"})}),(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"30"})}),(0,t.jsx)(n.td,{children:"\u540c\u4e00\u5b9e\u4f53\u4e8b\u4ef6\u4e4b\u95f4\u7684\u6700\u5c0f\u79d2\u6570\u95f4\u9694"})]})]})]}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["\u5efa\u8bae\u4ece\u4e00\u7ec4\u805a\u7126\u7684\u9886\u57df\u5f00\u59cb \u2014\u2014 ",(0,t.jsx)(n.code,{children:"climate"}),"\u3001",(0,t.jsx)(n.code,{children:"binary_sensor"})," \u548c ",(0,t.jsx)(n.code,{children:"alarm_control_panel"})," \u8986\u76d6\u4e86\u6700\u5b9e\u7528\u7684\u81ea\u52a8\u5316\u573a\u666f\u3002\u6839\u636e\u9700\u8981\u9010\u6b65\u6dfb\u52a0\u66f4\u591a\u9886\u57df\u3002\u4f7f\u7528 ",(0,t.jsx)(n.code,{children:"ignore_entities"})," \u6765\u6291\u5236\u566a\u58f0\u4f20\u611f\u5668\uff08\u5982 CPU \u6e29\u5ea6\u62
116\u8fd0\u884c\u65f6\u95f4\u8ba1\u6570\u5668\uff09\u3002"]})}),"\n",(0,t.jsx)(n.h3,{id:"event-formatting",children:"\u4e8b\u4ef6\u683c\u5f0f\u5316"}),"\n",(0,t.jsx)(n.p,{children:"\u72b6\u6001\u53d8\u66f4\u4ee5\u57fa\u4e8e\u9886\u57df\u7684\u53ef\u8bfb\u6d88\u606f\u683c\u5f0f\u5448\u73b0\uff1a"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"\u9886\u57df"}),(0,t.jsx)(n.th,{children:"\u683c\u5f0f"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"climate"})}),(0,t.jsx)(n.td,{children:"\"HVAC \u6a21\u5f0f\u4ece 'off' \u53d8\u4e3a 'heat'\uff08\u5f53\u524d\uff1a21\uff0c\u76ee\u6807\uff1a23\uff09\""})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"sensor"})}),(0,t.jsx)(n.td,{children:'"\u4ece 21\xb0C \u53d8\u4e3a 22\xb0C"'})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"binary_sensor"})}),(0,t.jsx)(n.td,{children:'"\u89e6\u53d1" / "\u6e05\u9664"'})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"light"}),"\u3001",(0,t.jsx)(n.code,{children:"switch"}),"\u3001",(0,t.jsx)(n.code,{children:"fan"})]}),(0,t.jsx)(n.td,{children:'"\u6253\u5f00" / "\u5173\u95ed"'})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"alarm_control_panel"})}),(0,t.jsx)(n.td,{children:"\"\u62a5\u8b66\u72b6\u6001\u4ece 'armed_away' \u53d8\u4e3a 'triggered'\""})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.em,{children:"(\u5176\u4ed6)"})}),(0,t.jsx)(n.td,{children:"\"\u4ece 'old' \u53d8\u4e3a 'new'\""})]})]})]}),"\n",(0,t.jsx)(n.h3,{id:"agent-responses",children:"Agent \u54cd\u5e94"}),"\n",(0,t.jsxs)(n.p,{children:["Agent \u53d1\u51fa\u7684\u51fa\u7ad9\u6d88\u606f\u5c06\u4ee5 ",(0,t.jsx)(n.strong,{children:"Home Assistant \u6301\u4e45\u901a\u77e5"})," \u5f62\u5f0f\u53d1\u9001\uff08\u901a\u8fc7 ",(0,t.jsx)(n.code,{children:"persistent_notification.create"}),"\uff09\u3002\u8fd9\u4e9b\u901a\u77e5\u5c06\u5728 HA \u901a\u77e5\u9762\u677f\u4e2d\u663e\u793a\uff0c\u6807\u9898\u4e3a\u201cHermes Agent\u201d\u3002"]}),"\n",(0,t.jsx)(n.h3,{id:"connection-management",children:"\u8fde\u63a5\u7ba1\u7406"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"WebSocket"}),"\uff0c30\u79d2\u5fc3\u8df3\uff0c\u7528\u4e8e\u5b9e\u65f6\u4e8b\u4ef6"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"\u81ea\u52a8\u91cd\u8fde"}),"\uff0c\u6307\u6570\u9000\u907f\uff1a5\u79d2 \u2192 10\u79d2 \u2192 30\u79d2 \u2192 60\u79d2"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"REST API"}),"\uff0c\u7528\u4e8e\u51fa\u7ad9\u901a\u77e5\uff08\u72ec\u7acb\u4f1a\u8bdd\uff0c\u907f\u514d\u4e0e WebSocket \u51b2\u7a81\uff09"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"\u6388\u6743\u673a\u5236"})," \u2014 HA \u4e8b\u4ef6\u59cb\u7ec8\u7ecf\u8fc7\u6388\u6743\uff08\u65e0\u9700\u7528\u6237\u767d\u540d\u5355\uff0c\u56e0\u4e3a ",(0,t.jsx)(n.code,{children:"HASS_TOKEN"})," \u5df2\u9a8c\u8bc1\u8fde\u63a5\uff09"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"security",children:"\u5b89\u5168\u6027"}),"\n",(0,t.jsx)(n.p,{children:"Home Assistant \u5de5\u5177\u5f3a\u5236\u6267\u884c\u5b89\u5168\u9650\u5236\uff1a"}),"\n",(0,t.jsxs)(n.admonition,{title:"\u88ab\u963b\u6b62\u7684\u57df\u540d",type:"warning",children:[(0,t.jsxs)(n.p,{children:["\u4ee5\u4e0b\u670d\u52a1\u57df\u540d\u88ab",(0,t.jsx)(n.strong,{children:"\u963b\u6b62"}),"\uff0c\u4ee5\u9632\u6b62\u5728 HA \u4e3b\u673a\u4e0a\u6267\u884c\u4efb\u610f\u4ee3\u7801\uff1a"]}),(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"shell_command"})," \u2014 \u4efb\u610f shell \u547d\u4ee4"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"command_line"})," \u2014 \u6267\u884c\u547d\u4ee4\u7684\u4f20\u611f\u5668/\u5f00\u5173"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"python_script"})," \u2014 \u811a\u672c\u5316 Python \u6267\u884c"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"pyscript"}
1)," \u2014 \u66f4\u5e7f\u6cdb\u7684\u811a\u672c\u96c6\u6210"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"hassio"})," \u2014 \u63d2\u4ef6\u63a7\u5236\u3001\u4e3b\u673a\u5173\u673a/\u91cd\u542f"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"rest_command"})," \u2014 \u7531 HA \u670d\u52a1\u5668\u53d1\u8d77\u7684 HTTP \u8bf7\u6c42\uff08SSRF \u5411\u91cf\uff09"]}),"\n"]}),(0,t.jsx)(n.p,{children:"\u5c1d\u8bd5\u8c03\u7528\u8fd9\u4e9b\u57df\u540d\u4e2d\u7684\u670d\u52a1\u5c06\u8fd4\u56de\u9519\u8bef\u3002"})]}),"\n",(0,t.jsxs)(n.p,{children:["\u5b9e\u4f53 ID \u4f1a\u6839\u636e\u6b63\u5219\u8868\u8fbe\u5f0f ",(0,t.jsx)(n.code,{children:"^[a-z_][a-z0-9_]*\\.[a-z0-9_]+$"})," \u8fdb\u884c\u9a8c\u8bc1\uff0c\u4ee5\u9632\u6b62\u6ce8\u5165\u653b\u51fb\u3002"]}),"\n",(0,t.jsx)(n.h2,{id:"example-automations",children:"\u793a\u4f8b\u81ea\u52a8\u5316"}),"\n",(0,t.jsx)(n.h3,{id:"morning-routine",children:"\u65e9\u6668\u4f8b\u884c\u7a0b\u5e8f"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:'User: Start my morning routine\n\nAgent:\n1. ha_call_service(domain="light", service="turn_on",\n entity_id="light.bedroom", data={"brightness": 128})\n2. ha_call_service(domain="climate", service="set_temperature",\n entity_id="climate.thermostat", data={"temperature": 22})\n3. ha_call_service(domain="media_player", service="turn_on",\n entity_id="media_player.kitchen_speaker")\n'})}),"\n",(0,t.jsx)(n.h3,{id:"security-check",children:"\u5b89\u5168\u68c0\u67e5"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:'User: Is the house secure?\n\nAgent:\n1. ha_list_entities(domain="binary_sensor")\n \u2192 checks door/window sensors\n2. ha_get_state(entity_id="alarm_control_panel.home")\n \u2192 checks alarm status\n3. ha_list_entities(domain="lock")\n \u2192 checks lock states\n4. Reports: "All doors closed, alarm is armed_away, all locks engaged."\n'})}),"\n",(0,t.jsx)(n.h3,{id:"reactive-automation-via-gateway-events",children:"\u57fa\u4e8e\u7f51\u5173\u4e8b\u4ef6\u7684\u54cd\u5e94\u5f0f\u81ea\u52a8\u5316"}),"\n",(0,t.jsx)(n.p,{children:"\u4f5c\u4e3a\u7f51\u5173\u5e73\u53f0\u8fde\u63a5\u65f6\uff0cAgent \u53ef\u54cd\u5e94\u4e8b\u4ef6\uff1a"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:'[Home Assistant] Front Door: triggered (was cleared)\n\nAgent automatically:\n1. ha_get_state(entity_id="binary_sensor.front_door")\n2. ha_call_service(domain="light", service="turn_on",\n entity_id="light.hallway")\n3. Sends notification: "Front door opened. Hallway lights turned on."\n'})})]})}function o(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},35478:(e,n,s)=>{s.d(n,{R:()=>d,x:()=>l});var i=s(58101);const t={},r=i.createContext(t);function d(e){const n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.