# 水文站监测数据查询平台 **Repository Path**: jjj_naic/Data-Query-Platform ## Basic Information - **Project Name**: 水文站监测数据查询平台 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-09 - **Last Updated**: 2026-01-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 水文站实时监测系统 ## 项目简介 这是一个基于FastAPI的水文站实时监测系统,用于接收、解析、存储和展示水文监测数据。系统通过GPRS网络接收DTU设备发送的水位、雨量和电压数据,并提供Web界面进行数据查询和可视化展示。 ## 系统架构 ``` DTU设备 → GPRS网络 → 本机端口(9000-9002) → 数据解析 → 本地数据库 → Web前端查询 ``` ### 核心组件 1. **数据接收层**:监听9000-9002端口,接收DTU设备数据 2. **数据解析层**:解析RTU2018协议数据包 3. **数据存储层**:SQLite数据库存储监测数据 4. **Web展示层**:FastAPI + HTML + ECharts数据可视化 ## 监测站点 - **站点9110**:杨家垴站 - **站点3007**:安徽站 - **站点3010**:独龙江站 ## 监测参数 - **水位数据**:河流或水库的水位高度 - **雨量数据**:降雨量统计 - **电压数据**:设备供电电压状态 ## 项目结构 ``` water_rain_website/ ├── app/ # 主应用目录 │ ├── data_receive/ # 数据接收模块 │ │ ├── gprs_receive9000.py # 9000端口数据接收 │ │ ├── gprs_receive9001.py # 9001端口数据接收 │ │ ├── gprs_receive9002.py # 9002端口数据接收 │ │ ├── parse_rtu2018_data.py # RTU2018协议解析 │ │ ├── db_operations.py # 数据库操作 │ │ └── hydrology.db # SQLite数据库 │ ├── templates/ # HTML模板 │ │ ├── index.html # 主页面 │ │ ├── charts.html # 图表页面 │ │ └── login.html # 登录页面 │ ├── static/ # 静态资源 │ │ ├── echarts.js # 图表库 │ │ └── styles.css # 样式文件 │ ├── main.py # FastAPI应用入口 │ ├── models.py # 数据库模型 │ ├── views.py # 路由和视图 │ └── auth.py # 用户认证 ├── start_water_rain_website.bat # Web应用启动脚本 ├── start_gprs_receive9000.bat # 数据接收启动脚本 ├── requirements.txt # Python依赖 └── README.md # 项目说明 ``` ## 安装和运行 ### 1. 环境要求 - Python 3.7+ - SQLite 3 ### 2. 安装依赖 ```bash pip install -r requirements.txt ``` ### 3. 启动系统 #### 方式一:使用批处理文件(推荐) 1. **启动数据接收服务**: ```bash start_gprs_receive9000.bat # 启动9000端口监听 start_gprs_receive9001.bat # 启动9001端口监听 start_gprs_receive9002.bat # 启动9002端口监听 ``` 2. **启动Web应用**: ```bash start_water_rain_website.bat ``` 3. **启动站点展示**: ```bash start_station_display.bat ``` #### 方式二:手动启动 1. **启动数据接收**: ```bash cd app/data_receive python gprs_receive9000.py ``` 2. **启动Web应用**: ```bash uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload ``` ### 4. 访问系统 - **主页面**:http://localhost:8000 - **登录页面**:http://localhost:8000/login - **图表页面**:http://localhost:8000/charts ## 数据协议 ### RTU2018协议格式 ``` $[站点编码][数据类型][时间戳][电压][水位数据][雨量数据]... ``` #### 数据类型说明 - **G22**:包含12个历史时间点数据(每5分钟一个点) - **G25**:包含6个历史时间点数据(每5分钟一个点) - **G21**:实时数据 #### 示例数据包 ``` $9110G22240429110000120045000000000000450000000000004500000000000045... ``` 解析说明: - `$`:数据包起始标识 - `9110`:站点编码 - `G22`:数据类型 - `24042911`:时间戳(2024年4月29日11时) - `0001`:电压数据 - `200450000000000`:水位和雨量数据 ## 数据库结构 ### 水位数据表 (water) - `stationid`:站点ID - `datetime`:时间戳 - `waterstage`:水位值 - `waterflow`:水流量 - `recvdatetime`:接收时间 ### 雨量数据表 (rain) - `stationid`:站点ID - `datetime`:时间戳 - `periodrain`:时段雨量 - `differencerain`:差值雨量 - `totalrain`:累计雨量 - `dayrain`:日雨量 - `recvdatetime`:接收时间 ### 电压数据表 (voltage) - `stationid`:站点ID - `datetime`:时间戳 - `data`:电压值 - `recvdatetime`:接收时间 ## API接口 ### 数据查询接口 ```http GET /data?start_date=2024-04-29T00:00&end_date=2024-04-30T00:00 Authorization: Bearer ``` 返回格式: ```json { "water_data": [...], "rain_data": [...], "voltage_data": [...] } ``` ### 用户认证接口 - `POST /token`:用户登录 - `POST /users/`:用户注册 - `GET /users/me/`:获取当前用户信息 ## 功能特性 ### 数据接收 - 支持多端口同时监听(9000-9002) - 多线程处理客户端连接 - 自动解析RTU2018协议 - 异常处理和日志记录 ### 数据存储 - SQLite本地数据库 - 防重复数据插入 - 支持历史数据和实时数据 ### Web界面 - 响应式设计,支持移动端 - ECharts图表可视化 - 时间范围查询 - 数据表格展示 - CSV数据导出 ### 用户管理 - OAuth2认证 - 用户注册和登录 - 访问权限控制 ## 系统特点 - **实时性**:DTU设备实时发送数据,系统实时接收处理 - **可靠性**:多线程处理,完善的异常处理机制 - **可扩展性**:支持多个端口接收不同站点数据 - **安全性**:OAuth2认证保护数据访问 - **用户友好**:直观的Web界面,支持图表和表格展示 ## 开发和维护 ### 日志文件 系统运行日志保存在 `app.log` 文件中,包含: - 连接状态信息 - 数据接收记录 - 错误和异常信息 ### 数据库维护 - 定期备份 `hydrology.db` 文件 - 可使用 `db_delete.py` 清理历史数据 - 使用 `db_convert_f.py` 进行数据格式转换 ### 扩展开发 - 添加新的监测站点:复制并修改对应的接收和解析文件 - 修改数据协议:更新 `parse_rtu2018_data.py` 文件 - 自定义前端界面:修改 `templates/` 目录下的HTML文件 ## 故障排除 ### 常见问题 1. **端口被占用**:检查9000-9002端口是否被其他程序占用 2. **数据库连接失败**:确认 `hydrology.db` 文件权限 3. **DTU设备连接失败**:检查网络连接和防火墙设置 4. **Web页面无法访问**:确认8000端口是否正常启动 ### 调试方法 1. 查看日志文件 `app.log` 2. 检查数据库中是否有新数据 3. 使用网络工具测试端口连通性 ## 许可证 本项目仅供学习和研究使用。 ## 联系方式 如有问题或建议,请联系项目维护者。