物聯網全流程開發記錄

問題

有數據采集設備,服務器,上位機用戶顯示三部分,采集設備將采集的數據發送至服務器。服務器將數據保存,上位機讀取服務器保存的數據庫顯示。當出現多設備,多用戶時,如何通過多設備對應多用戶,可能的情況有一臺設備一個用戶,一臺設備多個用戶,多臺設備一個用戶,多臺設備多個用戶 我在數據庫都如何配置和保存數據 上位機如何讀取和保存數據

方案

在多設備多用戶的系統中,數據庫設計和數據交互邏輯需要兼顧 靈活性、擴展性安全性,以支持以下四種核心場景:


一、數據庫設計(關系型數據庫,如 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
英文地址,請注明出處:http://en.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數據…

物聯網系統中-設備管理定義方法

物聯網系統中的設備管理是指對聯網物理設備進行全生命周期監控、配置、維護和優化的系統性過程。它涵蓋了從設備接入到退役的各個環節,是物聯網平臺的核心能力,確保設備安全、穩定、高效地運行并產生價值。 以下是設備管理的詳細定義與核心組成部分&…