首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储各种传感器类型的传感器数据

存储各种传感器类型的传感器数据
EN

Stack Overflow用户
提问于 2017-10-24 20:36:12
回答 1查看 2.7K关注 0票数 2

我有一个问题:当传感器的类型不同时,如何最好地存储产生的传感器数据。

一点背景:

我有两个不同的感觉单位。

一个单元(比如A单元)内置了感应器(温度、湿度等),并以固定的顺序产生一个CSV字符串12,其中所有的12个值对我都有用。

另一个单元(单元B类型)是一个单元,您可以插入探针和能量监控夹等,在所有情况下,它都会产生一个CSV字符串13,但是如果您只有两个连接的东西,那么您只能从13个CSV值中的两个得到有用的信息。我们有两种不同的配置单位,我们将使用。

所有的传感器都有一个ID (在CSV字符串中给出),我将通过web (ASP.NET)将传感器按ID链接到数据库(SQL 2016)中的一个房间。

我将进行的查询类型是“a室目前的温度是多少”,我还需要查询诸如“给我所有平均湿度较高的房间”之类的趋势。

我的问题

考虑到目前我将有大约250个传感器,每隔10秒左右通过一个web API发布,我目前有两种不同类型的CSV字符串(将来可能会更多),在一种情况下,CSV字符串将在CSV字符串的不同部分中包含有用的信息,您会推荐什么样的合适的表结构来支持这一点?理想的情况是在SQL server中(可能是2016年对JSON的支持?)因为Server是我更熟悉的东西,但是如果这是一个错误的选择,当然,我对您的想法持开放态度。

我试图避免一个表‘每种传感器类型’,因为这似乎是混乱的,这也会增加增加不同的传感器类型在未来没有新的表格等。

我确实考虑过让我的API独立到我的web应用程序,把我的传感器放到它上,让API存储CSV 'as‘is’is‘,以及一个“传感器类型”ID。然后我想我可以用一个存储过程将它分批处理(某种服务),然后将它插入到我的主数据库中,因为我认为这样会减少API的开销。

数据库结构

一幢楼有许多房间,一个房间有许多感应器。传感器有一种类型。我将在映射表中记录房间和传感器in之间的映射。

传感器类型解释

A型传感器具有以下信息:

  1. 日期(字符串)
  2. 时间(串)
  3. SensorID (字符串)
  4. 温度(十进制)
  5. 湿度(十进制)
  6. PIR计数(int)

传感器B有两种不同的配置,在这两种情况下都会张贴相同的CSV字符串,不同的值将在其中使用,但我想存储:

配置1(管道温度)

  1. DateTime (unix时间戳)
  2. SensorID
  3. 管道温度1(十进制)
  4. 管道温度2(十进制)

配置2(电力监控)

  1. DateTime (unix时间戳)
  2. SensorID (字符串)
  3. 幂1(十进制)
  4. 幂2(十进制)
  5. 幂3(十进制)
  6. 幂4(小数)

所有传感器都有相同的共同数据:

  1. DateTime
  2. SensorID

我想一种解决方案是让一个房间有多个“传感器类型A”和许多传感器类型b的配置1,而许多传感器类型b在配置2中,每种传感器类型都有自己的数据表,但是我认为最好能在传感器表中为所有传感器提供一个表,并从一个类型表中给它们一个类型,因为如果/当添加更多的传感器时,这将更加灵活。这种方法的缺点是我如何链接到这些不同的传感器数据类型/形状。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-24 22:40:09

您的基本选项是discussed in this question,但是使用这个示例很有趣。

好吧,让我们一步一步地走。

一幢建筑物有许多房间

所以,我们知道我们有两张桌子:

代码语言:javascript
复制
Building

代码语言:javascript
复制
Room 
  --fk to Building

房间里有很多感应器。

代码语言:javascript
复制
Sensor
  --fk to Room

(或者,如果传感器可能监视多个房间的事件)

代码语言:javascript
复制
Sensor

Room_Sensor
  --fk to Room
  --fk to Sensor

传感器有一种类型。

代码语言:javascript
复制
Sensor
  --type id of some sort (manufacturer?)

A型传感器具有以下信息:

..。这就是它变得有趣的地方。因为,虽然Type A生成此信息,但这不是Type A的状态,而是room的状态。

这是很重要的部分:数据库是状态的存储库(这里有一系列的状态,假设我们有时间戳)。

还有一个额外的问题--如果传感器被移动,或者房间被细分(添加“两个或更多以前没有的房间”),会发生什么?所以让我们回溯一下:

代码语言:javascript
复制
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)关系的副本,随着时间的推移而改变(也许一个传感器在走廊上移动了一个星期或什么的)。

那么,测量的数据呢?实际上,这里有几种不同的“东西”:

代码语言:javascript
复制
Environment
  --fk to Room_Sensor
  --occurredAt timestamp
  --temperatureInCelsius
  --humidityInBar (or whatever other unit)
  --PIR (particulate?  please label your units)

(我假设Type B的索引项表示对不同事物的相同度量,这应该是多个行,这意味着要为外键添加一个表。如果它们是对同一事物的不同测量--流入温度和流出温度,比方说--它更简单)

代码语言:javascript
复制
Pipe

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

代码语言:javascript
复制
Electrical_Drop

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

...yeah,这大概就是我要说的。有了这种结构,传感器的实际物理类型就无关紧要了--我们只关心它提供给我们的信息类型。将来,Type B可能增加了测量室温的新功能;如果是的话,数据库可能保持不变,行可以添加到现有的表中。

请注意,这样做需要您有一个API或加载某种类型的程序,但您很可能需要其中之一,不管如何。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46919569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档