SuperAPI AI 工具集

ha-architecture

通用与其它

查看项目

更新于 10-15 23:48

技能介绍

用途:这份资料围绕 Home Assistant 核心架构展开,说明 hass 对象、事件总线、状态机、服务注册表和集成加载顺序,适合在开发或调试 Home Assistant 集成、排查事件传播与实体状态问题时查阅。

主要能力:

  1. hass 对象:每个集成都会拿到 HomeAssistant 实例,它是核心系统的集中入口,包含 hass.bus(发布/订阅事件总线)、hass.states(实体状态机)、hass.services(服务注册表)、hass.config(位置、单位、时区等系统配置)。
  2. 事件总线:组件间通信都走事件。可用 hass.bus.async_fire 触发自定义事件,用 hass.bus.async_listen 监听;监听回调若标为 @callback 则为同步且不允许执行 I/O。关键事件包括 state_changed、homeassistant_start、homeassistant_stop、call_service、automation_triggered。
  3. 状态机:记录每个实体的当前状态,状态是不可变快照。通过 hass.states.get 取得状态后可读取 state(始终是字符串)、attributes(属性字典)与 last_changed。特殊状态有 unavailable(设备离线、推送连接断开或协调器更新失败)和 unknown(实体存在但尚无值)。
  4. 服务注册表:服务在界面中称为动作,用于控制设备。集成级服务若需独立于配置条目存在,应在 async_setup 中注册;否则在 async_setup_entry 中注册并防止重复(例如用 hass.services.has_service 判断),仅在移除最后一个条目时于 async_unload_entry 注销。
  5. 集成加载顺序:核心启动并读取 configuration.yaml,先加载 manifest.json 中的依赖,调用 async_setup,再对每个配置条目调用 async_setup_entry,随后平台转发加载各平台并注册实体开始接收更新。

必要用法与约束:Home Assistant 运行在单线程 asyncio 事件循环上,所有代码共享该循环,阻塞它会冻结自动化、界面与实体更新,因此异步代码不得阻塞循环。监听到事件后应保存取消订阅函数,并在条目卸载时通过 entry.async_on_unload(unsub) 清理。状态应视为只读,状态机通过替换 State 对象而非原地修改。各集成通过配置条目管理自身生命周期,协调器建议存放在 entry.runtime_data 而非 hass.data。资料未提供其他安装或运行步骤。