# mock_dev **Repository Path**: enterprise-project_2/mock_dev ## Basic Information - **Project Name**: mock_dev - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-03 - **Last Updated**: 2026-07-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Mock Dev 物联网设备模拟开发环境,用于测试设备激活、绑定、控制和通信流程。 ## 项目简介 Mock Dev 是一个完整的物联网设备模拟开发环境,包含模拟设备(Mock Device)、模拟服务器(Mock Server)和 MQTT 消息代理(EMQX)。该项目主要用于开发和测试 IoT 设备的以下核心功能: - 设备激活流程 - 设备绑定与解除绑定 - 设备控制命令下发 - 心跳与在线状态管理 - 报警通知 - 恢复出厂设置 ## 项目结构 ``` mock_dev/ ├── build.sh # 主构建脚本(统一管理所有组件) ├── test.sh # 测试脚本 ├── dev.md # 设备流程设计文档 ├── plan_mockdev.md # Mock Device 开发计划 ├── plan_mockserver.md # Mock Server 开发计划 ├── output/ # 输出目录 │ └── mqtt_credentials.json ├── mockdev/ # 模拟设备 (Go) │ ├── build.sh │ ├── go.mod │ ├── go.sum │ ├── main.go │ └── main_test.go ├── mockserver/ # 模拟服务器 (Go) │ ├── build.sh │ ├── go.mod │ ├── go.sum │ ├── main.go │ └── main_test.go └── emqx/ # EMQX MQTT 代理 ├── build.sh └── docker-compose.yml ``` ## 快速开始 ### 前置要求 - Go 1.21+ - Docker & Docker Compose - fzf (命令行模糊搜索工具) ### 构建与运行 #### 方式一:使用主构建脚本 ```bash # 构建所有组件 ./build.sh # 运行所有服务 ./build.sh run_all # 查看状态 ./build.sh status # 停止所有服务 ./build.sh stop_all # 清理所有 ./build.sh clean_all ``` #### 方式二:分别构建和运行 **EMQX (MQTT 代理):** ```bash cd emqx ./build.sh build_run ``` **Mock Server:** ```bash cd mockserver ./build.sh build_run ``` Mock Server 必须先于设备 MQTT 登录可访问, 因为 EMQX 会通过 HTTP Authentication 调用 `http://host.docker.internal:9001/api/mqtt/auth` 校验登录。 **Mock Device:** ```bash cd mockdev ./build.sh build_run ``` ### 运行测试 ```bash ./test.sh ``` ## 核心功能 ### 设备激活与绑定流程 项目实现了完整的设备激活和绑定流程,包括: 1. **设备请求激活** - 设备上电后向服务器请求激活 2. **服务器返回 MQTT 登录信息** - 服务器验证设备并下发凭证 3. **设备查询激活状态** - 设备轮询激活状态 4. **手机发起绑定** - 移动端应用发起设备绑定 5. **设备登录 MQTT** - 使用凭证连接 MQTT 服务器 详细流程见 [dev.md](./dev.md) ### MQTT 通信 - EMQX 使用 HTTP Authentication 询问 Mock Server 是否允许连接 - 当前没有单独分配 clientId, 设备连接时使用 `clientId = username = mqttId`, `password = mqttPassword` - Mock Server 自己订阅 EMQX 时使用内部账号, 默认 `MOCKSERVER_MQTT_USERNAME=mockserver`, `MOCKSERVER_MQTT_PASSWORD=mockserver_pwd` - 设备上线通知 - 心跳保持 - 命令下发与确认 (cmd_ack) - 报警消息推送 ### 设备状态管理 | 状态 | 说明 | |------|------| | WaitActivation | 等待激活 | | ActivatedUnbound | 已激活未绑定 | | Bound | 已绑定 | | Disabled | 已禁用 | ## API 接口 ### Mock Server HTTP API - `GET /` - 服务器状态页面 - `GET /devices` - 获取设备列表 - `POST /devices/enroll` - 录入设备 - `POST /devices/:id/activate` - 激活设备 - `POST /devices/:id/bind` - 绑定设备 - `POST /devices/:id/unbind` - 解除绑定 - `POST /devices/:id/unenroll` - 解除录入 - `POST /devices/:id/deactivate` - 解除激活 - `POST /devices/:id/factory_reset` - 恢复出厂设置 ### Mock Device HTTP API - `GET /` - 设备控制页面 - `GET /state` - 获取设备状态 - `POST /poweron` - 开机 - `POST /poweroff` - 关机 - `POST /factory_reset` - 恢复出厂设置 ## 技术栈 - **后端**: Go - **数据库**: SQLite (mockserver) - **MQTT Broker**: EMQX - **容器**: Docker & Docker Compose ## 开发计划 详细开发计划请参考: - [Mock Device 开发计划](./plan_mockdev.md) - [Mock Server 开发计划](./plan_mockserver.md) ## 许可证 本项目仅用于企业内部开发和测试。