物联网全流程开发记录

问题

有数据采集设备,服务器,上位机用户显示三部分,采集设备将采集的数据发送至服务器。服务器将数据保存,上位机读取服务器保存的数据库显示。当出现多设备,多用户时,如何通过多设备对应多用户,可能的情况有一台设备一个用户,一台设备多个用户,多台设备一个用户,多台设备多个用户 我在数据库都如何配置和保存数据 上位机如何读取和保存数据

方案

在多设备多用户的系统中,数据库设计和数据交互逻辑需要兼顾 灵活性、扩展性安全性,以支持以下四种核心场景:


一、数据库设计(关系型数据库,如 MySQL/PostgreSQL)

1. 核心表结构设计
-- 用户表(存储用户信息)
CREATE TABLE users (user_id INT PRIMARY KEY AUTO_INCREMENT,  -- 用户唯一IDusername VARCHAR(50) UNIQUE NOT NULL,    -- 用户名password_hash VARCHAR(255) NOT NULL,     -- 密码哈希(加密存储)role ENUM('admin', 'user') DEFAULT 'user'-- 角色(管理员/普通用户)
);-- 设备表(存储设备信息)
CREATE TABLE devices (device_id INT PRIMARY KEY AUTO_INCREMENT,-- 设备唯一IDdevice_name VARCHAR(100) NOT NULL,       -- 设备名称(如 "D1", "D2")ip_address VARCHAR(15) NOT NULL,         -- 设备IP地址description TEXT                         -- 设备描述
);-- 用户-设备关联表(多对多关系)
CREATE TABLE user_device (user_id INT NOT NULL,                    -- 外键:关联 users.user_iddevice_id INT NOT NULL,                  -- 外键:关联 devices.device_idaccess_level ENUM('read', 'write') DEFAULT 'read', -- 访问权限PRIMARY KEY (user_id, device_id),        -- 联合主键(唯一约束)FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE,FOREIGN KEY (device_id) REFERENCES devices(device_id) ON DELETE CASCADE
);-- 数据表(存储设备采集的数据)
CREATE TABLE sensor_data (data_id BIGINT PRIMARY KEY AUTO_INCREMENT,-- 数据唯一IDdevice_id INT NOT NULL,                  -- 外键:关联 devices.device_idtimestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- 采集时间temperature DECIMAL(5,2),                -- 示例字段:温度humidity DECIMAL(5,2),                   -- 示例字段:湿度voltage DECIMAL(5,2),                    -- 示例字段:电压FOREIGN KEY (device_id) REFERENCES devices(device_id) ON DELETE CASCADE
);
2. 表结构说明
表名功能说明
users存储用户信息,包括身份认证和角色
devices存储设备元数据(名称、IP等)
user_device管理用户与设备的多对多关系及权限
sensor_data存储设备采集的传感器数据
3. 支持的场景
场景数据库配置方式
一台设备一个用户user_device 中为一个 user_id 和一个 device_id 配置权限
一台设备多个用户user_device 中为多个 user_id 关联同一个 device_id
多台设备一个用户user_device 中为一个 user_id 关联多个 device_id
多台设备多个用户user_device 中交叉关联多个 user_id 和多个 device_id

二、数据采集与存储流程

1. 设备端逻辑
  • 数据发送:设备通过 TCP/HTTP/WebSocket 协议将数据发送到服务器。
  • 数据格式(示例 JSON):
    {"device_id": 1,"timestamp": "2025-04-05T14:30:00Z","temperature": 25.5,"humidity": 60.0,"voltage": 3.7
    }
    
2. 服务器端逻辑
  • 接收数据:服务器监听端口,接收设备发送的 JSON 数据。
  • 数据验证:检查 device_id 是否存在,数据格式是否合法。
  • 数据存储:将数据插入 sensor_data 表。
    INSERT INTO sensor_data (device_id, timestamp, temperature, humidity, voltage)
    VALUES (1, '2025-04-05 14:30:00', 25.5, 60.0, 3.7);
    

三、上位机(用户端)数据读取与显示

1. 用户认证与权限控制
  • 登录流程
    1. 用户输入用户名和密码。
    2. 服务器验证密码哈希,生成 JWT Token(含用户 ID 和角色)。
    3. 后续请求携带 Token 进行身份验证。
2. 数据查询逻辑
  • 根据用户权限动态筛选数据

    -- 查询用户有权限访问的所有设备的最新数据
    SELECT d.device_id, d.device_name, sd.temperature, sd.humidity, sd.timestamp
    FROM user_device ud
    JOIN devices d ON ud.device_id = d.device_id
    JOIN sensor_data sd ON d.device_id = sd.device_id
    WHERE ud.user_id = 1001
    ORDER BY sd.timestamp DESC;
    
  • 分页与过滤

    -- 按时间范围和设备ID筛选数据
    SELECT * FROM sensor_data
    WHERE device_id = 1AND timestamp BETWEEN '2025-04-05 00:00:00' AND '2025-04-05 23:59:59'
    LIMIT 100 OFFSET 0;
    
3. 数据展示
  • 前端界面(如 Web 或桌面应用):
    1. 根据用户权限动态加载设备列表。
    2. 使用图表库(如 ECharts/D3.js)绘制实时数据。
    3. 支持导出 CSV/Excel。

四、权限管理与安全性

1. 数据访问控制
  • 行级权限:在查询时通过 user_device 表限制用户只能访问授权设备的数据。
  • 字段级权限:通过视图(View)限制用户只能查看特定字段(如仅读取 temperature,隐藏 voltage)。
2. 数据安全
  • 传输加密:使用 HTTPS/TLS 加密通信。
  • 存储加密:敏感字段(如密码)使用 AES 加密存储。
  • 审计日志:记录用户操作(如查询、导出数据)。

五、性能优化建议

1. 数据库优化
  • 索引:为 sensor_data.device_idsensor_data.timestamp 添加复合索引。
  • 分表:按时间或设备ID分表(如 sensor_data_202504)。
  • 缓存:使用 Redis 缓存高频访问的设备数据。
2. 服务器优化
  • 异步写入:使用消息队列(如 Kafka/RabbitMQ)缓冲设备数据,再异步写入数据库。
  • 负载均衡:多服务器集群部署,通过 Nginx 负载均衡。
3. 上位机优化
  • 分页加载:避免一次性加载大量数据,采用懒加载。
  • WebSocket 实时推送:设备数据更新后,服务器主动推送给上位机。

六、总结

功能模块关键点
数据库设计通过 user_device 表实现多对多关系,灵活支持各种场景
数据采集设备发送 JSON 数据,服务器验证后存储到 sensor_data
权限控制通过 user_device 限制用户访问的设备和字段
上位机查询动态生成 SQL 查询,结合分页和过滤条件
性能优化索引、分表、缓存、异步写入、WebSocket 推送

如需进一步了解 如何实现设备数据的实时同步如何设计权限的动态配置界面,或 如何使用时序数据库(如 InfluxDB)优化存储,请继续提问!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90073.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode 热题 100】46. 全排列——回溯

Problem: 46. 全排列 文章目录整体思路完整代码时空复杂度时间复杂度:O(N * N!)空间复杂度:O(N)整体思路 这段代码旨在解决一个经典的组合数学问题:全排列 (Permutations)。给定一个不含重复数字的数组 nums,它需要找出其所有可能…

AXI接口学习

amba总线的发展axi协议是两个接口之间的点对点的协议,主要是有5个通道。主机在写地址(AW)通道上发送地址,并在写数据(W)通道上将数据传输到从机。从机将接收到的数据写入指定地址空间。从机完成写操作&…

Validation - Spring Boot项目中参数检验的利器

Validation - Spring Boot项目中参数检验的利器 什么是Validation Sping Boot官方原文:When it comes to validating user input, Spring Boot provides strong support for this common, yet critical, task straight out of the box.Although Spring Boot support…

云服务器VS虚拟主机:如何抉择?

开篇引入在当今数字化浪潮中,无论是个人站长想要搭建独具风格的博客,展示自己的生活感悟与专业见解;还是中小企业期望构建官方网站,拓展线上业务版图,提升品牌知名度;亦或是大型互联网企业筹备高并发的电商…

不同相机CMOS噪点对荧光计算的影响

摘要:荧光成像是生物医学、材料科学等领域的重要研究手段,其成像质量高度依赖传感器噪声特性。本文系统分析CMOS传感器噪声类型及其对荧光信号计算的影响机制,结合实验数据探讨不同CMOS架构的噪声表现差异,提出针对性优化策略。研…

docker 常见命令使用记录

1. swarm 集群 1. 集群创建 # 创建集群管理节点, --advertise-addr 指定节点管理通信地址,--data-path-addr 指定容器通信地址 docker swarm init --advertise-addr 1.14.138.35 --data-path-addr 1.14.138.35# --advertise-addr 指明当前work节点的…

KRaft 角色状态设计模式:从状态理解 Raft

这些状态类是 Raft 协议行为的核心载体。它们包含转移逻辑 和 节点在特定状态下的所有行为和数据。QuorumState它是 KRaft 客户端实现中状态管理的核心,扮演着“状态机上下文(Context)”和“状态转换协调者”的关键角色。QuorumState 是整个 …

Linux的磁盘存储管理实操——(上)

一、Linux的设备文件分类 Linux的设备文件分类1、在Linux系统中设备文件是用来与外接交互的接口,它将内核中的硬件设备与文件系统关联起来,让用户可以像操作普通文件一样来操作硬件设备,同时也为开发者提供了方便而强大的应用程序接口。 2、L…

内核bpf的实现原理

bpftrace能帮我们干什么?1、统计 tcp连接的生命时长、2、统计mysql执行一条sql语句的时间3、统计redis执行命令的时间、 4、对文件进行一次读或者写的时间。 常用命令: bpftrace -e Begin { printf("hello\n"); } bpftrace -l *enter_accep…

前端npm配置Nexus为基础仓库

步骤: 一、Nexus仓库配置 新增npm仓库,具体详解见 Nexus私有仓库配置,解释 注:Nexus的版本需要至少3.38以上,不然会出现npm install 时npm的审计功能报错,导致install失败。虽然在3.38以后不会报400错误&#xff0c…

数据结构 之 【排序】(直接插入排序、希尔排序)

目录 1.直接插入排序 1.1直接插入排序的思想 1.2直接插入排序的代码逻辑: 1.3 直接插入排序图解 1.4单趟排序代码(单个元素的排序逻辑) 1.5完整排序代码 1.6直接插入排序的时间复杂度与空间复杂度 1.7直接插入排序的优势 2.希尔排序(缩小增量排序) 2.1…

Laravel 后台登录 403 Forbidden 错误深度解决方案-优雅草卓伊凡|泡泡龙

Laravel 后台登录 403 Forbidden 错误深度解决方案-优雅草卓伊凡|泡泡龙一顿操作猛如虎,一看结果250,必须记录,必须记录,!今天弄了很久关于我们2023年的产品系统蜻蜓T会议系统专业版,然后终于搞好了密码也重…

Newline全场景方案闪耀2025中国智慧生活大会

7月15日 — 16日,由中国电子视像行业协会等权威机构指导的2025 CIC中国智慧生活大会在京召开。Newline作为视像协会PID分会副会长单位携全场景智慧办公解决方案亮相,首席营销官李宇鹏受邀出席领袖圆桌环节,与腾讯云、京东方、创维、TCL、小猿…

Edge浏览器地址栏默认搜索引擎设置指南

前言 Microsoft Edge 浏览器允许用户自定义地址栏默认搜索引擎,只是设置入口隐藏比较深,以版本 137.0.3296.83 (正式版本) (64 位)为例详细记录设置地址栏默认搜索引擎步骤: Edge 设置默认搜索引擎步骤 通过设置界面修改 打开Edge设置&#x…

Python eval函数详解 - 用法、风险与安全替代方案

Python eval函数详解 - 用法、风险与安全替代方案在Python中,eval() 是一个内置函数,用于解析并执行传入的字符串形式的表达式。它能够将字符串动态地转换为有效的Python代码并运行。虽然 eval() 功能强大,但其使用也伴随着潜在的安全风险。本…

Webpack5 新特性与详细配置指南

一、Webpack5 新特性 内置 Asset Modules(资源模块) 替代 file-loader、url-loader、raw-loader 等,统一资源处理方式。四种类型:asset/resource:导出文件 URL(等同 file-loader)。asset/inli…

笼子在寻找一只鸟:解读生活的隐形陷阱

想象一个闪闪发光的笼子,敞开着门,在世界中游荡,寻找一只鸟儿。这画面是不是有点奇怪?这是卡夫卡的格言“一个笼子在寻找一只鸟”带给我们的奇思妙想。通常,鸟儿自由翱翔,笼子静静等待,但卡夫卡…

低空经济展 | 约克科技携小型化测试设备亮相2025深圳eVTOL展

全球低空经济与eVTOL产业盛会——2025深圳eVTOL展,将于2025年9月23日至25日在深圳坪山燕子湖国际会展中心盛大启幕! 本届展会以“低空经济eVTOL航空应急救援商载大型无人运输机”为核心,预计汇聚200位发言嘉宾、500家顶尖展商及15,000位专业观…

数学专业转行做大数据容易吗?需要补什么?

高考志愿选择数学专业是一个面向未来的决定。数学作为基础学科,其严谨的逻辑训练和抽象思维能力培养,为后续专业发展提供了广泛的可能性。在数字化时代背景下,数学专业毕业生在数据科学、人工智能等领域的竞争优势明显。大学期间推荐考CDA数据…

物联网系统中-设备管理定义方法

物联网系统中的设备管理是指对联网物理设备进行全生命周期监控、配置、维护和优化的系统性过程。它涵盖了从设备接入到退役的各个环节,是物联网平台的核心能力,确保设备安全、稳定、高效地运行并产生价值。 以下是设备管理的详细定义与核心组成部分&…