Skip to content

硬件模拟器

可视化 MQTT 虚拟设备模拟工具,物模型驱动,无需真实硬件即可调试完整数据链路。

代码仓库:YunStack-IoT/yunstack-mock-hardware

快速开始

bash
git clone https://github.com/YunStack-IoT/yunstack-mock-hardware.git
cd yunstack-mock-hardware
pnpm install

# Web 可视化模式
node server.js
# 浏览器打开 http://localhost:3456

# CLI 模式(自动化测试)
node cli.js --type relay
node cli.js --type both --count 3 --interval 10
node cli.js --thing-model ./thing-models/p_env_sensor.json

两种使用方式

场景模式说明
手动测试 / 演示Web 界面可视化属性面板、实时日志、OTA 进度
自动化测试 / CICLI命令行参数,脚本友好,可批量启动

Web 界面功能

架构

  • 物模型选择:下拉选择内置模板(继电器/传感器),或粘贴自定义物模型 JSON
  • 连接面板:配置 MQTT Broker 地址、ProductKey、PhysicalId、Secret
  • 属性面板:实时显示设备属性值,布尔型可点击切换,数值型带单位
  • 实时日志流:SSE 实时推送 MQTT 收发消息日志
  • OTA 模拟:收到 OTA 通知 → 模拟下载进度 → 安装完成 → 上报结果
  • 多设备管理:一个页面管理多个虚拟设备,各自独立连接

CLI 参数

-b, --broker <url>      MQTT Broker 地址 (默认: mqtt://localhost:1883)
-t, --type <type>       设备类型: relay | sensor | both
-p, --productKey <key>  产品标识
-n, --count <n>         每类型设备数量 (默认: 1)
-i, --interval <sec>    属性上报间隔秒数 (默认: 5)
-m, --thing-model <路径> 自定义物模型 JSON 文件

MQTT 行为模拟

行为Topic方向说明
属性上报sys/{pid}/{did}/thing/event/property/post设备→平台按间隔自动上报
接收指令sys/{pid}/{did}/thing/service/property/set平台→设备执行后回复 set_reply + 上报新状态
配置下发sys/{pid}/{did}/thing/config/set平台→设备接收逻辑 ID 后更新订阅
OTA 通知sys/{pid}/{did}/thing/ota/notify平台→设备接收后模拟下载→安装→完成
OTA 进度sys/{pid}/{did}/thing/ota/progress设备→平台定时上报下载/安装进度

物模型格式

json
{
  "version": "1.0",
  "deviceType": "relay_controller",
  "meta": { "name": "四路智能继电器", "description": "..." },
  "properties": [
    { "id": "relay_1", "name": "继电器1", "type": "bool", "access": "rw", "ui": { "component": "switch" } },
    { "id": "temperature", "name": "温度", "type": "float", "access": "r", "unit": "°C", "min": -40, "max": 85 }
  ]
}

支持类型:

  • bool: 布尔开关,偶尔随机翻转
  • float / int: 数值,在 min-max 范围内随机漂移
  • string / enum: 字符串,保持默认值

REST API (Web 模式)

Web 模式下提供完整的 REST API,可被自动化脚本调用:

方法路径说明
POST/api/devices创建设备
DELETE/api/devices/:id删除设备
POST/api/devices/:id/connect连接 MQTT
POST/api/devices/:id/disconnect断开
POST/api/devices/:id/report手动上报
PUT/api/devices/:id/properties修改属性值
PUT/api/devices/:id/interval修改上报间隔
GET/api/devices设备列表
GET/api/devices/:id设备详情(含属性值)
GET/api/devices/:id/logs/streamSSE 实时日志流
POST/api/thing-model/import导入物模型

架构

┌─────────────────────────────────────────┐
│  Web UI (public/)                       │
│  HTML/CSS/JS → 属性面板/日志/OTA进度     │
├─────────────────────────────────────────┤
│  server.js (Express)                    │
│  REST API + SSE + 静态文件              │
├─────────────────────────────────────────┤
│  lib/mqtt-client.js                     │
│  MQTT 连接/订阅/发布/OTA 模拟           │
├─────────────────────────────────────────┤
│  lib/data-generator.js                  │
│  物模型驱动的数据生成器                  │
└─────────────────────────────────────────┘
         ↕ MQTT
┌─────────────────┐
│  EMQX Broker     │
└─────────────────┘