# Lab 实验数据采集系统 ## 项目概述 这是一个用于实验数据采集和监控的分布式系统,包含采集端、服务器端和Web监控界面。 ## 更新日志 ### 2025-01-17更新 0. 本次主要更新paper页面; 1. 接入了memarid.js, 后端分析报告添加了对流程图的输出,前端渲染流程图; 2. 更新了文献报告显示的样式。 ### 2025-01-16更新 1. 调整了项目页面和实验页面,项目页面增加了"reports"页面,可以查看项目分析报告,实验页面移除了左侧导航栏的下载数据和报告按钮;原有功能添加到实验详情页面 2. 将生成项目报告和实验报告的逻辑改为异步,不会阻碍其他路由 3. 给项目报告和实验报告添加了 AI Chat 功能 4. 将literature页面更名为paper ### 2025-01-15更新 0. 本次主要更新literature页面 1. 将左侧导航栏"Summary"改为查看总结报告页面,同时在Summary页面增加了"download"按钮和"regenerate"按钮,可以下载对所有文献的总结报告,也可以重新生成总结报告; 2. 左侧导航栏原"upload"按钮改为"literature list",显示文献列表; 3. 移除左侧导航栏"upload"按钮,改为在文献列表页面中增加"upload"按钮,上传文献; 4. 更新了页面设计; 5. 将生成总结报告的逻辑改为异步,不会阻碍其他路由; 6. 优化了文献分析页面的AI chat功能,对markdown格式的回答进行渲染,更容易阅读; 7. 在分析文献的逻辑中添加了长文档分析,长文档会分段分析再合并,最后生成报告。 ### 2025-01-14更新 1. 更新了设备管理逻辑,保证一个设备可以在多个用户之间切换,但一个设备只能被一名用户使用,以及删除设备逻辑,删除设备改为更新设备状态。 2. 优化了整个web的设计,包括设备注册页面,以及更新了左侧导航栏内容和各按钮样式 ### 2025-01-13更新 1. 将各页面独立出来,便于维护,同时优化了Web设计,导航栏增加了literature入口。 2. 在文献分析部分,修改了前后端代码,支持文献批量上传,将文献上传和文献分析完全解耦,上传文件后会立即得到响应,分析过程在后台进行,前端通过 Redis 中的状态来实时更新界面显示,并且添加了项目列表,可直接从导航栏进入查看各项目的文献分析,也可以从项目进入文献分析页面。 3. 文献分析部分,增加了AI chat功能,接入API,可以对已经生成分析报告的文献进行提问,并保存历史记录,可查看历史回答。 ### 2025-01-12更新 Initial commit ## 系统架构 ### 1. 采集端 (boot.py) - 基于MicroPython实现的高速数据采集器 - 支持多通道数据采集 - 使用UDP协议传输数据 - 支持设备序列号注册机制 ### 2. 服务器端 (data.py) - 基于Python asyncio的异步UDP服务器 - 支持数据解析和转发 - 与MongoDB集成存储实验数据 - 实现WebSocket实时数据推送 - 设备在线状态管理 ### 3. 设备管理 (device.py) - 设备注册和管理API - 序列号生成和验证 - 设备状态监控 - Redis集成用于在线状态追踪 ### 4. Web界面 - lab.html: 主界面 - device.html: 设备管理界面 - device-monitor.html: 单个设备数据监控界面 ## 主要功能 1. 高速数据采集 2. 实时数据传输和显示 3. 设备管理和监控 4. 实验数据存储 5. 在线状态追踪 ## 使用说明 ### 文件夹 1. history 保存了历史版本代码,可以忽略 2. lab 项目历史版本,可以忽略 ### 文件结构 lab/ ├── #后端 ├── boot.py # 采集端程序 ├── data.py # 数据处理服务器 ├── device.py # 设备管理API ├── main.py # 主程序 ├── #前端 ├── device.html # 设备管理 ├── device-monitor.html # 单个设备数据监控界面 ├── device-register.html # 设备注册 ├── paper.html # 文献分析 ├── reports.html # 报告管理 ├── lab.html # 前端主界面 └── login.html # 登录界面 | └── README.md # 项目说明 #### 主程序 main.py https://dev.obscura.work/lab 1. 服务器:222.186.10.253 2. PORT = 6000 3. 数据库: mongodb: 222.186.10.253:27017/lab Redis:222.186.10.253:6379; db199、201-208 #### 设备管理 device.py https://dev.obscura.work/devices 1. 服务器:222.186.10.253 2. PORT = 6001 3. 数据库: mongodb: 222.186.10.253:27017/lab Redis:222.186.10.253:6379; db200 #### 采集端配置 boot.py SSID = "Obscura" UDP_HOST = "222.186.10.253" UDP_PORT = 6002 #### 数据处理 data.py 1. 服务器:222.186.10.253 2. PORT = 6002 3. 数据库: mongodb: 222.186.10.253:27017/lab Redis:222.186.10.253:6379; db200; data type:stream #### 前端页面 https://beta.obscura.work/lab/ 1. lab.html: 主界面 2. device-register.html: 设备注册 3. device-monitor.html: 单个设备数据监控 4. device.html: 设备管理 5. paper.html: 文献分析 6. reports.html: 报告管理 7. login.html: 登录界面 #### Redis 数据库使用情况 1. DB 199: 实验状态数据 - 键格式: `experiment_status:{experiment_id}:{serial_number}` - 值类型: String - 存储内容: 实验设备的活动状态 ("active" 或 "inactive") 2. DB 200: 实验原始数据 - 键格式: `experiment:{experiment_id}:{serial_number}` - 值类型: Redis Stream - 存储内容: 设备采集的原始数据点 3. DB 201: 实验分析报告 - 键格式: `experiment_report:{experiment_id}` - 值类型: String (JSON) - 存储内容: 单个实验的分析报告 - 使用位置: 实验数据分析相关路由 4. DB 202: 项目分析报告 - 键格式: `project_report:{project_id}` - 值类型: String (JSON) - 存储内容: 整个项目的汇总分析报告 5. DB 203: 文献分析报告 - 键格式: `reference_report:{reference_id}` - 值类型: String (JSON) - 存储内容: 单个文献的分析报告 6. DB 204: 文献汇总报告 - 键格式: `reference_summary_report:{project_id}` - 值类型: String (JSON) - 存储内容: 项目所有文献的汇总分析报告 7. DB 205: 项目备忘录 - 键格式: `memo:{project_id}` - 值类型: String (JSON) - 存储内容: 项目的备忘录内容和创建时间 8. DB 206: 实验备忘录 - 键格式: `memo:{experiment_id}` - 值类型: String (JSON) - 存储内容: 实验的备忘录内容和创建时间 9. DB 207: 文献AI对话记录 - 键格式: `reference_chat:{reference_id}` - 值类型: String (JSON) - 存储内容: 单个文献的AI对话记录 10. DB 208: 存储文献AI对话的任务状态 - 键格式: `task:{task_id}` - 值类型: String (JSON) - 存储内容: 单个文献的AI对话的任务状态跟踪