# 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-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Mock Dev 物联网设备模拟开发环境,用于测试设备激活、绑定、控制和通信流程。 ## 项目简介 Mock Dev 包含模拟设备(Mock Device)、模拟服务器(Mock Server)、MQTT 消息代理(EMQX)和 nginx 入口。当前按 `~/codes/myfood` 的部署方式组织:根目录统一提供 Docker Compose、本地构建脚本、离线部署包脚本和 nginx 配置。 核心功能保持不变: - 设备激活流程 - 设备绑定与解除绑定 - 设备控制命令下发 - 心跳与在线状态管理 - 报警通知 - 恢复出厂设置 ## 项目结构 ```text mock_dev/ ├── docker-compose.yml # 本地容器编排,Compose 项目名 iot ├── build.sh # 构建、测试、本地启动、打包部署文件 ├── deploy.sh # 服务器部署脚本,会被打进 output/deploy ├── README_DEPLOY.md # 部署包说明 ├── test.sh # Go 测试脚本 ├── .env.example # 容器部署环境变量模板 ├── nginx/ # nginx 容器入口配置 ├── emqx/ # EMQX 配置 ├── mockdev/ # 模拟设备 (Go) ├── mockserver/ # 模拟服务器 (Go + SQLite + 登录) ├── output/ # 构建输出与部署包 ├── dev.md ├── plan_mockdev.md └── plan_mockserver.md ``` ## 快速开始 ### 前置要求 - Go 1.22+ - Docker & Docker Compose - fzf(用于交互菜单,可选) ### 本地容器运行 ```bash ./build.sh docker compose up -d --build ``` 访问地址: - Mock Device: `https://127.0.0.1:9000` - Mock Server: `https://127.0.0.1:9001` - EMQX Dashboard: `http://127.0.0.1:18083` Mock Server 页面需要登录。默认账号密码在 `.env.example` 和 `docker-compose.yml` 中为: ```text admin / admin -> 系统管理员网页 user / user -> 模拟手机 App 网页 ``` 部署或长期使用前请通过 `.env` 修改: ```text MOCKSERVER_LOGIN_USERNAME=admin MOCKSERVER_LOGIN_PASSWORD=your_password ``` ### 构建部署包 ```bash BUILD=1 ./build.sh package ``` 部署包会生成到: ```text output/deploy/ ``` 服务器上使用: ```bash cd output/deploy chmod +x deploy.sh ./deploy.sh install ``` 更多命令见 [README_DEPLOY.md](./README_DEPLOY.md)。 ### 运行测试 ```bash ./test.sh ``` ## 容器与端口 容器命名前缀为 `iot`: - `iot_mockdev` - `iot_mockserver` - `iot_emqx` - `iot_nginx` 宿主机端口保持不变: - `9000` -> nginx HTTPS -> mockdev - `9001` -> nginx HTTPS -> mockserver - `1883` -> EMQX MQTT - `8083` -> EMQX WebSocket - `18083` -> EMQX Dashboard Mock Server 的 SQLite 数据库仍使用原来的 `~/sql/mockdev.sql` 逻辑;容器内对应路径是 `/root/sql/mockdev.sql`,通过 Docker volume `iot_sqlite_data` 持久化。 ## MQTT 通信 - EMQX 使用 HTTP Authentication 调用 `http://mockserver:9001/api/mqtt/auth` - 宿主机访问使用 HTTPS;容器内部服务调用仍使用 HTTP - Mock Server 页面登录只保护网页和 `/server/*` 操作,不阻断设备 API 与 MQTT 鉴权 API - 当前没有单独分配 clientId,设备连接时使用 `clientId = username = mqttId` - Mock Server 自己订阅 EMQX 时使用内部账号,默认 `mockserver / mockserver_pwd` - 设备上线通知 - 心跳保持 - 命令下发与确认 (cmd_ack) - 报警消息推送 ## 设备状态管理 | 状态 | 说明 | |------|------| | WaitActivation | 等待激活 | | ActivatedUnbound | 已激活未绑定 | | Bound | 已绑定 | | Disabled | 已禁用 | ## API 接口 ### Mock Server - `GET /` - Mock Server 页面,需登录 - `GET /login` - 登录页 - `POST /login` - 登录 - `POST /logout` - 退出登录 - `GET /app` - 模拟手机 App 页面,需 user 登录 - `GET /app/state` - 获取模拟手机已绑定设备和报警消息,需 user 登录 - `POST /app/device/bind` - 模拟手机绑定设备,只需设备 ID,不改变录入情况,需 user 登录 - `POST /app/device/delete` - 模拟手机删除设备并解除绑定,需 user 登录 - `GET /server/state` - 获取页面状态 - `POST /server/devices/enroll` - 录入设备,需登录 - `POST /server/devices/activate` - 激活设备,需登录 - `POST /server/devices/unbind` - 解除绑定,需登录 - `POST /server/devices/unenroll` - 解除录入,需登录 - `POST /server/devices/deactivate` - 解除激活,需登录 - `POST /api/device/activation/register` - 设备注册激活 - `POST /api/device/activation/status` - 设备查询激活状态 - `POST /api/device/activation/ack` - 设备激活确认 - `POST /api/device/factory-reset` - 恢复出厂 - `POST /api/app/device/bind` - 模拟 App 绑定,只需设备 ID,不改变录入情况 - `POST /api/device/cmd/poll` - 设备拉取命令 - `POST /api/device/cmd/ack` - 设备确认命令 - `POST /api/mqtt/auth` - EMQX HTTP Authentication ### Mock Device - `GET /` - 设备控制页面 - `GET /device/state` - 获取设备状态 - `POST /device/register` - 设备注册激活 - `POST /device/status` - 查询激活状态 - `POST /device/online` - 开机/上线 - `POST /device/power/off` - 关机 - `POST /device/factory-reset` - 恢复出厂设置 ## 技术栈 - 后端: Go - 数据库: SQLite (mockserver) - MQTT Broker: EMQX - 入口: nginx - 容器: Docker & Docker Compose ## 开发计划 - [Mock Device 开发计划](./plan_mockdev.md) - [Mock Server 开发计划](./plan_mockserver.md) ## 许可证 本项目仅用于企业内部开发和测试。