TCP协议设备接入 ¶
准备工作 ¶
启动物联网平台 ¶
请参考教程5分钟快速运行
创建产品 ¶
访问产品管理菜单栏,点击创建产品按钮,根据页面提示填写参数,然后单击“确定”,完成产品的创建。
参数 | 参数值 |
---|---|
产品名称 | 电表 |
所属品类 | 标准品类 |
选择标准品类 | 进入选择品类页面,输入多功能电表,点击查询,选择搜索结果 |
节点类型 | 直连设备 |
接入协议 | TCP |
数据类型 | 标准物模型 |
网络类型 | 以太网 |
工厂 | 根据实际情况填写 |
描述 | 请根据实际情况填写 |
点击进入产品详情页面,点击"为发布"按钮,发布产品。
创建设备 ¶
访问设备管理菜单栏,点击添加设备按钮,添加方式选择单个设备,根据页面提示填写参数,然后单击“确定”,完成设备的创建。
参数 | 参数值 |
---|---|
设备名称 | test_001 |
所属产品 | 电表 |
关联驱动 | 不填写 |
设备描述 | 请根据实际情况填写 |
下载官方HTTP驱动 ¶
访问驱动镜像菜单栏,点击驱动市场,下载HTTP协议驱动。
下载成功后,会在我的驱动出现一条记录。
设备与驱动绑定 ¶
访问设备管理菜单栏,勾选刚刚创建的设备,点击批量驱动绑定按钮,弹出绑定页面,关联驱动选择TCP官方驱动开头的数据,点击确定按钮进行绑定。
绑定成功后,关联驱动一栏会出现驱动具体驱动名称。
启动驱动 ¶
打开Docker启动参数开关,输入-p 7653:7653
点击确定。
tcp粘包问题处理。 ¶
设备使用tcp协议传输数据时,可能造成粘包问题,对此蜂鸟物联网平台提供两种解决方案。
方法1、固定长度处理粘包
每次发送固定缓冲区大小数据。客户端和服务器约定每次发送请求的大小。例如客户端发送 1024 个字节,服务器接受 1024 个字节。
打开自定义参数开关,输入如下内容,其中bytes_len的值可以由用户自定义配置,如果未设置,则默认为1024。
{
"rule_name":"fixedLength",
"bytes_len":1024
}
方法2、使用分隔符处理粘包
基于定界符来判断是不是一个请求(结尾’\n’). 客户端发送过来的数据,每次以 \n 结束,服务器每接受到一个 \n 就以此作为一个请求。然后对其拆分后的头部部分与前一个包的剩余部分进行合并,这样就得到了一个完整的包。
打开自定义参数开关,输入如下内容。
{
"rule_name":"delimiter"
}
注意
如果用户未打开自定义参数
开关,则默认使用分隔符处理粘包,界定符为’\n’。
消息协议说明 ¶
参数名称 | 大小 | 示例 | 说明 |
---|---|---|---|
package length | 4byte | 75 | message数据包长度 |
header length | 4byte | 40 | message数据包长度 |
version | 2byte | 1 | 版本号,传递时固定为1 |
operation | 2byte | 1 | 操作类型,分为11种类型,详情请参见下方 |
sequenceID | 36byte | d7f2ece9-cd2b-4ec3-b18a-56777cf30290 | 传递uuid |
message | n byte | "{}" | 消息内容,详情请参见下方 |
操作类型 ¶
鉴权(发送) ¶
operation = 1
message格式
{
"device_id": "99735615",//设备id
"product_id": "54289730",//产品id
"token": ""//设备接入token,具体计算方法参见下方。
}
属性上报(发送) ¶
operation = 2
message格式
{
"sys": {
"ack": true //如果ack设置为true,服务器会会属性上报做响应
},
"params": {
"Ia": { //属性标识符
"value": 40, //属性值
"time": 1712473482000 //毫秒时间戳,如果不带此字段,平台会取当前时间
}
}
}
属性上报响应(接收) ¶
operation = 3
message格式
{
"code": 200,
"msg": "success"
}
事件上报(发送) ¶
operation = 4
message格式
{
"sys": {
"ack": true //如果ack设置为true,服务器会会属性上报做响应
},
"params":{
"eventCode":"Error",//事件标识符
"eventTime":1712474219000,//毫秒时间戳,如果不带此字段,平台会取当前时间
"outputParams":{
"M_STATUS":true
}
}
}
事件上报响应(接收) ¶
operation = 5
message格式
{
"code": 200,
"msg": "success"
}
属性设置(接收) ¶
operation = 6
message格式
{
"params": {
"breaker_control": true //breaker_control为属性标识符 , true为属性值
}
}
属性设置响应(发送) ¶
operation = 7
message格式
{
"success": true,
"code": 200,
"errorMessage": ""
}
属性获取(接收) ¶
operation = 8
message格式
[
"Ia",
"Ib"
]
属性获取响应(发送) ¶
operation = 9
message格式
{
"params": [
{
"code": "Ia", //属性标识符
"value": 10, //属性值
"time":1699412942089 //毫秒时间戳
},
{
"code": "Ib", //属性标识符
"value": 20, //属性值
"time":1699412942089 //毫秒时间戳
}
]
}
服务调用(接收) ¶
operation = 10
message格式
{
"code": "reportlog", //服务标识符
"inputParams": { //输入参数
"text": "/temp" //属性值
}
}
服务调用响应(发送) ¶
operation = 11
message格式
{
"code": "file", //服务标识符
"outParams": { //输出参数
"result": "/temp" //属性值
}
}
状态码 ¶
状态码 | 信息 | 说明 |
---|---|---|
200 | - | 成功 |
10001 | system error | 系统错误 |
10002 | rpc request error | rpc请求错误 |
10003 | too many requests | 并发请求数据超过设定 |
10004 | the format of result is error | 请求数据格式错误 |
20001 | device not found | 未找到该设备 |
30001 | product not found | 未找到该产品 |
40001 | data size is not within the defined range | 上报数据大小未在指定区间 |
40002 | data report type error | 上报数据格式错误 |
40003 | property code not found | 属性标识符没有找到 |
40004 | event code not found | 事件标识符没有找到 |
40005 | data length is greater than the defined | 上报数据长度未在指定区间 |
40006 | invalid Parameter | 无效的uri参数 |
40007 | auth PermissionDeny | token错误 |