设备通过 DTU 接入
设备通过 DTU 接入
DTU 是 Data Transfer Unit 的简称,也就是数据传输单元。事实上 DTU 就是一种典型的网关产品,它的特点在于面向用户的快速配置能力,部分 DTU 还支持可编程。DTU 将应用到更多的物联网场景中,成为一种开箱即用的硬件网关。
设备通过 DTU 接入 ThingsCloud 时,并不需要编程知识,更多是基于配置界面来设置云平台接入参数,以及和子设备的通信参数。
ThingsCloud 广泛与 DTU 厂商合作,适配各类 DTU 产品,为物联网应用开发带来快速接入体验。
DTU 可以连接哪些物联网设备?
DTU 支持多种方式来连接物联网设备,例如:
- RS485/RS232
- LoRA
- 蓝牙
- Zigbee
- 433M
- CAN
- BACnet
- UART
- GPIO
通过这些连接方式,DTU 可以连接包括传感器、执行器、控制器、PLC 等子设备。
DTU 的连网方式支持哪些?
DTU 接入云平台的连网方式通常支持:
- 2G/3G/4G/5G
- WiFi
- NB-IoT
- 以太网
DTU 产品接入示例
ThingsCloud 支持任何厂商 DTU 产品的接入,以下是一些接入示例,您可在应用场景中参考使用。
- ThingsEdge 4G DTU 接入 ThingsCloud
- 塔石 4G DTU MQTT 接入
- 有人 4G DTU TCP 接入
- 合宙 iRTU MQTT 接入 ThingsCloud
- 银尔达 DTU MQTT 接入 ThingsCloud
- 【Modbus 设备 + DTU TCP 透传接入】从配置 DTU 到生成 App 🎦
- 【Modbus 设备 + DTU TCP 透传接入】Modbus 云网关实现从机变独立设备 🎦
- 【Modbus 设备 + DTU TCP 透传接入】为子设备生成 App 界面 🎦
ThingsCloud 支持 DTU 的接入协议有哪些?
- MQTT
- TCP
下边我们分别介绍这两种接入协议的操作步骤。
DTU MQTT 方式接入云平台
对于支持 MQTT 的 DTU 产品,只需要简单几步就可以接入 ThingsCloud。
提示
如果您还不了解云平台的 MQTT 接入协议,可以点击 设备 MQTT 接入 详细了解。
创建项目和设备
首先,在云平台创建项目,点此进入控制台。在创建项目时,选择适合您的公有区。
接着,进入项目中,为 DTU 创建相应的设备,只需要为设备起一个名字即可。
创建设备类型(可选)
如果 DTU 在 MQTT 通信中使用 JSON
格式并支持 ThingsCloud 的 属性上报协议,那么这里可以不必创建设备类型。
如果 DTU 使用 MQTT 透传方式,直接转发 Modbus 从站设备的二进制消息到云平台,则需要使用 ThingsCloud 的 MQTT 自定义数据流,必须先创建设备类型,才能创建自定义数据流。
这里以二进制消息透传为例,我们创建一个设备类型,填写以下信息:
- 创建方式:选择 创建自定义类型
- 类型名称:起个名字,例如:我的DTU
- 设备接入类型:直连设备
- 设备通信方式:选择 DTU 的联网方式,例如:4G 或 WiFi
- 设备接入协议:选择 Modbus RTU 透传
- 创建默认自定义数据流:开启
- 自定义数据流消息格式:选择 Modbus RTU
- 是否支持 TCP 接入:不开启
完成创建,我们进入刚创建的 设备类型详情页 > 自定义数据流,可以看到已经默认创建了一个标识符为 stream
的自定义数据流。
接着我们将刚才创建的设备,加入这个设备类型,便可以为设备开通刚刚创建的自定义数据流,也就是设备可以使用自定义数据流的 MQTT 主题来收发消息。
提示
关于 自定义数据流 的详细介绍,请浏览 自定义数据流。
获得设备 MQTT 连接参数
进入创建好的设备详情页,在【连接】页面中,找到用于 MQTT 连接的一些重要信息,包括:
- 设备的普通证书,包括
ProjectKey
和AccessToken
,用于配置 DTU 连接云平台的身份认证部分。 - MQTT 接入点主机名和端口,例如:
mqtt://mqtt.iot-api.com:1883
,那么其中mqtt.iot-api.com
是 MQTT 接入点主机名,1883
是端口。请以您的设备详情页的实际信息为准。
配置 DTU 连接云平台
不同的 DTU 产品支持不同的配置方式,通常有 上位机软件 和 Web界面 等方式。
不论是哪种配置方式,都可以找到 MQTT 连接参数的配置界面,主要的配置内容包括:
配置项 | 填写内容 |
---|---|
MQTT 主机名 | 在设备详情页复制的 MQTT 主机名 |
MQTT 端口 | 在设备详情页复制的 MQTT 端口,通常为 1883 |
username | AccessToken |
password | ProjectKey |
clientId | 空或任意字符串 |
完成以上配置后,可以先保存 DTU 配置,这一步我们已经完成了 DTU 和云平台连接的身份认证配置。
此时,为 DTU 上电或重启,应该在平台可以看到设备上线的提示,表明设备已经成功连接到平台。
配置 DTU 上的 MQTT 主题
接下来,需要为 DTU 配置 MQTT 主题,用于 DTU 和云平台进行数据的上报和下发。
提示
如果希望了解 ThingsCloud 支持的所有 MQTT 主题,请参考 设备 MQTT 接入 。
在这里,通常只需要配置以下的常用主题,如下:
用途 | 类型 | 主题 | 消息格式 | 说明 |
---|---|---|---|---|
上报 DTU 的数据 | 发布 | attributes | JSON | |
接收云平台下发的数据 | 订阅 | attributes/push | JSON | 对于不需要下发数据的场景,可以不设置这个主题 |
需要注意的是,对于以上主题,支持的消息格式必须为 JSON
,例如上报数据的消息如下:
{
"temperature": 28.5,
"light": 2000,
"switch": true
}
云平台会自动接收上报数据,生成设备属性,在控制台的设备详情页可以看到属性数据实时更新。
![属性上报](https://img-1300291923.cos.accelerate.myqcloud.com/docs/site/images/mqtt-2.png)
对于 number
类型的属性,云平台还提供了时序图表,方便浏览历史曲线。
![属性上报](https://img-1300291923.cos.accelerate.myqcloud.com/docs/site/images/mqtt-1.png)
如果 DTU 不支持 JSON
格式,那就需要用到自定义数据流的 MQTT 主题。
使用 MQTT 自定义数据流
ThingsCloud 除了内置的 MQTT 标准主题外,还支持灵活强大的自定义数据流的主题,前边我们提到过,这需要您先创建设备类型,并添加自定义数据流。
提示
关于 自定义数据流 的详细介绍,请浏览 自定义数据流。
每个自定义数据流会生成一组 MQTT 主题,包括一个发布主题和一个订阅主题,用来实现设备上报数据给云平台,以及接收云平台下发的数据,例如,我们创建一个标识符为 stream
的自定义数据流,设置为支持 HEX
数据格式,那么云平台会自动生成如下主题:
功能 | 类型 | 主题 | 消息格式 |
---|---|---|---|
上报数据 | 发布 | data/stream | HEX |
下发控制 | 订阅 | data/stream/set | HEX |
在实际使用中,以上这两个 MQTT 主题,可以实现云平台向设备下发 Modbus 查询指令,设备向云平台上报 Modbus 指令。云平台通过设备类型中的 Modbus 寄存器设置或消息规则,来自动解析 Modbus 指令,提取相应的数据,自动生成设备属性。
通过如下的设备消息日志,可以看到这个过程:
![modbus](https://img-1300291923.cos.accelerate.myqcloud.com/docs/site/images/modbus-1.png)
配置 DTU 连接终端设备
当完成以上配置后,如果 DTU 本身需要和平台进行数据的上报或下发,例如 DTU 版本信息、状态数据以及参数设置等,便可以通过以上的主题和平台进行数据传输。
除此之外,DTU 的重要使命是转发 终端设备 和云平台之间的消息,终端设备例如:传感器、执行器等。那么,就需要配置 DTU 和终端设备的连接方式以及数据格式,这部分配置请参考 DTU 和终端设备的相关产品手册。
使用云平台辅助配置终端设备
举个例子,我们在配置支持 RS485/Modbus 的传感器或 IO 控制器接入 DTU 时,由于我们事先已经配置好了 DTU 和云平台的连接,所以我们可以直接从云平台下发 Modbus 指令给传感器,完成 Modbus 从机地址修改等基本操作。
我们还可以用这种方式来远程调试传感器的数据上报准确性等,总之 DTU 为云平台和终端设备之间提供了通信桥梁,我们可以充分利用这种便利性。
使用云平台的定时任务
当 DTU 和终端设备是主从关系时,我们需要 DTU 主动定时向终端设备发送查询指令,有些 DTU 支持这样的功能,对于不支持的 DTU,再或者我们需要远程灵活的调整查询策略,那么可以使用云平台提供的定时任务功能。
定时任务支持多种丰富的定时策略,例如:按间隔时间、按每日固定时间等。可执行的任务可以是下发一个 JSON
消息给设备,也可以是下发一个 Modbus
查询指令,从而触发 DTU 连接的从机设备上报数据。
使用云平台的消息规则
同样以 RS485/Modbus 的传感器设备举例,为了快速解析 Modbus 协议,ThingsCloud 的消息规则支持内置的 Modbus 解析规则,您可以在规则引擎中添加这样的操作,如下图:
![modbus](https://img-1300291923.cos.accelerate.myqcloud.com/docs/site/images/modbus-3.png)
规则配置非常简单,您只要略懂 Modbus 协议,并参考传感器设备的 Datasheet 手册,便可以完成 Modbus 数据的提取。
![modbus](https://img-1300291923.cos.accelerate.myqcloud.com/docs/site/images/modbus-2.png)
一些注意事项
- 如果 DTU 默认开启了一些预设主题的订阅,请将其关闭。否则会由于该主题不在云平台支持的标准主题范围内,被云平台限制 MQTT 接入。
- 在免费版项目中,DTU 发布数据的时间间隔不要低于 30 秒,否则可能会被云平台断开。付费版项目支持更短的上报间隔时间。
DTU TCP 透传方式接入云平台
TCP 透传是 DTU 比较常见的一种云平台连接方式,也是几乎所有 DTU 产品都支持的连接方式。这种方式让 DTU 作为一种透明转发的工作模式,将子设备发来的消息,直接转发给云平台,同时也将云平台下发的消息,转发给子设备。
总体来说,如果您熟悉了前边的 MQTT 接入配置方法,那么 TCP 透传的配置方法基本类似,不同之处在于 TCP 接入点和设备身份认证的方式。
接下来我们介绍 DTU TCP 透传方式的接入步骤。
提示
TCP 接入方式不仅支持 DTU 接入,也是更多单片机及通信模组最常见的接入方式,关于 TCP 接入的详细介绍,请参考 设备 TCP 接入 。
创建项目
首先,在云平台创建项目,点此进入控制台。在创建项目时,选择适合您的公有区。
创建设备类型
接着,进入项目中,由于 TCP 接入方式需要使用到设备类型的 自定义数据流,所以先来创建一个设备类型。如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/site/images/dtu-tcp-1.png)
- 创建方式:选择 创建自定义类型
- 类型名称:起个名字,例如:我的DTU
- 设备接入类型:直连设备
- 设备通信方式:选择 DTU 的联网方式,例如:4G 或 WiFi
- 设备接入协议:选择 Modbus RTU 透传
- 创建默认自定义数据流:开启
- 自定义数据流消息格式:选择 Modbus RTU
- 是否支持 TCP 接入:开启
完成创建,我们进入刚创建的 设备类型详情页 > 自定义数据流,可以看到已经默认创建了一个标识符为 stream 的自定义数据流,并且 已开启 TCP。如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/site/images/dtu-tcp-2.png)
这相当于我们为该设备类型下的所有设备,开放了 TCP 接入通道。至于这里的标识符和 Topic 等信息,我们可以忽略,在使用 TCP 通道时没有实际作用。
提示
关于 自定义数据流 的详细介绍,请浏览 自定义数据流。
创建设备
接下来,我们来正式创建一个设备,为设备绑定刚创建的设备类型,这样新设备便拥有了之前配置好的 TCP 接入通道。如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/site/images/dtu-tcp-3.png)
获得 TCP 连接参数
设备创建成功后,进入 设备详情页 > 连接,找到以下信息:
- 设备的普通证书,包括
ProjectKey
和AccessToken
,用于配置 DTU 连接云平台的身份认证部分。 - TCP 接入点主机名和端口,例如:
tcp://device.iot-api.com:28801
,那么其中device.iot-api.com
是 TCP 接入点主机名,28801
是端口。请以您的设备详情页的实际信息为准。
配置 DTU 连接云平台
不同的 DTU 产品支持不同的配置方式,通常有 上位机软件 和 Web界面 等方式。
不论是哪种配置方式,要配置的内容项基本相同,它们包括:
配置项 | 填写内容 |
---|---|
TCP 主机名 | 在设备详情页复制的 TCP 主机名 |
TCP 端口 | 在设备详情页复制的 TCP 端口 |
注册包 | 使用 ASCII 明文形式,格式为:ProjectKey &AccessToken |
心跳包 | 可选,用于设备 TCP 协议层的保活,支持 ASCII 或 HEX 等任意格式,例如:1 或 Ox00 |
注册包
这里特别说明一下注册包,举个例子:
假如您的设备普通证书是:
- AccessToken:
1234567890
- ProjectKey:
ABCDEFG
那么注册包就是:
ABCDEFG&1234567890
如果 DTU 不支持设置 ASCII 明文形式,只支持 HEX 格式,您可以自行转为 HEX 格式,例如上边的注册包,转为 HEX 格式就是:
41 42 43 44 45 46 47 26 31 32 33 34 35 36 37 38 39 30
推荐一个 在线的 ASCII 和 HEX 转换工具
完成以上配置后,可以先保存 DTU 配置。
到目前为止,我们在 DTU 端已经完成了 TCP 透传方式连接 ThingsCloud 的所有配置。
数据发送和接收测试
为了测试 DTU 和云平台是否已经通过 TCP 透传成功连接,您可以在 设备详情页 > 消息 中,开启 调试状态,用于查看设备发送和接收的消息。
常用的测试方法,例如:
- 用配置 DTU 的专用上位机软件,将 DTU 切换到透传模式,然后向 DTU 发送数据,在云平台设备消息列表中刷新,检查是否会显示相应的消息。
- 同样在 DTU 的透传模式下,用其它任何串口调试工具,连接到 DTU 的从机端口,例如:RS485 端口,模拟子设备发送消息给 DTU,在云平台设备消息列表中刷新,检查是否会显示相应的消息。
通过 DTU 上报终端设备的真实数据
最后,我们给 DTU 接上终端设备,例如一个 RS485 Modbus 温湿度传感器,通过 Modbus RTU 任务 来定时下发 Modbus 查询指令,并通过 Modbus RTU规则 来自动解析 Modbus 消息,生成设备的属性数据。如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/docs/site/images/dtu-tcp-4.png)