Skip to content

设备模拟器

无需真实硬件即可进行端到端开发调试。模拟器通过 MQTT 创建虚拟设备,自动完成注册认证、周期性数据上报、指令响应,与真实设备行为完全一致。

源代码位于 yunstack-backend/tools/device-simulator/


快速开始

bash
cd yunstack-backend/tools/device-simulator
pnpm install
pnpm start

默认启动 1 个四路继电器 + 1 个环境传感器,连接 mqtt://localhost:1883,每 5 秒上报一次数据。


命令参数

参数简写默认值说明
--broker-bmqtt://localhost:1883EMQX MQTT Broker 地址
--type-tboth设备类型:relay / sensor / both
--productKey-pp_relay_4ch产品标识(sensor 类型自动切换为 p_env_sensor
--count-n1每种类型启动的设备数量
--interval-i5数据上报间隔(秒)

使用场景

启动单个继电器

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 协议层的完整交互(认证→注册→上报→控制),前后端开发者无需依赖硬件即可端到端验证整个数据链路。


典型开发流程

  1. 启动基础服务:docker compose up -d(EMQX + PostgreSQL + Redis + InfluxDB)
  2. 启动后端:cd yunstack-backend && pnpm start:dev
  3. 启动模拟器:cd tools/device-simulator && pnpm start
  4. 后端自动注册设备,模拟器开始上报数据
  5. 打开 Web 后台 / 小程序查看实时数据和控制设备
  6. 使用 MQTTX 手动发布指令验证设备响应

整个过程无需任何物理硬件。