144 lines
4.6 KiB
Markdown
144 lines
4.6 KiB
Markdown
# 雨量监测系统开发计划
|
||
|
||
## 系统概述
|
||
开发一个监测系统,通过ModBus-RTU协议与两种设备通信,收集并展示气象和雨量数据。
|
||
新增PWS01设备通过HTTP GET请求获取数据,提供更全面的气象要素。
|
||
|
||
## 系统架构
|
||
- Web界面:监听10003端口
|
||
- TCP服务器:监听10004端口,与设备通信
|
||
- 两种客户端设备:地址码01(气象站)和02(雨量计)
|
||
- PWS01设备:通过HTTP GET请求通信
|
||
|
||
## 开发任务
|
||
|
||
### 1. 数据采集模块
|
||
- [ ] 实现TCP服务器,监听10004端口
|
||
- [ ] 实现ModBus-RTU协议解析
|
||
- [ ] 设备01(气象站)数据采集,15分钟一次
|
||
- 发送指令:`010301f400100408`
|
||
- 解析返回数据(风速、风向、温湿度等)
|
||
- [ ] 设备02(雨量计)数据采集
|
||
- 发送指令:`02030000000ac5fe`
|
||
- 解析返回数据(当天降雨量、瞬时降雨量等)
|
||
- [ ] 实现数据转换(根据设备寄存器定义)
|
||
- [ ] 新增PWS01设备HTTP GET请求数据采集
|
||
- 创建专门的包处理HTTP GET请求
|
||
- 解析JSON响应数据
|
||
|
||
### 2. 数据存储模块
|
||
- [ ] 设计MySQL数据库表结构
|
||
- 设备01数据表
|
||
- 设备02数据表
|
||
- [ ] 实现数据持久化存储
|
||
- [ ] 实现数据查询接口
|
||
- [ ] 新增PWS01设备表结构
|
||
- 设备信息表:存储设备基本信息,以设备ID为主键
|
||
- 设备数据表:存储设备采集的气象数据,以设备ID为外键
|
||
|
||
### 3. Web服务器模块
|
||
- [ ] 实现Web服务器,监听10003端口
|
||
- [ ] 设计API接口
|
||
- 获取最新数据
|
||
- 查询历史数据(支持时间范围)
|
||
- 数据聚合(按小时、天等)
|
||
- 触发设备查询
|
||
- [ ] 新增PWS01设备API接口
|
||
- 获取PWS01设备信息
|
||
- 获取PWS01最新数据
|
||
- 查询PWS01历史数据
|
||
|
||
### 4. 前端界面
|
||
- [ ] 参考提供的HTML风格,实现Web界面
|
||
- [ ] 实现数据可视化(图表展示)
|
||
- [ ] 实现数据表格展示
|
||
- [ ] 实现数据导出功能
|
||
- [ ] 实现设备连接状态显示
|
||
- [ ] 新增PWS01设备专属页面
|
||
- 显示设备信息
|
||
- 展示全部气象要素数据
|
||
- 数据可视化
|
||
|
||
### 5. PWS01设备集成
|
||
- [ ] 新增查询方法
|
||
- 实现HTTP GET请求获取设备数据
|
||
- 解析JSON响应
|
||
- [ ] 新增定时采集任务
|
||
- 默认15分钟查询一次
|
||
- 可配置查询间隔
|
||
- [ ] 新增数据结构
|
||
- PWS01设备信息结构
|
||
- PWS01设备数据结构
|
||
- [ ] 新增数据库表
|
||
- pws01_devices表:存储设备信息
|
||
```sql
|
||
CREATE TABLE IF NOT EXISTS pws01_devices (
|
||
id VARCHAR(50) PRIMARY KEY,
|
||
active_time BIGINT NOT NULL,
|
||
bind_space_id VARCHAR(50) NOT NULL,
|
||
category VARCHAR(20) NOT NULL,
|
||
create_time BIGINT NOT NULL,
|
||
custom_name VARCHAR(100),
|
||
icon VARCHAR(255),
|
||
ip VARCHAR(50) NOT NULL,
|
||
is_online BOOLEAN NOT NULL,
|
||
lat VARCHAR(20),
|
||
local_key VARCHAR(50),
|
||
lon VARCHAR(20),
|
||
model VARCHAR(50) NOT NULL,
|
||
name VARCHAR(100) NOT NULL,
|
||
product_id VARCHAR(50) NOT NULL,
|
||
product_name VARCHAR(100) NOT NULL,
|
||
sub BOOLEAN NOT NULL,
|
||
time_zone VARCHAR(10) NOT NULL,
|
||
update_time BIGINT NOT NULL,
|
||
uuid VARCHAR(50) NOT NULL,
|
||
last_query_time DATETIME,
|
||
INDEX idx_ip (ip),
|
||
INDEX idx_product_id (product_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
```
|
||
- pws01_data表:存储设备数据
|
||
```sql
|
||
CREATE TABLE IF NOT EXISTS pws01_data (
|
||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||
device_id VARCHAR(50) NOT NULL,
|
||
timestamp DATETIME NOT NULL,
|
||
temp_current INT,
|
||
humidity_value INT,
|
||
battery_percentage INT,
|
||
temp_unit_convert VARCHAR(10),
|
||
windspeed_unit_convert VARCHAR(10),
|
||
pressure_unit_convert VARCHAR(10),
|
||
rain_unit_convert VARCHAR(10),
|
||
bright_unit_convert VARCHAR(10),
|
||
temp_current_external INT,
|
||
humidity_outdoor INT,
|
||
temp_current_external_1 INT,
|
||
humidity_outdoor_1 INT,
|
||
temp_current_external_2 INT,
|
||
humidity_outdoor_2 INT,
|
||
temp_current_external_3 INT,
|
||
humidity_outdoor_3 INT,
|
||
atmospheric_pressture INT,
|
||
pressure_drop INT,
|
||
windspeed_avg INT,
|
||
windspeed_gust INT,
|
||
rain_1h INT,
|
||
rain_24h INT,
|
||
rain_rate INT,
|
||
uv_index INT,
|
||
dew_point_temp INT,
|
||
feellike_temp INT,
|
||
heat_index INT,
|
||
windchill_index INT,
|
||
INDEX idx_device_id (device_id),
|
||
INDEX idx_timestamp (timestamp),
|
||
FOREIGN KEY (device_id) REFERENCES pws01_devices(id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||
```
|
||
|
||
## 技术栈
|
||
- 后端:Go语言
|
||
- 数据库:MySQL
|
||
- 前端:HTML, CSS, JavaScript, Chart.js |