# iot-platform **Repository Path**: li-peisong1/iot-platform ## Basic Information - **Project Name**: iot-platform - **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-08-02 - **Last Updated**: 2026-08-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IoT 平台 单进程 IoT 平台:内嵌 **MQTT broker + CoAP server + HTTP 入口**,三种协议归一化接入,数据写入 SQLite,通过 WebSocket 实时推送到前端(ECharts 仪表盘)。 ## 技术栈 - 后端:Python 3.9 + FastAPI + SQLAlchemy(SQLite) - 协议接入:amqtt(内嵌 MQTT broker)、aiocoap(内嵌 CoAP server)、REST HTTP - 实时推送:WebSocket - 前端:单页 HTML + ECharts(由后端托管,免构建) ## 目录结构 ``` iot-platform/ ├── backend/ │ ├── app/ │ │ ├── main.py # FastAPI 入口 + 生命周期(启动内嵌协议) │ │ ├── config.py # 配置(端口/密钥/默认账号) │ │ ├── database.py # SQLite + SQLAlchemy │ │ ├── models.py # User/Device/Telemetry/Alarm/Command │ │ ├── auth.py # JWT 认证 │ │ ├── ingest.py # 统一接入管线 + 告警检查 + WS 推送 │ │ ├── protocols.py # 内嵌 MQTT broker / CoAP server / MQTT 订阅 │ │ ├── websocket.py # WebSocket 连接管理 │ │ └── routers/ # auth / devices / data / alarms API │ └── run.py # 启动脚本 ├── frontend/ # index.html 仪表盘(后端托管) ├── sim/ # 三种协议模拟设备 └── requirements.txt ``` ## 快速开始 ```bash cd iot-platform python3 -m venv .venv .venv/bin/pip install -r requirements.txt .venv/bin/python backend/run.py # 或 backend/.venv/bin/uvicorn app.main:app ``` 启动后打开 http://127.0.0.1:8000,默认账号 `admin / admin123`。 ## 使用流程 1. **添加设备**:前端左侧选择协议(MQTT/CoAP/HTTP)并填写 device_id,会返回设备 token。 2. **跑模拟设备**(需要 token,HTTP 设备必须传): ```bash .venv/bin/python sim/mqtt_device.py --device-id dev-mqtt-001 --interval 2 .venv/bin/python sim/coap_device.py --device-id dev-coap-001 --interval 2 .venv/bin/python sim/http_device.py --device-id dev-http-001 --token --interval 2 ``` 3. **查看实时数据**:点击左侧设备,右侧图表实时刷新,历史数据表格同步更新。 4. **配置告警**:`POST /api/v1/alarms`,例如温度 > 40,超过阈值时前端告警区实时显示。 ## 设备上报协议 三种协议上报的 JSON 数据格式一致: ```json {"temperature": 35.2, "humidity": 77.2, "battery": 47.0} ``` | 协议 | 上报方式 | 说明 | |------|----------|------| | MQTT | 发布到 `device/{device_id}/data` | 内嵌 broker `0.0.0.0:1883`,QoS 0-1 | | CoAP | POST `coap://127.0.0.1:5683/device/{device_id}/data` | 正文为 JSON | | HTTP | POST `http://127.0.0.1:8000/api/v1/ingest` | body: `{"device_id","token","data"}`,token 鉴权 | ## REST API 概览 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/v1/auth/login` | 登录,返回 JWT | | POST | `/api/v1/auth/register` | 注册用户 | | GET | `/api/v1/devices` | 设备列表 | | POST | `/api/v1/devices` | 创建设备(返回 token) | | DELETE | `/api/v1/devices/{id}` | 删除设备 | | GET | `/api/v1/devices/{id}/telemetry?limit=N` | 历史数据 | | POST | `/api/v1/ingest` | HTTP 设备上报 | | GET | `/api/v1/alarms` | 告警列表 | | POST | `/api/v1/alarms` | 创建告警规则 | | POST | `/api/v1/alarms/{id}/resolve` | 解除告警 | | POST | `/api/v1/commands` | 下发指令 | | WS | `/ws` | 实时推送 telemetry / alarm | 除 `/api/v1/auth/*` 和 `/api/v1/ingest` 外均需 `Authorization: Bearer `。 ## 数据存储 - `backend/data/iot.db`:SQLite 单文件 - `telemetry` 表存储全部上报数据(含协议标识),按设备/时间查询 - 告警、指令、设备、用户分表存储 ## 生产部署建议 - 更换 `config.py` 中 `JWT_SECRET` 和默认管理员密码 - 大规模接入时把 SQLite 换成 InfluxDB/PostgreSQL,MQTT broker 换独立 EMQX - 用 systemd/supervisor 守护 `uvicorn` 进程