LLCOM 模拟设备 TCP 接入 ThingsCloud
LLCOM 模拟设备 TCP 接入 ThingsCloud
在将物联网设备通过 TCP 客户端方式接入 ThingsCloud 的过程中,为了方便学习和调试,您可以参考本篇教程,学习如何使用 PC 软件来模拟设备进行 TCP 接入,以及和平台之间进行数据上传和接收。
设备通过 TCP 接入平台后,可发送和接收的数据支持 JSON、HEX、Plaintext 等格式。本教程主要介绍设备如何通过 TCP 上报 HEX 数据,利用平台的消息规则进行解析,生成相应的设备属性,以及如何将平台下发的属性转换为 HEX 数据,通过 TCP 连接下发到设备。
参考
关于 ThingsCloud TCP 接入方式的详细介绍,可以浏览 TCP 接入手册。
准备工作
首先打开 ThingsCloud 控制台,进入您的项目。
创建设备类型
设备使用 TCP 接入时,必须先在平台创建设备类型,并且设备类型中有一个绑定 TCP 的自定义数据流。
参考
关于自定义数据流的详细介绍,可以浏览 自定义数据流。
这里我们创建一个设备类型,名称可以随意填写,其它选项如下图:

在下边的选项中,开启创建默认自定义数据流,消息格式可以根据实际需求来选择,本例中我们选择 HEX 16进制消息,然后开启支持 TCP 接入。如下图:

进入刚创建的设备类型,在自定义数据流页面中,应该会看到一个自动创建的自定义数据流,标识符为 stream
,并且已开启了绑定 TCP,如下图:

提示
您也可以在创建设备类型的时候不开启默认的自定义数据流,而是在设备类型中手动创建自定义数据流,标识符名称可以随意指定。
接下来,为了方便学习和测试,我们给设备类型添加几个属性定义,温度和湿度用于接收设备上报数据,继电器输出用于平台下发到设备来控制继电器状态。如下图:

创建设备
创建一个设备,绑定到刚创建的设备类型。

进入设备详情页的连接页面,如下图:

在该页面的底部,找到设备端 TCP 接入点,这里的信息接下来会用到。

模拟设备 TCP 连接到平台
教程中我们使用 LLCOM,这是一个非常强大的串口调试工具,它自带了很多小工具,其中的 socket 客户端工具是我们接下来要用到的。
根据 ThingsCloud 的 TCP 接入文档,我们按以下步骤来实现模拟客户端的 TCP 接入:
- 在 LLCOM 中填写 TCP 服务器地址、端口号,协议选择 TCP。
- 不要勾选待发送数据 HEX 格式。
- 将 TCP 注册包复制到发送数据的输入框中,做好准备。
- 点击“连接”按钮,看到工具左侧日志中显示“Server connected”。
- 紧接着点击“发送”按钮,将输入框中的注册包文本发出。
- 此时会看到平台显示设备已连接,说明已通过设备身份验证,设备已上线。

请注意,在 TCP 连接建立后,建议在 5 秒内发送注册包,否则可能因为超时导致无法完成身份验证。如遇到这种情况,请您重新操作。
设备上报 HEX 消息
设备上线后,接下来我们模拟设备向平台发送一个 HEX 数据 00112233
,在此之前,我们将设备详情页中的调试功能打开,可以实时查看消息日志,如下图:

设备接收平台下发 HEX 消息
平台也可以下发 HEX 数据到设备端,在设备调试界面的下发消息对话框中,选择自定义数据流,同时务必选择 TCP 通道,如下图:

在下发消息的输入框中,我们输入 HEX 消息 33221100
,点击发送,这时在 LLCOM 工具中接收到了平台下发的 HEX 消息,如下图:

这里要注意,LLCOM 工具中记得开启 Hex显示 选项。
顺便说一下,ThingsCloud 支持多种下发 HEX 数据的方式,包括:
上报 HEX 转设备属性
到目前为止,所有上报和下发的 HEX 消息,都只会出现在设备的调试日志中,并不会自动进入设备属性。
我们只需要创建消息规则,根据自己的 HEX 消息格式或协议,来实现 HEX 消息和设备属性之间的转换。

这里我们一个自定义数据上报规则,规则名称可以随意填写,自定义数据流中必须填写该设备类型中绑定 TCP 的自定义数据流标识符。如下图:

在规则操作中,选择属性解析函数,如下图:

编写规则云函数,这里使用的是 JavaScript
脚本语言,支持大多数标准语法和平台提供的内置函数,如果您具备编程基础,通过学习平台提供的规则示例,借助云函数在线测试功能,很容易上手。

代码如下:
module.exports = function (identifier, data) {
/**
* 参数:
* identifier: 上报的自定义数据流标识符
* data: 上报的自定义数据,二进制 Buffer格式
* 返回值:
* attributes: 生成设备属性
*/
var attributes = {};
attributes.temperature = data.readInt16BE(0);
attributes.humidity = data.readInt16BE(2);
return attributes;
}
有了以上规则,我们再次模拟设备上报 HEX 消息时,在平台的设备消息日志中可以看到,设备在收到 HEX 消息后,会立即执行消息规则,生成属性上报消息。如下图:

在设备属性中,便可以看到解析后的属性值。

下发属性转 HEX 消息
同样,我们也需要将平台对设备的属性下发,转换为设备需要的 HEX 消息格式。
本例中,我们希望当在控制台或 App 中操作开关按钮时,可以自动生成 HEX 消息,这里我们再次创建一个属性下发规则,如下图:

在规则操作中,选择自定义数据下发函数,如下图:

编写规则云函数,如下图:

代码如下:
module.exports = function (push_attributes) {
/**
* push_attributes: 下发的属性对象,作为函数参数传入。
* data: 构造下发的自定义数据对象,下发到硬件。
*/
var data = {
type: "hex",
msg: ""
}
if (push_attributes.relay === true) {
data.msg = "FF";
} else if (push_attributes.relay === false) {
data.msg = "00";
}
return data;
}
以上函数的作用很简单,当下发属性中包含 relay
并且为 true
时,则下发 HEX 消息 FF
,如果 relay
为 false
时,则下发 HEX 消息 00
。
如果下发属性中不包含 relay
这个属性时,则不会下发 HEX 消息。
有了这个消息规则后,当我们在平台上操作这个继电器输出开关时,可以看到模拟设备端收到了预期的 HEX 消息。如下图:
