rain_monitor/todo.md
2025-07-12 17:41:49 +08:00

4.6 KiB
Raw Blame History

雨量监测系统开发计划

系统概述

开发一个监测系统通过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表存储设备信息
      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表存储设备数据
      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