跳至主要內容

自定义数据流

约 1454 字大约 5 分钟

自定义数据流

自定义数据流是对 ThingsCloud 标准通信协议的补充和扩展,用来支持更多类型的设备接入。

为什么需要自定义数据流

ThingsCloud 为设备接入提供了简单易用的 MQTT 接入协议,并在 MQTT 的基础上提供了一套完整的应用规范,包括限定的 MQTT 主题和消息格式。点此了解 MQTT 主题列表

这些内置的规范有助于设备端的开发过程变得更加简单。但是对于另一些情况,您可能需要使用自定义数据流。比如:

  • 由于项目开发的某些需求,需要使用自定义的 MQTT 主题,或者需要使用自定义的消息格式。
  • 硬件和云平台的通信需要使用二进制消息。例如:Modbus RTU 报文消息
  • 需要使用一些现成的设备,只支持 TCP 网络通信。例如:仅支持 TCP 连接的 DTU 设备。

这时,您可以为设备类型创建 自定义数据流,从而使该设备类型下的所有设备都支持该自定义数据流。

创建自定义数据流

进入 设备类型 > 设备类型详情 > 自定义数据流 > 创建自定义数据流,即可创建自定义数据流。

  • 数据流名称:支持中文。
  • 数据流标识符:用在自定义数据流的 MQTT 主题中,仅支持:英文大小写字母、数字、下划线、横线。
  • 数据格式:选择自定义数据流中传输的消息格式。

数据格式

选择正确的数据格式,用于云平台对自定义数据流传输的消息进行合法性验证。

消息格式可以随时修改,在设备重新连接云平台时生效。

支持以下数据格式:

Modbus RTU

设备和云平台之间传输的是 Modbus RTU 二进制消息,通常用在 DTU 连接云平台,将 Modbus 子设备(例如:传感器、执行器等)的报文直接透传到云平台。

例如:

01 03 0A 00 16 00 53 00 38 00 08 00 03 C1 D5 

HEX 16进制消息

通过 HEX 16进制的消息格式,来表示任意二进制报文。

提示

请注意,HEX 16进制消息只是二进制报文的明文表示方式,便于人们阅读和理解数据,实际传输的是二进制报文。

通常使用二进制报文的场景例如:

  • 设备现有通信协议仅支持二进制消息,例如一些工业设备。
  • 需要严格限制通信数据流量,用二进制消息尽可能减少消息长度。

JSON 格式消息

自定义的 JSON 消息格式,由设备端自行规定,云平台不对消息内容做任何合法性检查。

设备上报 JSON 类型的自定义数据后,可使用平台的消息规则,实现自定义解析,例如:

Plaintext 文本消息

自定义的 Plaintext 消息格式,由设备端自行规定,云平台不对消息内容做任何合法性检查。

Plaintext 消息格式通常是任意的 ASCII 文本格式,例如:

LBS=117.1390522_034.6651114

设备上报 Plaintext 消息后,可使用平台的消息规则,实现自定义解析,例如:

自定义数据流的 MQTT 主题

每个自定义数据流都拥有一组预定义好的 MQTT 主题(Topic),如下:

消息类型主题
发布消息data/<identifier>
订阅消息data/<identifier>/set

例如,我们创建了一个自定义数据流,数据流标识符为 stream,那么设备端通过 MQTT 发布消息的主题为:

data/stream

设备端用于实时接收云平台下发的消息,需要订阅的主题是:

data/stream/set

自定义数据流在云平台的处理

设备通过 自定义数据流 和云平台建立消息通信,云平台可以通过 规则 对自定义数据流进行各种处理,比如解析 Modbus RTU 消息并生成预设的属性值。云平台还可以通过 规则 将自定义数据流转发给第三方应用或接口。

例如:使用 Modbus RTU 数据格式的自定义数据流,设备向云平台上报了以下 HEX 消息对应的字节流:

01 03 0A 00 16 00 53 00 38 00 08 00 03 C1 D5 

通过在 规则 中启用 Modbus RTU 解析规则,云平台在收到以上消息后,会立即自动解析,生成以下设备属性:

{
  "temperature": 22,
  "humidity": 83,
  "hs_temperature": 56,
  "cs_temperature": 8,
  "device_status": 3
}

您也可以使用 Modbus 寄存器设置 功能更加快捷的解析 Modbus RTU 消息,这是更为推荐的方式。

绑定 TCP 数据流

自定义数据流除了本身具备 MQTT 主题,还可以开放 TCP 接入。设备的 TCP 接入方式实际上是复用了自定义数据流,当创建自定义数据流后,便可以将某个自定义数据流绑定为 TCP 数据流。

一个设备类型中,只能有一个自定义数据流可以绑定到 TCP 数据流。绑定后,设备类型下的所有设备便支持 TCP 接入,您可以在 设备详情页 > 连接 中,查看 TCP 接入点的主机名和端口。

提示

如果您还不了解 TCP 接入的验证方式,请查看 了解 TCP 接入