内容提要
SmartHaus 是一个基于 .NET 10 的开源智能家居项目,约 3.6 万行代码,可接入 KNX 总线、热泵、光伏、摄像头等真实设备。其核心设计是设备事件输入、AI 命令输出:SmartHaus 将住宅封装为 69 个 MCP 工具,大模型代理交由外部运行时负责,便于替换。亮点包括 Redis 领导选举、报文去重、写操作 dryRun 校验、百叶窗行程跟踪,以及面向模型的工具描述与报错指引。项目仍属早期 PoC,需要真实硬件,组地址命名遵循自有规范。
延伸解读
把“智能”外包:模型可换,房子不变
SmartHaus 最清醒的设计是不在项目内构造大模型代理,而是把代理定义、会话、模型选择和密钥管理全部交给外部 Agent Runtime。这样模型可以随技术迭代更换,而 KNX 总线、热泵等设备侧逻辑保持稳定。对读者而言,这意味着项目的价值不在“用了哪个模型”,而在于把住宅封装成 69 个可被模型调用的 MCP 工具,让上层智能成为可替换零件。
工具层较真:dryRun 与报错即指引
所有写操作都带 dryRun 参数,允许模型先空跑验证参数再真正下发,这是防 AI 误操作的第一道闸。百叶窗长动作被做成 tracked operation,先返回“已开始移动”,行程结束再推完成消息,并延后发送叶片指令以避免冲突。工具描述和校验报错都直接写给模型看,甚至包含“0 全开、100 全关”等 KNX 惯例和下一步操作建议,减少幻觉和无效调用。
工程纪律:源头治污与诚实边界
项目把 ETS 导出的 KNX 工程文件视为命名的唯一事实来源,命名不合规的组地址直接跳过,禁止在代码里补偿错误元数据。这种“源头治污”的纪律比架构图更能说明工程质量。同时 README 明确不宣称 demo 被实际跑通,版本说明也坦白小版本引入不兼容变更。读者应把项目视为早期 PoC,接口随时会变,且全套运行需要真实欧洲硬件,demo 档不含 AI 对话。
Q&A
SmartHaus 是什么项目?它主要解决什么问题?
SmartHaus 是一个基于 .NET 10 的开源智能家居项目,约 3.6 万行代码,旨在将整栋房子封装成 69 个 MCP 工具,让 AI 代理通过 MCP 协议管理真实设备(如 KNX 总线、热泵、光伏、摄像头等)。其核心设计是设备事件输入、AI 命令输出,大模型代理交由外部运行时负责,便于替换。
SmartHaus 如何保证多副本部署时 KNX 总线连接的安全?
SmartHaus 使用 Redis RedLock 进行领导选举,只有抢到 leader 的实例才持有总线连接,备用副本连外发命令的队列都不消费。总线断线有专门的重连通道,按 KNX 的 area/line 拓扑逐条恢复。
SmartHaus 的 MCP 工具设计有哪些防止 AI 误操作的措施?
所有写操作都带 dryRun 参数,大模型可先空跑验证参数再真正下发;百叶窗移动做成 tracked operation,立即返回“已开始移动”,行程结束再推送完成消息;工具描述中直接嵌入领域知识(如 KNX 惯例 0 全开、100 全关),错误消息也设计成给模型的下一步指引。
SmartHaus 对 KNX 组地址的命名有什么特殊要求?
SmartHaus 定了一套连字符分段规范:楼层用德语缩写 KG/EG/OG/DG,类目分照明 LI、百叶窗 BL、供暖 HZ、插座 SD 等八种,再加上房间、朝向、灯具类型。ETS 导出的 XML 喂进来后逐段匹配冻结字典,解析完如果还有剩下的段,说明命名不合规,整条地址直接跳过。
没有真实硬件可以体验 SmartHaus 吗?
可以。运行 docker compose --profile demo up --build 一条命令即可启动 Redis、Azurite、OpenTelemetry 等组件,然后 curl 一个模拟的摄像头人形检测事件进去,就能看完整条事件链路。requests 目录里给每个控制器都备好了 .http 文件,可用 VS Code 的 REST Client 插件直接测试。但 demo 档不含 AI 对话,通信功能还需另外部署 agentizr 和 signalizr 两个服务。
SmartHaus 项目目前有哪些主要限制或门槛?
要跑全套需要真实的欧洲硬件(如 Buderus 热泵、Fronius 逆变器、KNX 总线房子);组地址命名规范是作者自家约定,复用 KNX 部分需按他的规矩重新命名 ETS 工程;项目是早期 PoC,接口随时会变;仓库本身不含模型编排代码,智能程度取决于外部代理运行时,期待开箱即用的 Jarvis 会失望。