设备模拟器
无需真实硬件即可进行端到端开发调试。模拟器通过 MQTT 创建虚拟设备,自动完成注册认证、周期性数据上报、指令响应,与真实设备行为完全一致。
源代码位于 yunstack-backend/tools/device-simulator/。
快速开始
bash
cd yunstack-backend/tools/device-simulator
pnpm install
pnpm start默认启动 1 个四路继电器 + 1 个环境传感器,连接 mqtt://localhost:1883,每 5 秒上报一次数据。
命令参数
| 参数 | 简写 | 默认值 | 说明 |
|---|---|---|---|
--broker | -b | mqtt://localhost:1883 | EMQX MQTT Broker 地址 |
--type | -t | both | 设备类型:relay / sensor / both |
--productKey | -p | p_relay_4ch | 产品标识(sensor 类型自动切换为 p_env_sensor) |
--count | -n | 1 | 每种类型启动的设备数量 |
--interval | -i | 5 | 数据上报间隔(秒) |
使用场景
启动单个继电器
bash
pnpm run relay -- -n 1 -i 3启动 1 个四路继电器模拟器,每 3 秒上报一次(继电器会随机切换状态)。
启动多个环境传感器
bash
pnpm run sensor -- -n 3 -i 10启动 3 个环境传感器,每 10 秒上报一次(温湿度/气压/光照/CO₂ 模拟真实波动)。
指定 Broker 地址
bash
pnpm start -- -b mqtt://192.168.1.100:1883 -n 2工作原理
设备身份
每个虚拟设备拥有随机生成的凭证:
| 凭证 | 生成方式 |
|---|---|
| ClientId | 随机 12 位十六进制 MAC 地址 |
| Username (ProductKey) | 命令行指定或默认 |
| Password (DeviceSecret) | UUID v4 随机生成 |
设备生命周期
启动 → MQTT CONNECT(预置凭证)
→ 设备使用预置凭证连接 EMQX,EMQX 直连 PostgreSQL 认证
→ 收到 config/set(平台分配逻辑 ID)
→ 回复 config/set_reply 确认
→ 周期性上报属性(property/post)
→ 监听并响应控制指令(property/set → set_reply)数据模拟策略
四路继电器 (relay):芯片温度在 30~70°C 漂移,继电器状态每 3~13 次上报随机翻转一个通道。
环境传感器 (sensor):各参数在合理范围内模拟真实波动——温度 ±0.3°C、湿度 ±2%、气压 ±1hPa、CO₂ 缓慢漂移、光照偏下行波动。
与真实设备的区别
| 维度 | 真实设备 | 模拟器 |
|---|---|---|
| 数据来源 | 物理传感器 | 软件生成,模拟波动 |
| 连接方式 | WiFi / 串口 | 直连 MQTT Broker |
| 配网 | BLE / SoftAP | 无需配网 |
| 固件更新 | OTA | 无需 |
| 适用场景 | 生产环境 | 开发/测试/演示 |
模拟器覆盖了 MQTT 协议层的完整交互(认证→注册→上报→控制),前后端开发者无需依赖硬件即可端到端验证整个数据链路。
典型开发流程
- 启动基础服务:
docker compose up -d(EMQX + PostgreSQL + Redis + InfluxDB) - 启动后端:
cd yunstack-backend && pnpm start:dev - 启动模拟器:
cd tools/device-simulator && pnpm start - 后端自动注册设备,模拟器开始上报数据
- 打开 Web 后台 / 小程序查看实时数据和控制设备
- 使用 MQTTX 手动发布指令验证设备响应
整个过程无需任何物理硬件。
