簡體   English   中英

存儲各種傳感器類型的傳感器數據

[英]Storing sensor data for various sensor types

我有一個關於如何最好地存儲傳感器類型不同時產生的傳感器數據的問題。

一點背景:

我有兩個不同的傳感單元。

一個單元(假設單元類型 A)內置傳感器(溫度、濕度等)並以固定順序生成長度為 12 的 CSV 字符串,其中所有 12 個值對我都有用。

另一個單元(單元類型 B)是一個可以插入探頭和能量監測夾等的單元,在所有情況下它都會產生一個長度為 13 的 CSV 字符串,但是如果你只連接了兩個東西,你只能從13 個 CSV 值中的兩個。 我們將使用該單元的兩種不同配置。

所有傳感器都有一個 ID(在 CSV 字符串中給出),我將通過 Web UI (ASP.NET) 將傳感器按 ID 鏈接到數據庫 (SQL 2016) 中已有的房間。

我將要做的查詢類型是“房間 a 的當前溫度是多少”,我還需要查詢趨勢,例如“給我所有具有高濕度平均值的房間”。

我的問題

考慮到我目前將有大約 250 個傳感器,每個傳感器大約每 10 秒左右通過 Web API 發布一次,並且我目前有兩種不同類型的 CSV 字符串(將來可能會更多),在一種情況下是 CSV 字符串將在 CSV 字符串的不同部分包含有用信息而不是另一個,您會推薦什么作為合適的表結構來支持這一點? 理想情況下在 SQL Server 中(也許 2016 年支持 JSON?),因為 SQL Server 是我更熟悉的東西,但是如果這是一個糟糕的選擇,我當然願意接受你的想法。

我試圖避免使用“每個傳感器類型”的表格,因為這看起來很混亂,如果沒有新表格等,將來添加不同的傳感器類型也會變得更加困難。

我確實考慮過將我的 API 與我的 Web 應用程序分開,將我的傳感器發布到它,並讓 API 將 CSV“按原樣”存儲到數據庫中,以及“傳感器類型”ID。 我想然后我可以使用存儲過程批量后處理它(某種服務)以批量插入我的主數據庫,因為我認為這可能會減少一些 API 開銷。

數據庫結構

一座建築有很多房間,一個房間有很多傳感器。 傳感器有一個類型。 我將在映射表中保留房間和傳感器 ID 之間映射的標簽。

傳感器類型說明

傳感器類型 A 具有以下信息:

  1. 日期(字符串)
  2. 時間(字符串)
  3. 傳感器 ID(字符串)
  4. 溫度(十進制)
  5. 濕度(十進制)
  6. PIR 計數(整數)

傳感器 B 有兩種不同的配置,在這兩種情況下都發布了相同的 CSV 字符串,不同的是其中使用的值,但我想存儲:

配置 1(管道溫度)

  1. 日期時間(Unix 時間戳)
  2. 傳感器ID
  3. 管道溫度 1(十進制)
  4. 管道溫度 2(十進制)

配置 2(電源監控)

  1. 日期時間(Unix 時間戳)
  2. 傳感器 ID(字符串)
  3. 冪 1(十進制)
  4. 冪 2(十進制)
  5. 冪 3(十進制)
  6. 冪 4(十進制)

所有傳感器都具有相同的公共數據:

  1. 約會時間
  2. 傳感器ID

我想一個解決方案是讓一個房間在配置 1 中有許多“傳感器類型 A”和許多傳感器類型 b,在配置 2 中有許多傳感器類型 b,每個傳感器類型都有自己的數據表,但是我認為它會如果我可以在一個傳感器表中為所有傳感器設置一個表,並從類型表中給它們一個類型,那就太好了,因為如果/當添加更多傳感器時,這會更靈活。 這種方法的缺點是我什么時候鏈接到這些不同的傳感器數據類型/形狀

謝謝

這個問題討論了您的基本選項,但對示例進行操作很有趣。

好的,讓我們一點一點地進行。

一棟樓有很多房間

所以馬上,我們知道我們有兩個表:

Building

Room 
  --fk to Building

一個房間有很多傳感器。

Sensor
  --fk to Room

(或者,如果傳感器可以監控來自多個房間的事件)

Sensor

Room_Sensor
  --fk to Room
  --fk to Sensor

傳感器有一個類型。

Sensor
  --type id of some sort (manufacturer?)

傳感器類型 A 具有以下信息:

......這就是它變得有趣的地方。 因為,雖然Type A確實生成了此信息,但這不是Type A狀態 這是一個room的狀態。

這就是其中的重要部分:數據庫是狀態的存儲庫(這里是一系列狀態,假設我們有時間戳)。

還有一個額外的問題——如果傳感器被移動,或者房間被細分(“添加”兩個或更多以前不存在的房間)會發生什么? 所以讓我們回溯一點:

Room
  --fk to building

Sensor
  --type id of some sort, manufacturer info?

Room_Sensor
  --pk
  --fk to room
  --fk to sensor
  --createdAt timestamp

請注意, Room_Sensor可能有多個相同(Room, Sensor)關系的副本,隨着時間的推移而變化(可能傳感器在走廊上移動了一周或某事)。

現在,測量數據呢? 您實際上在這里有幾種不同的“事物”:

Environment
  --fk to Room_Sensor
  --occurredAt timestamp
  --temperatureInCelsius
  --humidityInBar (or whatever other unit)
  --PIR (particulate?  please label your units)

(我假設Type B的索引項表示不同事物的相同度量,它們應該是多行,這意味着一個額外的表用於外鍵。如果它們是相同的不同度量事情 - 流入和流出溫度,比如說 - 它更簡單)

Pipe

Pipe_Temperature
  --fk to pipe
  --fk to Room_Sensor
  --occurredAt timestamp
  --temperatureInCelsius

Electrical_Drop

Electrical_Drop_Draw
  --fk to Electrical_Drop
  --fk to Room_Sensor
  --occurredAt timestamp
  --consumptionInWatts

...是的,這可能是我的開始。 對於這種結構,傳感器的實際物理類型是無關緊要的——我們只關心它提供給我們的信息類型。 也許將來Type B增加測量室溫的新功能; 如果是這樣,數據庫可能會保持不變,並且可以將行添加到現有表中。

請注意,這樣做需要您擁有某種 API 或加載程序,但無論如何您很可能需要其中之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM