云服务器内容精选

  • 编解码插件开发 在产品开发空间,选择“编解码插件开发”,开发编解码插件。 在“在线编解码插件编辑器”区域,单击“新增消息”。 新增消息Report_Sensor,接收路灯上报的光照强度。 配置示例: 消息名:Report_Sensor 消息类型:数据上报 添加响应字段:是 响应数据:AAAA0000(默认) 在“新增消息”界面,单击“添加字段”。 在“添加字段”界面,勾选“标记为地址域”,然后单击“完成”,添加地址域字段messageId。 在“新增消息”界面,单击“添加字段”,填写相关信息,然后单击“完成”。 配置示例: 名字:data 数据类型:int16u(16位无符号整型) 在“新增消息”界面,单击“完成”,完成消息Report_Sensor的配置。 新增消息Set_Led,管理路灯的开/关灯,并获取路灯执行命令后的状态信息。 配置示例: 消息名:Set_Led 消息类型:命令下发 添加响应字段:是 在“新增消息”界面,单击“添加字段”。 在“添加字段”界面,勾选“标记为地址域”,然后单击“完成”,添加地址域字段messageId。 在“添加字段”界面,勾选“标记为响应标识字段”,然后单击“完成”,添加响应标识字段mid。 在“新增消息”界面,单击“添加字段”,填写相关信息,然后单击“完成”。 配置示例: 名字:led 数据类型:string 长度:3 在“新增消息”界面,单击“添加响应字段”。 在“添加字段”界面,勾选“标记为地址域”,然后单击“完成”,添加地址域字段messageId。 在“添加字段”界面,勾选“标记为响应标识字段”,然后单击“完成”,添加响应标识字段mid。 在“添加字段”界面,勾选“标记为命令执行状态字段”,然后单击“完成”,添加命令执行状态字段errcode。 在“新增消息”界面,单击“添加响应字段”,填写相关信息,单击“完成”。 配置示例: 名字:light_state 数据类型:string 长度:3 在“新增消息”界面,单击“完成”,完成消息Set_Led的配置。 拖动右侧“设备模型”区域的属性字段、命令字段和响应字段,与数据上报消息、命令下发消息和命令响应消息的相应字段建立映射关系。 单击“保存”,并在插件保存成功后单击“部署”,将编解码插件部署到 物联网平台
  • 配置IoT Studio工程 在产品开发空间,选择“端侧集成指导”,单击“立即下载”,下载并安装最新版的IoT Studio。 运行IoT Studio时,系统会检测是否安装开发工具包。 单击“是”,下载并安装开发工具包,此工具包用于在windows上搭建IoT Studio开发环境,编译调试Lite OS应用。 将工具包解压到任意目录,运行“developTools.exe”,安装完成后再重新运行IoT Studio。 在开发中心,选择“端侧集成指导”,单击“复制”,复制设备模型文件的URL。 打开IoT Studio,单击“创建IoT Studio工程”,进入“新建IoT工程”界面。 在“新建IoT工程”中,填写工程相关信息。 配置示例: 工程名称:QuickStart 工程目录:D:\ SDK版本:保持默认 硬件平台:选择STM32L431_BearPi 选择“基于云端模型创建”。 设备模型文件:步骤3复制的设备模型文件的URL。 设备开发的业务模块主要集中在自动生成的app.c和app.h两个文件中。 oc_cloud_map_demo_app.c文件中已自动生成了数据上报和命令下发两个接口。 oc_cloud_map_demo_app.h文件主要描述映射生成的数据结构、硬件初始化接口。
  • Profile定义 在产品开发空间,选择“Profile定义”,单击“新建服务”,配置产品的服务。 新建Sensor服务,管理路灯的光照强度。当路灯接入物联网平台后,上报光照强度值。 在“属性列表”区域单击“添加属性”,填写相关信息,然后单击“确定”。 配置示例: 名称:luminance 数据类型:int 最小值:0 最大值:65535 步长:1 单位:lux 访问模式:RE 是否必选:是 在Sensor服务名的右边单击,保存服务。 新建LED服务,管理路灯的开/关灯。当路灯收到物联网平台下发的开/关灯命令后,响应并上报当前的状态信息。 在“命令列表”区域单击“添加命令”,命令名称为Set_Led,然后单击“确定”。 单击“添加下发命令字段”,填写相关信息,然后单击“确定”。 配置示例: 名称:led 数据类型:string 长度:3 枚举值:ON,OFF 是否必选:是 单击“添加响应命令字段”,填写相关信息,然后单击“确定”。 配置示例: 名称:light_state 数据类型:string 长度:3 枚举值:ON,OFF 是否必选:是 在LED服务名的右边单击,保存服务。
  • 方案设计 该款智慧路灯通过LWM2M协议接入物联网平台,具备如下能力: 支持上报光照强度。 支持开/关控制命令。 支持上报灯光状态信息。 该款智慧路灯的产品能力模型如下所示: 产品信息 设备类型 StreetLight - 设备型号 StreetLight01 - 厂商名称 TestManuName - 接入协议 CoAP - 数据格式 二进制码流 - 服务数据 服务1 服务名称 Sensor 属性 名称:luminance 数据类型:int 最小值:0 最大值:65535 步长:1 单位:lux 访问模式:RE 是否必选:是 服务2 服务名称 LED 命令 命令名称:Set_Led 下发命令字段 名称:led 数据类型:string 长度:3 枚举值:ON,OFF 是否必选:是 响应命令字段 名称:light_state 数据类型:string 长度:3 枚举值:ON,OFF 是否必选:是
  • 数组及可变长数组数据类型 如果该烟感设备需要支持描述信息上报功能,描述信息描述信息支持数组和可变长度数组两种类型,则按照以下步骤创建消息。 产品模型定义 在烟感产品的开发空间完成产品模型定义。 图40 模型定义-smokedetector携带other_info 编解码插件开发 在烟感产品的开发空间,选择“插件开发”,单击“图形化开发”。 单击“新增消息”,新增消息“other_info”,上报数组类型的描述信息。配置此步骤的主要目的是,将设备上传的数组二进制码流消息解码成JSON格式,以便物联网平台理解。配置示例如下: 消息名:other_info 消息类型:数据上报 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会下发用户设置的响应数据到设备。 响应数据:AAAA0000(默认) 图41 插件开发-新增消息other_info 单击“添加字段”,添加messageId字段,表示消息种类。在本场景中,0x0用于标识上报火灾等级和温度的消息,0x1用于标识只上报温度的消息,0x2用于标识上报描述信息(数组类型)的消息。messageId、数据类型、长度、默认值、偏移值的说明可参考1。 图42 插件开发-添加字段messageId(0x2) 添加other_info字段,“数据类型”选择“array”,表示数组类型的描述信息。在本场景中,“长度”配置为5个字节。字段名、默认值、偏移值的说明可参考2。 图43 插件开发-添加字段other_info为array 单击“新增消息”,新增“other_info2”消息,上报可变长度数组类型的描述信息。配置此步骤的主要目的是,将设备上传的可变长度数组二进制码流消息解码成JSON格式,以便物联网平台理解。配置示例如下: 消息名:other_info2 消息类型:数据上报 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会下发用户设置的响应数据到设备。 响应数据:AAAA0000(默认) 图44 插件开发-新增消息other_info2 单击“添加字段”,添加messageId字段,表示消息种类。在本场景中,0x0用于标识上报火灾等级和温度的消息,0x1用于标识只上报温度的消息,0x3用于标识上报描述信息(可变长度数组类型)的消息。messageId、数据类型、长度、默认值、偏移值的说明可参考1。 图45 插件开发-添加字段messageId(0x3) 添加length字段,表示数组长度。“数据类型”根据可变长度数组的长度进行配置,长度在255以内,配置为“int8u”。长度、默认值、偏移值的说明可参考2。 图46 插件开发-添加字段length 添加other_info字段,数据类型选择“variant”,表示可变长度数组类型的描述信息。“长度关联字段”选择“length”,表示当前可变长数组的长度由上报的length的值决定。“掩码”默认为“0xff”,用来计算该数组实际生效的长度,例如:“长度关联字段”length的值为5,其对应的二进制为:00000101,此时若掩码为0xff,对应的二进制为:11111111,那么两者进行“与“运算之后的结果为00000101,即十进制的5,那么该数组实际生效的长度为5。如上报数据为03051234567890,表示当前上报的数据对应的是messageId为03的的message,可变长数组长度为5,可变长参数other_info对应的码流为1234567890。 图47 插件开发-添加字段other_info为variant 拖动右侧“设备模型”区域的属性字段,与数据上报消息的相应字段建立映射关系。 图48 插件开发-数据上报字段映射关系other_info为varint 单击“保存”,并在插件保存成功后单击“部署”,将编解码插件部署到物联网平台。 图49 插件开发-部署插件 调测编解码插件 在烟感产品的开发空间,选择“在线调试”,并单击“新增测试设备”。 用户可根据自己的业务场景,选择使用真实设备或者虚拟设备进行调测。具体调测步骤请参考在线调试。本文以虚拟设备为例,调测编解码插件。 在弹出的“新增测试设备”窗口,选择“虚拟设备”,单击“确定”,创建一个虚拟设备。虚拟设备名称包含 “DeviceSimulator”字样,每款产品下只能创建一个虚拟设备。 图50 在线调试-创建虚拟设备 单击“调试”,进入调试界面。 图51 在线调试-进入调试 使用设备模拟器上报数组类型的描述信息。 十六进制码流示例:0211223344。02表示messageId,此消息上报数组类型的描述信息;11223344表示描述信息,长度为4个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=null}。描述信息不足5个字节,编解码插件无法解析。 图52 在线调试-模拟数据上报other_info数组1 十六进制码流示例:021122334455。02表示messageId,此消息上报数组类型的描述信息;1122334455表示描述信息,长度为5个字节。 在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data: {"other_info":"ESIzRFU="}}。描述信息长度为5个字节,编解码插件解析成功。 图53 在线调试-模拟数据上报other_info数组2 十六进制码流示例:02112233445566。02表示messageId,此消息上报数组类型的描述信息;112233445566表示描述信息,长度为6个字节。 在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data: {"other_info":"ESIzRFU="}}。描述信息长度超过5个字节,编解码插件截取前5个字节进行解析。 图54 在线调试-模拟数据上报other_info数组3 使用设备模拟器上报可变长度数组类型的描述信息。 十六进制码流示例:030101。03表示messageId,此消息上报可变长度数组类型的描述信息;01表示描述信息长度(1个字节),长度为1个字节;01表示描述信息,长度为1个字节。 在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data: {"other_info":"AQ=="}}。AQ==是01经过base64编码后的值。 图55 在线调试-模拟数据上报other_info可变长数组1 十六进制码流示例:03020102。03表示messageId,此消息上报可变长度数组类型的描述信息;02表示描述信息长度(2个字节),长度为1个字节;0102表示描述信息,长度为2个字节。 在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data: {"other_info":"AQI="}}。AQI=是01经过base64编码后的值。 图56 在线调试-模拟数据上报other_info可变长数组2 十六进制码流示例:03030102。03表示messageId,此消息上报可变长度数组类型的描述信息;03表示描述信息长度(3个字节),长度为1个字节;0102表示描述信息,长度为2个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=null}。描述信息长度不足3个字节,编解码插件解析失败。 图57 在线调试-模拟数据上报other_info可变长数组3 十六进制码流示例:0303010203。03表示messageId,此消息上报可变长度数组类型的描述信息;03表示描述信息长度(3个字节),长度为1个字节;010203表示描述信息,长度为3个字节。 在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data: {"other_info":"AQID"}}。AQID是010203经过base64编码后的值。 图58 在线调试-模拟数据上报other_info可变长数组4 十六进制码流示例:030301020304。03表示messageId,此消息上报可变长度数组类型的描述信息;03表示描述信息长度(3个字节),长度为1个字节;01020304表示描述信息,长度为4个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=AQID}。描述信息长度超过3个字节,编解码插件截取前3个字节进行解析,AQID是010203经过base64编码后的值。 图59 在线调试-模拟数据上报other_info可变长数组5 base64编码方式说明 base64编码方式会把3个8位字节(3*8=24)转化为4个6位字节(4*6=24),并在每个6位字节前补两个0,构成4个8位字节的形式。如果要进行编码的码流不足3个字节,则在码流后用0填充,使用0填充的字节经编码输出的字符为“=”。 base64可以将16进制码流当做字符或者数值进行编码,两种方式获得的编码结果不同。以16进制码流01为例进行说明: 把01当作字符,不足3个字符,补1个0,得到010。通过查询ASCII码表,将字符转换为8位二进制数,即:0转换为00110000、1转换为00110001,因此010可以转换为001100000011000100110000(3*8=24)。再转换为4个6位字节:001100、000011、000100、110000,并在每个6位字节前补两个0,得到:00001100、00000011、00000100、00110000。这4个8位字节对应的10进制数分别为12、3、4、48,通过查询base64编码表,获得M(12)、D(3)、E(4),由于3个字符中,最后一个字符通过补0获得,因此第4个8位字节使用“=”表示。最终,把01当做字符,通过base64编码得到MDE=。 把01当作数值(即1),不足3个字符,补两个0,得到100。将数值转换为8位2进制数,即:0转换为00000000、1转换为00000001,因此100可以转换为000000010000000000000000(3*8=24)。在转换为4个6位字节:000000、010000、000000、000000,并在每个6位字节前补两个0,得到:00000000、00010000、00000000、00000000。这4个8位字节对应的10进制数分别为:0、16、0、0,通过查询base64编码表,获得A(0)、Q(16),由于3个数值中,最后两个数值通过补0获得,因此第3、4个8位字节使用“=”表示。最终,把01当作数值,通过base64编码得到AQ==。 总结 当数据类型为数组或可变长度数组时,插件是按照base64进行编解码的:上报数据时,将16进制码流进行base64编码,比如:01编码为“AQ==”;命令下发时,将字符进行base64解码,比如:“AQ==”解码为01。 当某字段的数据类型为可变长度数组时,该字段需要关联长度字段,长度字段的数据类型必须为int。 针对可变长度数组,命令下发和数据上报的编解码插件开发方式相同。 图形化开发的编解码插件使用base64进行编码时,是将16进制码流当做数值进行编码。
  • 字符串及可变长字符串的编解码插件 如果该烟感设备需要支持描述信息上报功能,描述信息支持字符串和可变长度字符串两种类型,则按照以下步骤创建消息。 产品模型定义 重新创建一个烟感产品,并在烟感产品的开发空间完成产品模型定义。 图20 模型定义-smokedetector携带other_info 编解码插件开发 在烟感产品的开发空间,选择“插件开发”,单击“图形化开发”。 单击“新增消息”,新增消息“other_info”,上报字符串类型的描述信息。配置此步骤的主要目的是,将设备上传的字符串二进制码流消息解码成JSON格式,以便物联网平台理解。配置示例如下: 消息名:other_info 消息类型:数据上报 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会下发用户设置的响应数据到设备。 响应数据:AAAA0000(默认) 图21 插件开发-新增消息other_info 单击“添加字段”,添加messageId字段,表示消息种类。在本场景中,0x0用于标识上报火灾等级和温度的消息,0x1用于标识只上报温度的消息,0x2用于标识上报描述信息(字符串类型)的消息。messageId、数据类型、长度、默认值、偏移值的说明可参考1。 图22 插件开发-添加字段messageId(0x2) 添加other_info字段,表示字符串类型的描述信息。在本场景中,字符串类型的字段数据类型选择“string”,“长度”配置 6个字节。字段名、默认值、偏移值的说明可参考2。 图23 插件开发-添加字段other_info 单击“新增消息”,新增“other_info2”消息名,配置数据上报消息,上报可变长度字符串类型的描述信息。配置此步骤的主要目的是,将设备上传的可变长度字符串二进制码流消息解码成JSON格式,以便物联网平台理解。配置示例如下: 消息名:other_info2 消息类型:数据上报 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会下发用户设置的响应数据到设备。 响应数据:AAAA0000(默认) 图24 插件开发-新增消息other_info2 添加messageId字段,表示消息种类。在本场景中,0x0用于标识上报火灾等级和温度的消息,0x1用于标识只上报温度的消息,0x3用于标识上报描述信息(可变长度字符串类型)的消息。messageId、数据类型、长度、默认值、偏移值的说明可参考1。 图25 插件开发-添加字段messageId(0x3) 添加length字段,表示可变字符串长度。“数据类型”根据可变长度字符串的长度进行配置,此场景可变字符串长度在255以内,配置为“int8u”。长度、默认值、偏移值的说明可参考2。 图26 插件开发-添加字段length 添加other_info字段,数据类型选择“varstring”,表示可变长度字符串类型的描述信息。“长度关联字段”选择“length”,表示当前可变长字符串的长度由上报的length的值决定。“掩码”默认为“0xff”,用来计算该字段实际生效的长度,例如:“长度关联字段”length的值为5,其对应的二进制为:00000101,此时若掩码为0xff,对应的二进制为:11111111,那么两者进行“与“运算之后的结果为00000101,即十进制的5,那么该字段实际生效的长度为5个字节。如上报数据为03051234567890,表示当前上报的数据对应的是messageId为03的的message,可变长字符串长度为5个字节,可变长参数other_info对应的码流为1234567890。 图27 插件开发-添加字段other_info为varstring 拖动右侧“设备模型”区域的属性字段,与数据上报消息的相应字段建立映射关系。 图28 插件开发-数据上报字段映射关系 单击“保存”,并在插件保存成功后单击“部署”,将编解码插件部署到物联网平台。 图29 插件开发-部署插件 调测编解码插件 在烟感产品的开发空间,选择“在线调试”,并单击“新增测试设备”。 用户可根据自己的业务场景,选择使用真实设备或者虚拟设备进行调测。具体调测步骤请参考在线调试。本文以虚拟设备为例,调测编解码插件。 在弹出的“新增测试设备”窗口,选择“虚拟设备”,单击“确定”,创建一个虚拟设备。虚拟设备名称包含 “DeviceSimulator”字样,每款产品下只能创建一个虚拟设备。 图30 在线调试-创建虚拟设备 单击“调试”,进入调试界面。 图31 在线调试-进入调试 使用设备模拟器上报字符串类型的描述信息。 十六进制码流示例:0231。02表示messageId,此消息上报字符串类型的描述信息;31表示描述信息,长度为1个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=null}。描述信息不足6个字节,编解码插件无法解析。 图32 在线调试-模拟数据上报other_info长度不足 十六进制码流示例:02313233343536。02表示messageId,此消息上报字符串类型的描述信息;313233343536表示描述信息,长度为6个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=123456}。描述信息长度为6个字节,编解码插件解析成功。 图33 在线调试-模拟数据上报other_info长度合适 十六进制码流示例:023132333435363738。02表示messageId,此消息上报字符串类型的描述信息;3132333435363738表示描述信息,长度为8个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=123456}。描述信息长度超过6个字节,编解码插件截取前6个字节进行解析。 图34 在线调试-模拟数据上报other_info长度过长 十六进制码流示例:02013132333435。02表示messageId,此消息上报字符串类型的描述信息;013132333435表示描述信息,长度为6个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=\u000112345}。01在ASCII码表里表示“标题开始”,无法用具体字符表示,因此编解码插件解析为\u0001。 图35 在线调试-模拟数据上报other_info ASCII码 使用设备模拟器上报可变长度字符串类型的描述信息。 十六进制码流示例:030141。03表示messageId,此消息上报可变长度字符串类型的描述信息;01表示描述信息长度;41表示描述信息,长度为1个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=A}。41是A的十六进制ASCII码。 图36 在线调试-模拟数据上报other_info可变长字符串1 十六进制码流示例:03024142。03表示messageId,此消息上报可变长度字符串类型的描述信息;02表示描述信息的长度;4142表示描述信息,长度为2个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=AB}。4142是AB的十六进制ASCII码。 图37 在线调试-模拟数据上报other_info可变长字符串2 十六进制码流示例:030341424344。03表示messageId,此消息上报可变长度字符串类型的描述信息;03表示描述信息长度;41424344表示描述信息,长度为4个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=ABC}。描述信息长度超过3个字节,编解码插件截取前3个字节进行解析,414243是ABC的十六进制ASCII码。 图38 在线调试-模拟数据上报other_info可变长字符串3 十六进制码流示例:0304414243。03表示messageId,此消息上报可变长度字符串类型的描述信息;04表示字符串长度;414243表示描述信息,长度为4个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=null}。描述信息长度不足4个字节,编解码插件解析失败。 图39 在线调试-模拟数据上报other_info可变长字符串4 总结 当数据类型为字符串或可变长度字符串时,插件是按照ASCII码进行编解码的:上报数据时,将16进制码流解码为对应字符串,比如:21解析为“!”、31解析为“1”、41解析为“A”;下发命令时,将字符串编码对应的16进制码流,比如:“!”编码为21,“1”编码为31,“A”编码为41。 当某字段的数据类型为可变长度字符串时,该字段需要关联长度字段,长度字段的数据类型必须为int。 针对可变长度字符串,命令下发和数据上报的编解码插件开发方式相同。 图形化开发的编解码插件使用ASCII码16进制的标准表对字符串和可变长度字符串进行编解码。解码时(数据上报),如果解析结果无法使用具体字符表示,如:标题开始、正文开始、正文结束等,则使用\u+2字节码流值表示(例如:01解析为\u0001,02解析为\u0002);如果解析结果可以使用具体字符表示,则使用具体字符。
  • 数据上报和命令下发 场景说明 有一款烟感设备,具有如下特征: 具有烟雾报警功能(火灾等级)和温度上报功能。 支持远程控制命令,可远程打开报警功能。比如火灾现场温度,远程打开烟雾报警,提醒住户疏散。 支持上报命令执行结果。 产品模型定义 在烟感产品的开发空间,完成产品模型定义。 level:火灾级别,用于表示火灾的严重程度。 temperature:温度,用于表示火灾现场温度。 SET_ALARM:打开或关闭告警命令,value=0表示关闭,value=1表示打开。 图1 模型定义-smokedetector 编解码插件开发 在烟感产品的开发空间,选择“插件开发”,单击“图形化开发”。 单击“新增消息”,新增“smokerinfo”消息。配置此步骤的主要目的是,将设备上传的二进制码流消息解码成JSON格式,以便物联网平台理解。配置示例如下: 消息名:smokerinfo 消息类型:数据上报。 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会下发用户设置的响应数据到设备。 响应数据:AAAA0000(默认) 图2 插件开发-新增消息smokerinfo 单击“添加字段”,勾选“标记为地址域”,添加messageId字段,表示消息类型。在本场景中,上报火灾等级和温度的消息类型是0x0。设备上报消息时,每条消息首个字段就是messageId。如设备上报消息为0001013A,第一个字段00就是表示此条消息是上报火灾级别和温度的消息。后续字段01和013A分别代表火灾级别和温度。如果只有一条数据上报消息和一条命令下发消息,可以不添加messageId字段。 “数据类型”根据数据上报消息种类的数量进行配置。messageId字段默认的数据类型为int8u。 “偏移值”是根据字段位置和字段的字节数的配置自动填充的。messageId为此消息的第一个字段,起始位置为0,字节长度为1,终点位置为1。所以偏移值为0-1。 “长度”是根据“数据类型”的配置自动填充的。 “默认值”可以修改,但必须为十六进制格式,且设备数据上报消息的对应字段必须和此处的默认值保持一致。 图3 插件开发-添加字段messageId 添加level字段,表示火灾级别。 “字段名”只能输入包含字母、数字、_和$,且不能以数字开头的字符。 “数据类型”根据设备上报数据的实际情况进行配置,需要和产品模型相应字段的定义相匹配。产品模型中定义的火灾级别level属性的数据类型为int,最大值为9。所以选择的数据类型为int8u。 “偏移值”是根据字段位置和字段的字节数的配置自动填充的。“level”字段的起始位置就是前一字段的终点,前一字段“messageId”的终点位置为1,所以“level”字段的起始位置为1。“level”字段长度为1个字节,终点为2。所以“偏移值”为1-2。 “长度”根据“数据类型”的配置自动填充。 “默认值”不填。此处火灾级别level不固定,无默认值。 图4 插件开发-添加字段level 添加temperature字段,表示温度。 “数据类型”,在产品模型中,temperature属性的“数据类型”为int,最大值1000,因此在插件中定义temperature字段的“数据类型”为“int16u”,以满足temperature属性的取值范围。 “偏移值”是根据与首字段的间隔的字符数自动配置的。“temperature”字段的起始位置就是前一字段的终点,前一字段“level”的终点位置为2,所以“temperature”字段的起始位置为2。“temperature”字段长度为2个字节,终点为4。所以“偏移值”为2-4。 “长度”根据数据类型的配置自动填充。 “默认值”不填,此处温度temperature的值不固定,无默认值。 图5 插件开发-添加字段temperature 单击“新增消息”,新增“SET_ALARM”消息,设置火灾告警的温度阈值。例如超过60摄氏度,设备上报告警。配置此步骤的主要目的是,将平台下发的JSON格式命令消息编码成二进制数据,以便烟感设备理解。配置示例如下: 消息名:SET_ALARM 消息类型:命令下发 添加响应字段:是。添加响应字段后,设备在接收命令后,可以上报命令执行结果。您可以根据自己的需求,选择是否添加响应字段。 图6 插件开发-新增消息SET_ALARM 单击“添加字段”,添加messageId字段,表示消息类型。例如,设置火灾告警阈值的消息类型为0x3。messageId、数据类型、长度、默认值、偏移值的说明可参考1。 图7 插件开发-添加命令字段messageId(0x3) 添加mid字段。这里的mid字段是由平台生成和下发的,用于将下发的命令和命令下发响应消息关联。mid字段的数据类型默认为int16u。长度、默认值、偏移值的说明可参考2。 图8 插件开发-添加命令字段mid 添加value字段,表示下发命令的参数值。例如,下发火灾告警的温度阈值。数据类型、长度、默认值、偏移值的说明可以参考2。 图9 插件开发-添加命令字段value 单击“添加响应字段”,添加“messageId”字段,表示消息类型。命令下发响应消息为上行消息,需要通过messageId和数据上报消息进行区分。上报火灾告警温度阈值的消息类型为0x4。messageId、数据类型、长度、默认值、偏移值的说明可参考1。 图10 插件开发-添加响应字段messageId(0x4) 添加mid字段。这里的mid字段需要跟平台下发的命令里的mid字段保持一致,用于将下发的命令和命令执行结果进行关联。mid字段的数据类型默认为int16u。长度、默认值、偏移值的说明可参考2。 图11 插件开发-添加响应字段mid 添加errcode字段,用于表示命令执行状态:00表示成功,01表示失败,如果未携带该字段,则默认命令执行成功。errcode字段的数据类型默认为int8u。长度、默认值、偏移值的说明可参考2。 图12 插件开发-添加响应字段errcode 添加result字段,用于表示命令执行结果。例如,设备向平台返回当前的告警阈值。 图13 插件开发-添加响应字段result 拖动右侧“设备模型”区域的属性字段和命令字段,数据上报消息和命令下发消息的相应字段建立映射关系。 图14 插件开发-在线开发插件smokerdetector 单击“保存”,并在插件保存成功后单击“部署”,将编解码插件部署到物联网平台。 图15 插件开发-部署插件 调测编解码插件 在烟感产品的开发空间,选择“在线调试”,并单击“新增测试设备”。 用户可根据自己的业务场景,选择使用真实设备或者虚拟设备进行调测。具体调测步骤请参考在线调试。本文以虚拟设备为例,调测编解码插件。 在弹出的“新增测试设备”窗口,选择“虚拟设备”,单击“确定”,创建一个虚拟设备。虚拟设备名称包含 “DeviceSimulator”字样,每款产品下只能创建一个虚拟设备。 图16 在线调试-创建虚拟设备 单击“调试”,进入调试界面。 图17 在线调试-进入调试 使用设备模拟器进行数据上报。十六进制码流示例:0008016B。00为地址域messageId,08表示火灾级别level,长度为1个字节;016B表示温度,长度为2个字节。 在“应用模拟器”区域查看数据上报的结果:{level=8, temperature=363}。8为十六进制数08转换为十进制的数值;363为十六进制数016B转换为十进制的数值。 在设备模拟器区域看到平台下发的响应数据AAAA0000。 图18 在线调试-模拟数据上报smokerdetector 使用应用模拟器进行命令下发,输入value值为1,可看到应用模拟下发命令{ "serviceId": "Smokeinfo", "method": "SET_ALARM", "paras": "{\"value\":1}" }。 在“设备模拟器”区域查看命令接收的结果:03000101。03为地址域messageId,0001为mid字段,01为十进制数1转换为十六进制的数值。 图19 在线调试-模拟命令下发smokerdetector 使用CoAP的虚拟设备在线调试时,若下发命令后设备模拟器未接收到对应的命令,可以先上报一次属性后,再下发。 总结 如果插件需要对命令执行结果进行解析,则必须在命令和命令响应中定义mid字段。 命令下发的mid是2个字节,对于每个设备来说,mid从1递增到65535,对应码流为0001到FFFF。 设备执行完命令,命令执行结果上报中的mid要与收到命令中的mid保持一致,这样平台才能刷新对应命令的状态。
  • 使用真实设备调测产品 当设备侧开发已经完成,但应用侧开发还未完成时,您可以创建真实设备,使用应用模拟器对设备、产品模型、插件等进行调测。真实设备调测界面结构为三个部分: 左侧应用模拟器展示区域:呈现应用服务器接收到的属性数据和下发的命令。 右侧应用模拟器区域:模拟应用下发命令。 下方消息跟踪区域:呈现设备接入,属性上报和命令下发时,平台的处理日志,帮助开发者进行问题的定界和定位。 图6 在线调试-真实设备结构 在烟感产品的开发空间,选择“在线调试”,并单击“新增测试设备”。 在弹出的“新增测试设备”窗口,选择“真实设备”,输入测试设备的参数,单击“确定”。 图7 在线调试-新增测试设备 注:如果使用DTLS传输层安全协议接入时,请妥善保存密钥。 新添加的设备处于未激活状态,此时不能进行在线调试,可参考连接鉴权,待设备接入平台后,进行调试。 单击“调试”,进入调试界面。 图8 在线调试-进入调试 模拟远程下发控制命令场景,在应用模拟器中,选择服务:StreetLight,命令:SWITCH_LIGHT,命令取值为:ON,单击“发送”,我们可以看到路灯被点亮。
  • 使用虚拟设备调测产品 当设备侧开发和应用侧开发均未完成时,开发者可以创建虚拟设备,使用应用模拟器和设备模拟器对产品模型、插件等进行调测。模拟设备调测界面分为四个部分 1. 左侧应用模拟器展示区域:呈现应用服务器接收到的属性数据和下发的命令。 2. 左侧设备模拟器展示区域:呈现设备上报的属性和接收到的命令。 3. 右侧应用模拟器和设备模拟器区域:模拟应用下发命令或设备上报属性。 4. 下方消息跟踪区域:呈现设备接入,属性上报和命令下发时,平台的处理日志,帮助开发者进行问题的定界和定位。 图1 在线调试-虚拟设备结构 在产品开发空间,选择“在线调测”,并单击“新增测试设备”。 在弹出的“新增测试设备”窗口,选择“虚拟设备”,单击“确定”,创建一个虚拟设备。虚拟设备名称包含 “DeviceSimulator”字样,每款产品下只能创建一个虚拟设备。 在设备列表中,选择新创建的虚拟设备, 图2 在线调试-创建虚拟设备 单击右侧的“调试”,进入调试界面。 图3 在线调试-进入调试 在“设备模拟器”区域,输入十六进制码流或者JSON数据(以十六进制码流为例),单击“发送”,在“应用模拟器”区域查看数据上报的结果,在“消息跟踪”区域查看物联网平台处理日志。 图4 在线调试-模拟数据上报smokeInfo 在“应用模拟器”区域进行命令下发,在“设备模拟器”区域查看接收到的命令(以十六进制码流为例),在“消息跟踪”区域查看物联网平台处理日志。 图5 在线调试-命令下发介绍
  • 创建产品 产品是设备的合集,您可以将相同能力或特征的设备归属在同一个产品下。 登录管理控制台,单击左侧导航栏“产品”,单击页面左侧的“创建产品”。 根据页面提示填写参数,然后单击“立即创建”。 图5 创建产品-MQTT 表1 创建产品基本信息 基本信息 所属资源空间 平台自动将新创建的产品归属在默认资源空间下。如需归属在其他资源空间下,下拉选择所属的资源空间。如无对应的资源空间,请先创建资源空间。 产品名称 自定义,如StudentCard。支持字母、数字、下划线(_)、连字符(-)的字符组合。 协议类型 选择MQTT。 数据格式 选择JSON。 设备类型选择 选择自定义类型。 设备类型 根据实际填写,例如StudentCard。
  • 开发产品模型 在产品详情“基本信息”页面,单击“自定义模型”,配置产品的服务。 图6 自定义模型-MQTT 新增服务类型“Location”。 在“新增服务”页面,填写“服务ID”、“服务类型”和“服务描述”,单击“确定”。 图7 添加服务-Location “服务ID”:Location “服务类型”:建议和服务ID保持一致 “服务描述”:设备上报的位置数据 在“Location”的下拉菜单下单击“添加属性”,填写相关信息后,单击“确定”。 图8 新增属性-longitude 图9 新增属性-latitude 单击添加命令,输入命令名称“FREQUENCY_LOCATION_SET”。 图10 新增命令-FREQUENCY_LOCATION_SET 在“新增命令”页面,单击“新增输入参数”,填写相关信息后,单击“确定”。 图11 新增命令参数-period
  • 获取网桥接入信息 代码调试时,需要获取对应的网桥接入信息,并配置到对应的环境变量中。网桥接入信息,环境变量配置参考: 图1 环境变量配置参考 NET_BRIDGE_ID与NET_BRIDGE_SECRET在标准版和企业版支持在界面配置和获取,获取方式如下: 进入泛协议接入页面:登录管理控制台,单击左侧导航栏“IoTDA实例”,选择对应实例,点击右侧“详情”进入实例,选择“泛协议接入”页签后,单击“新增网关”。 图2 泛协议-新增云网关(非托管) 输入网关名,单击“确定”,会弹出网桥创建成功界面,单击“保存并关闭”,获得NET_BRIDGE_SECRET值。 图3 泛协议-创建网桥成功 在界面中可以获取到NET_BRIDGE_ID。 图4 泛协议-获取网桥ID
  • 使用流程&操作步骤 图1 非$oc开头自定义topic通信 为了适配新老客户的使用,策略默认放通所有“非$oc开头的自定义Topic通信”。新增的资源空间会默认加入策略“system_default_policy”,system_default_policy策略会允许所有Topic的订阅与发布。当业务场景不适用时,可以删除该策略。 值得注意的是,策略只会限制“非$oc开头的自定义Topic通信”。“$oc开头的自定义Topic”权限由产品下的设定决定。 目前广州、北京四、上海局点不支持策略,可跳过策略(步骤2、3)、直接使用。
  • 业务流程 IoT Device SDK提供相关的接口,开发者调用这些接口网关实现与物联网平台的对接。不同语言的SDK的接口名称不一样,每个接口功能请参见IoT Device SDK使用指南(Java)、IoT Device SDK使用指南(C)、IoT Device SDK使用指南(C#)、IoT Device SDK使用指南(Android)、IoT Device SDK Tiny使用指南(C)。 表1 业务流程 应用侧管理子设备业务流程 网关管理子设备业务流程 图2 应用侧管理子设备流程图 图3 网关侧管理子设备流程图 1.在物联网平台上传网关的产品模型,并注册网关设备。 2.网关调用鉴权接口上线 3.在物联网平台上传子设备的产品模型。 4.网关鉴权成功后,应用调用添加子设备接口,填写设备相关信息(与产品模型定义一致)。添加成功后,您可以在物联网平台查看添加的子设备(如何查看?)。您也可以通过控制台添加子设备,详细请查看如何添加? 4.网关鉴权成功后,网关调用网关新增子设备请求接口,填写设备相关信息(与产品模型定义一致)。平台在处理完成后,将处理结果通过接口网关新增子设备请求响应发送给网关。 5.添加子设备后,子设备状态显示“未激活”。请在子设备添加成功后,或者子设备上报数据前,调用网关更新子设备状态接口进行设备状态更新。 说明: 子设备的状态表示子设备接入网关的状态,由网关上报到物联网平台进行状态的刷新;如果网关不能正常上报子设备的状态信息到物联网平台,则展示的子设备状态不会刷新。例如:某子设备通过网关接入到物联网平台,子设备状态为在线状态,如果此时网关与物联网平台断开连接,则网关不能上报子设备的状态到物联网平台,该子设备的状态会一直显示在线。 6.网关调用批量属性上报接口上报子设备的数据,接口里的参数填写网关和子设备的相关设备信息。 7.网关订阅命令下发Topic,接收并处理应用服务器或物联网平台下发的命令。 8.应用服务器调用删除设备接口,给网关下发删除子设备命令,网关收到该命令后,可以进行相应的业务处理。 8.网关调用网关删除子设备请求接口,平台收到后会进行数据处理,当处理完成后会通过接口网关删除子设备请求响应将结果发送给设备。
  • 概述 物联网平台设备分为直连设备和非直连设备。 直连设备:通过平台支持的协议,直接连接到平台的设备称为直连设备。平台支持直连的协议请参考概述中类型为通用协议,子类型为直连云端中的协议。 非直连设备:针对未实现TCP/IP协议栈的设备,由于无法直接同物联网平台通信,它需要通过网关进行数据转发。网关设备为直连设备,当前仅支持通过mqtt协议直连到平台的设备作为网关设备。 直连设备与非直连设备关系如下图: 图1 网关与子设备