HomeTom 是一套采用领域驱动设计与洋葱架构的异步智能家居编排系统。它以 Home Assistant 作为硬件抽象层,负责管理设备、场景与执行过程。

围绕行为建立模型

项目划分为三个上下文:

  • 设备描述硬件能力与状态同步;
  • 场景定义触发器、条件和动作;
  • 执行记录运行状态、重试策略与最终结果。

这样可以避免 API 处理器和硬件客户端逐渐变成所有业务规则的堆积处。

让基础设施留在领域之外

FastAPI 接收请求并把工作交给应用层。领域代码依赖接口,而不是数据库或 Home Assistant。SQLAlchemy 仓储和 HTTP 客户端只在系统边缘实现这些接口。

trigger = schedule.next()
execution = orchestration.start(scene, trigger)
result = await workflow.run(execution)
await events.publish(result.events)

具体语法并不重要,关键是依赖方向:外部系统发生变化时,不需要重写定义有效场景或执行过程的核心规则。

把失败视为领域状态

网络硬件缓慢且并不可靠,超时、重试和部分失败都是正常运行条件。执行模型会明确记录这些状态,领域事件则让日志和通知离开主要命令路径。

这套设计并不承诺分布式硬件永远正常,而是让系统在出现问题时能够解释发生了什么,并以可预测的方式恢复。