aimdb家庭飞行员
AimDB支持的智能家居演示使用STM32上的KNX、MQTT链接和LLM/MCP集成——一个用Rust构建的家庭自动化“副驾驶”。
建筑
该项目展示了一个分层的家庭自动化系统,主要由三个部分组成:
- 地面:基于STM32H563ZI的KNX/IP网关,将KNX设备桥接到MQTT
- 使用Embassy构建(异步嵌入式Rust) - 监控KNX总线并向MQTT发布状态更新 - 接收MQTT命令并转发到KNX设备 - 直接在STM32硬件上运行
- 塔:控制和监控控制台(PC应用程序)
- 连接到MQTT代理以与地面通信 - 通过AimX协议公开用于LLM集成的Unix域套接字 - 在MQTT和LLM接口之间提供双向桥接 - 内置Tokio异步运行时
- 飞行员:通过aimdb-mcp服务器的LLM接口
- 实现自然语言控制和监控 - 通过Unix套接字连接到塔 - 适用于Claude Desktop、VS Code Copilot和其他MCP客户端
数据流:KNX设备↔ 接地(STM32)↔ 消息队列遥测传输↔ 塔(PC)↔ UNIX套接字↔ LLM
项目结构
aimdb-homepilot/
├── ground/ # STM32 KNX gateway (Embassy, no_std)
├── tower/ # PC console (Tokio, std)
├── records/ # Shared data types (no_std by default)
└── README.md记录模块
这 records crate定义了所有组件中使用的共享数据类型:
- 切换状态:KNX开关的当前状态(监控)
- 开关控制:控制KNX开关的命令
- 温度:温度传感器读数
每种记录类型包括:
- Serde兼容数据结构(no_std)
- JSON序列化/反序列化
- KNX DPT编码/解码(地面)
- 运行时无关监视器(可选,用于调试)
发展
先决条件
此项目使用DevContainer来实现一致的开发环境。使用来自以下位置的DevContainer配置: https://github.com/aimdb-dev/aimdb/blob/main/.devcontainer/devcontainer.json
文档
有关使用AimDB的详细信息,请参阅官方使用指南: https://github.com/aimdb-dev/aimdb/blob/main/docs/aimdb-usage-guide.md
接地(STM32上的KNX网关)
地面组件是一个嵌入式KNX/IP网关,在STM32H563ZI硬件上运行。
硬件要求
- 板:STM32H563ZI Nucleo板
- 网络:以太网连接到KNX/IP网关和MQTT代理
- 调试:集成ST-Link调试器(在Nucleo板上)
特性
- KNX/IP集成:通过IP网关连接到KNX总线(隧道模式)
- MQTT网桥:发布KNX事件并通过MQTT接收控制命令
- 异步运行时:使用Embassy构建,实现高效的嵌入式异步执行
- 实时监控:跟踪KNX设备状态和温度传感器
配置
编辑 ground/src/main.rs 要配置网络地址,请执行以下操作:
const KNX_GATEWAY_IP: &str = "192.168.1.19"; // Your KNX/IP gateway
const MQTT_BROKER_IP: &str = "192.168.1.7"; // Your MQTT broker建筑与闪光
构建并闪存到STM32:
cd ground
cargo run --release固件将:
- 使用DHCP初始化以太网
- 连接到KNX/IP网关
- 连接到MQTT代理
- 开始桥接KNX↔ 消息队列遥测传输
- LED闪烁以指示操作
备注:在macOS主机上,使用 flash.sh 作为DevContainer USB直通问题的解决方法。
KNX设备配置
网关当前配置为:
受监控设备 (KNX → MQTT):
- 组地址
1/0/7:开关状态监测(DPT 1.001)
- 发布到MQTT主题: knx/tv/state
- 组地址
9/1/0:温度传感器(DPT 9.001)
- 发布到MQTT主题: knx/temperature/state
受控设备 (MQTT→ KNX):
- 组地址
1/0/6:开关控制(DPT 1.001)
- 订阅MQTT主题: knx/tv/control
修改这些 ground/src/main.rs 以匹配您的KNX安装。
技术说明
网络套接字配置:大使馆网络堆栈需要8个插座:
- DHCP客户端(1个套接字)
- KNX/IP连接器(1-2个插座)
- MQTT连接器(1个插座)
- 协议开销(2-3个套接字)
任务池:大使馆执行人使用32个任务槽(通过 embassy-task-pool-32 功能)用于并发异步操作。
记忆:为MQTT/KNX协议缓冲区和JSON序列化分配64KB堆。
塔台(控制台)
该塔是一个PC应用程序,提供MQTT和LLM客户端之间的接口。
特性
- MQTT集成:连接到MQTT代理以与地面通信
- 远程访问:暴露Unix域套接字(
/tmp/console.sock)使用AimX协议 - 安全:LLM访问的可配置读/写权限
- 实时更新:将KNX设备状态流式传输到连接的LLM客户端
跑步
启动控制台:
cd tower
cargo run控制台将:
- 连接到MQTT代理
- 在以下位置创建Unix套接字
/tmp/console.sock - 订阅KNX状态主题(
knx/tv/state,knx/temperature/state) - 将控制命令发布到
knx/tv/control - 接受来自MCP客户端的连接
数据流
LLM Client (Claude/Copilot)
↓ MCP protocol
aimdb-mcp server
↓ AimX protocol (Unix socket)
tower (/tmp/console.sock)
↓ MQTT
MQTT Broker
↓ MQTT
ground (STM32)
↓ KNX/IP
KNX devices飞行员(通过MCP的LLM接口)
飞行员通过aimdb-mcp服务器集成提供自然语言控制。
安装
安装aimdb mcp服务器:
cargo install aimdb-mcpVS代码配置
增添 .vscode/mcp.json:
{
"servers": {
"aimdb": {
"type": "stdio",
"command": "aimdb-mcp",
"args": [],
"env": {
"RUST_LOG": "info"
}
}
}
}重新启动VS Code或直接从MCP.json文件运行MCP服务器。
使用GitHub Copilot
一旦tower运行并配置了aimdb mcp,您就可以:
- 发现实例:“显示可用的AimDB实例”
- 列出记录:“控制台实例中有哪些记录可用?”
- 读取状态:“现在的温度是多少?”或“电视开着吗?”
- 控制装置:“打开电视”(通过MQTT向KNX发送命令)
- 订阅:“订阅50个样本的温度更新”
快速开始
1.启动MQTT代理
确保您有一个正在运行的MQTT代理(例如Mosquitto):
# On the host or in a container
mosquitto -v2.闪存和运行地(STM32)
cd ground
# Edit src/main.rs to configure KNX_GATEWAY_IP and MQTT_BROKER_IP
cargo run --release3.启动塔控制台
cd tower
# Optional: export MQTT_BROKER=mqtt://your-broker:1883
cargo run4.使用MQTT进行测试
监控KNX事件:
mosquitto_sub -h 192.168.1.7 -t 'knx/#' -v发送控制命令:
mosquitto_pub -h 192.168.1.7 -t 'knx/tv/control' \
-m '{"address":"1/0/6","is_on":true}'5.连接LLM
在VS Code中配置aimdb mcp(请参阅Pilot部分),并提出自然语言问题:
- “温度是多少?”
- “打开电视”
- “显示开关状态”
公用事业
AimDB命令行界面
用于开发和调试的命令行工具:
cargo install aimdb-cli常用命令:
# List running instances
aimdb instance list
# Watch temperature in real-time
aimdb watch records::Temperature
# Get switch state
aimdb record get /tmp/console.sock records::SwitchState看 aimdb-cli文档 以获取完整的命令参考。
许可证
看 许可证 了解详情。
