第一次使用这个协议,服务器使用的 emqx ,具体流程是 [多个传感器->网关->emqx ] ,问题主要是出在了数据是网关把所有传感器数据一起发布,但是这个网关下又不能保证每个项目的传感器数量是一致的
目前的消息结构大概是这样:
{
"data": [
-0.06106870248913765,
5.2061066627502441
],
"time": "2024-05-22T06:47:24.391927"
}
只发送了传感器的数据,具体是哪个设备根据 0,1,2 去对应,但是可以预见的问题是这个数据设备端全靠手写配置去对应,万一手抖就对应不上了,也考虑过给每个传感器一个唯一的编号,但是问了硬件的小伙伴说拿不到一个唯一的值,如果要靠手动分发可能会有些复杂
绕了一圈后还是想着回到上面的消息结构,毕竟出厂后增减传感器的几率不大,但是现在出现了一个问题就是这个数据不好存,因为每个项目的传感器数量不一致,如果不分配一个传感器的唯一值,就不好把传感器的值单独放在一个表,如果放在一条里有没法确定要加几个传感器的键,如果把数据放在一起,又怕影响查询效率
希望有大佬可以指点一二,谢谢
1
ipoh 186 天前 1
| 网关 ID | 设备索引(0,1,2...) | Data |
如果是我会这样设计 |
2
IvanLi127 186 天前 1
看起来这情况只能把网关 id 加传感器索引作为传感器的 id 了,问题就变成网关去转还是 mqtt 之后的程序去转了。
|
5
wssy001 186 天前 1
时序数据库了解一下
|
6
Eiden 186 天前 3
硬件的偷懒吧, 传感器里有单片机吧, 有单片机就有唯一编号, 这种场景肯定传感器要编号的
|
7
KongLiu 186 天前 1
硬件怎么可能拿不到,最起码的 MAC 地址有吧,不过我们的做法是硬件第一次上传数据都是 000000 ,然后服务器这边看到是 000000 ,就会给他下发一个唯一编码
|
10
cnuser002 186 天前 1
传感器脱钩的话,那你就只能以网关+索引去关联了吧,你看配置文件在哪写吧。
至于数据库,时序数据没有特别要设计的吧, 时间戳 ,数字,然后就是索引啦。 |
12
opengps 186 天前 1
最好的存储结构是跟你数据使用方式有直接关系。
你这只列出了数据结构,目前最多可以知道怎么设计可以保证写入快。还没有读取场景来决策怎么兼顾读取快 |
13
sunjiayao 186 天前 1
硬件忽悠你,问下他环境。肯定能获取到 uid
|
14
cxsz 186 天前 1
我司也是类似的,有一个终端来收集各个传感器信息,统一 mqtt 发送到服务端
传感器大部分都是串口协议给终端的,解决方案是,把串口接入的线序,按顺序编号编好,然后硬件终端要维护个点表,按顺序获取数据,就能对应到具体的传感器了,给服务端的时候,不光要上送数据,点表也要同步上送 |
17
Curtion 186 天前 1
硬件设备一定有唯一值, 你问问传感器和网关是什么协议通信, 就算传感器没有上报自身唯一信息, 也可以从通信协议中找一个唯一值.
|
18
xylophone21 186 天前 1
> 毕竟出厂后增减传感器的几率不大
看起来像深坑 |
20
0xsui 185 天前 1
有这么一个国家标准《水文监测数据通信规约》,可以参考。
|
23
opengps 185 天前
@Lexgni 区分来自哪个设备:如果原始数据包不带,那就需要你自己增加识别,要么改造消息队列加入传感器自身 id (首推),要么根据实际配置能通过客户端来源 IP 识别(适用场景较少,不推荐这种)
|
24
jimrok 185 天前
不需要考虑这么紧凑的数据格式吧,数据错了造成的损失比网络开销要大很多。如果网关丢掉了设备的信息,还是让网关把格式改一下,增加传感器的 id 数据到后端。一般都是设备直接对接 mqtt 的 server ,mqtt 的协议里面应该有设备的 session 数据结构,应该是能将数据合并在一起的。
|