文档首页> 设备接入 IoTDA> 最佳实践> 设备接入> 模拟NB设备智慧路灯的接入与调试
更新时间:2024-05-24 GMT+08:00

模拟NB设备智慧路灯的接入与调试

场景说明

本文以“智慧路灯”为示例,通过设备接入控制台提供的设备模拟器和应用模拟器替代真实的设备和应用,带您快速体验设备上报数据到物联网平台和远程下发控制命令到设备的全过程。

假设:

路灯设备上报一条数据消息,包含路灯的光照强度(light_intensity)和路灯的开关状态(light_status);支持远程控制路灯开关状态的命令(SWITCH_LIGHT),上报数据的格式为二进制格式。

前提条件

  • 已注册华为云官方账号。未注册可单击注册页面完成注册。
  • 已开通设备接入服务。未开通则访问设备接入服务,单击“立即使用”后开通该服务。

(可选)创建资源空间

资源空间是物联网平台提供物联网应用和设备的调测空间,您可以根据场景的不同创建不同资源空间分别调测。

系统为您预置了一个资源空间,您可以直接在预置的资源空间下,在线开发设备的产品模型文件和编解码插件;也可以新建一个资源空间,具体步骤如下。

  1. 访问设备接入服务,单击“立即使用”进入设备接入控制台。
  2. 选择左侧导航栏的“资源空间”,单击右上角“新建资源空间”。
  3. 在弹出的页面填写“空间名称”,然后单击“确定”。

创建产品

基于开发的产品,用户可以在线开发设备的产品模型文件和编解码插件;另外,物联网平台提供了设备和应用模拟器,可以便捷地调测开发的产品模型文件和编解码插件的正确性。

  1. 访问设备接入服务,单击“立即使用”进入设备接入控制台。
  2. 选择左侧导航栏的“产品”

    图1 产品-创建产品

  3. 单击左侧的“创建产品”,创建一个基于LwM2M/CoAP协议的产品,填写参数后,单击“确定”

    图2 创建产品-CoAP

    基本信息

    所属资源空间

    选择新建产品所属的资源空间。

    产品名称

    自定义,如Test_1。

    协议类型

    选择“LwM2M/CoAP”。

    数据格式

    选择“二进制码流”。

    说明:

    当“数据格式”配置为“二进制码流”时,该产品下需要进行编解码插件开发;当“数据格式”配置为“JSON”时,该产品下不需要进行编解码插件开发。

    所属行业

    设备类型

    streetlamp

定义产品模型

  1. 找到步骤3创建的产品,单击产品进入产品界面。
  2. 在产品详情模型定义页面,单击“自定义模型”,配置产品的服务,然后单击“确定”。

    • “服务ID”:StreetLight
    • “服务类型”:建议和服务ID保持一致
    • “服务描述”:路灯上报的环境光强度和路灯开关状态的属性。

  3. 单击步骤2新增的服务ID,在展开的页面单击“添加属性”,定义一条属性为路灯采集的当前环境的光照强度。

    • “属性名称”:light_intensity
    • “数据类型”:int(整型)
    • “访问权限”:可读、可写
    • “取值范围”:0~100,光照强度范围。
    图3 新增属性-light_intensity

  4. 单击“添加属性”,定义一条属性为路灯当前的开关灯状态。

    • “属性名称”:light_status
    • “数据类型”:int(整型)
    • “访问权限”:可读、可写
    • “取值范围”:0~1,0代表关闭,1代表打开状态
    图4 添加属性-light_status

  5. 接下来定义远程控制开关灯状态的命令。

    1. 单击“添加命令”,定义命令名称:SWITCH_LIGHT。
    2. 单击“新增输入参数”,参数名称:SWITCH_LIGHT,数据类型为:string,长度为:3个字符,枚举值为:ON,OFF。
      图5 新增命令参数-SWITCH_LIGHT
    3. 单击“新增响应参数”,参数名称:result,数据类型:int。
    图6 新增响应参数-result

  6. 单击“确定”,完成该路灯的产品模型文件开发。

在线开发插件

通常情况下设备为了省电,设备会采用“二进制”格式上报数据,编解码插件的作用就是将设备上报的“二进制”格式数据,按照产品模型文件的定义的属性转换为“JSON”格式数据,便于物联网平台和应用服务器识别。同时,用户远程下发控制命令时,物联网平台会将“JSON”格式的命令转换为“二进制”格式数据下发给设备。

如果设备本身上报的是JSON格式数据,则不需要定义编解码插件。

  1. 在智慧路灯产品的开发空间,选择“插件开发”,单击“图形化开发”。
  2. 单击“新增消息”,配置数据上报消息,上报路灯的数据消息。

    • 消息名:LightData
    • 消息类型:数据上报
    • 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会下发用户设置的响应数据到设备。
    • 响应数据:AAAA0000(默认)
    图7 插件开发-新增消息
    1. 单击“添加字段”,添加messageId字段,表示消息种类。
      图8 插件开发-添加字段messageId
    2. 添加LightIntensity字段,表示光照强度,数据类型:int8u(8位无符号整型),长度:1字节。
      图9 插件开发-添加字段LightIntensity
    3. 添加LightStatus字段,表示路灯上报的路灯开关状态数据。数据类型:int8u(8位无符号整型),长度:1字节。
      图10 插件开发-添加字段LightStatus

  3. 再次单击“新增消息”,定义远程控制路灯开关的命令对应的编解码插件消息。

    • 消息名:SwitchStatus
    • 消息类型:命令下发
    • 添加响应字段:是。添加响应字段后,设备在接收命令后,会上报命令执行结果。
    图11 插件开发-新增消息SwitchStatus
    1. 单击“添加字段”,添加messageId字段,表示消息种类。
      图12 插件开发-添加字段messageId
    2. 添加mid字段,用于将下发的命令和命令执行结果进行关联。
      图13 插件开发-添加命令字段mid
    3. 添加SwitchStatus字段,数据类型:string(字符串类型),长度:3字符。
      图14 插件开发-添加命令字段SwitchStatus
    4. 单击“添加响应字段”,配置命令下发响应消息。
      • 添加messageId,表示消息种类。命令执行结果为上行消息,需要通过messageId和数据上报消息进行区分。
        图15 插件开发-添加响应字段messageId
      • 添加mid字段,用于将下发的命令和命令执行结果进行关联。
        图16 插件开发-添加响应字段mid

      • 添加errcode字段,用于表示命令执行状态:00表示成功,01表示失败,如果未携带该字段,则默认命令执行成功。
        图17 插件开发-添加响应字段errcode
      • 添加result字段,用于表示命令执行结果。
        图18 插件开发-添加响应字段result

  4. 拖动右侧“设备模型”区域的属性字段和命令字段(产品模型文件定义的字段),与编解码插件定义的数据上报消息和命令下发消息的相应字段建立映射关系。

    图19 插件开发-在线开发插件

  5. 编解码插件与产品模型文件建立映射完成后,单击右上角“保存”,并单击“部署”,完成编解码插件的部署。

使用真实设备在线调试

模拟器在线调测具备设备模拟和应用模拟功能,可以对定义的产品模型文件和编解码插件进行调试,用户可以直观的感受设备上报数据到物联网平台,以及使用物联网平台下发远程控制命令。

  1. 在智慧路灯产品的开发空间,选择“在线调试”,单击“新增测试设备”。
  2. 在新增测试设备页面,完成设备参数的填写后,单击“确定”

    • 设备类型:真实设备。
    • 设备名称:自定义。
    • 设备标识码:设备的IMEI号,用于设备在接入物联网平台时携带该标识信息完成接入鉴权,可在NB模组上查看。
    • 设备注册方式:不加密。如果使用DTLS传输层安全协议接入时,设备注册方式选择“加密”,且请妥善保存密钥。
    图20 在线调试-新增测试设备

    新添加的设备处于未激活状态,此时不能进行在线调试,可参考连接鉴权,待设备接入平台后,进行调试。

  3. 单击“调试”,进入调试界面。

    图21 在线调试-进入调试

  4. 模拟远程下发控制命令场景,在应用模拟器中,选择服务:StreetLight,命令:SWITCH_LIGHT,命令取值为:ON,单击“立即发送”,我们可以看到路灯被点亮。

使用虚拟设备在线调试

  1. 在智慧路灯产品的开发空间,选择“在线调试”,单击“新增测试设备”。
  2. 在新增测试设备页面,选择“模拟设备”,然后单击“确定”,创建一个虚拟设备。虚拟设备名称包含 “Simulator”字样,每款产品下只能创建一个虚拟设备。

    图22 在线调试-创建虚拟设备

  3. 单击“调试”,进入调试界面。

    图23 在线调试-进入调试

  4. 模拟设备数据上报场景,在设备模拟器中,输入十六进制码流:002000(00为地址域meaasgeID,长度为1个字节;20表示光照强度,长度为1个字节;00表示路灯开关状态为关闭状态,长度为1个字节),然后单击“发送”,我们可以在应用模拟器中看到转换为JSON格式的数据为:"Light_Intensity":32, "Light_Status":0。

    图24 在线调试-模拟数据上报

  5. 模拟远程下发控制命令场景,在应用模拟器中,选择服务:StreetLight,命令:SWITCH_LIGHT,命令取值为:ON,单击“立即发送”,我们可以在设备模拟器中看到转换为十六进制的码流:0100014F4E(经ASCLL码转为为十六进制)。

    图25 在线调试-模拟命令下发

使用离线模拟器调试

NB-IoT设备模拟器用于模拟以LwM2M/CoAP协议接入物联网平台的NB设备,实现数据上报和命令下发功能。

  1. 获取2中注册设备时的设备标识码,密钥。
  2. 下载并解压NB-IoT设备模拟器,然后双击“NB-IoTDeviceSimulator_zh.jar”,运行模拟器。

    • 推荐在Windows系统下运行,暂不支持MAC OS。
    • 请确保已经安装jdk,否则,无法运行jar文件。

    NB-IoT设备模拟器的文件说明如下:

    • NB-IoTDeviceSimulator_zh.jar:中文版模拟器。
    • Californium.properties:模拟器的配置文件。
    • setting.properties:设备模拟器接入物联网平台的配置文件。

  3. 模拟器启动后,会提示“是否开启DTLS加密传输?”。若注册设备时,没有填写密钥,单击“否”,若注册设备时,已填写密钥,单击“是”。

  4. 填写“IP地址”“VerifyCode”“PSK”,单击“注册设备”,将模拟器与物联网平台进行绑定。

    :如果未开启DTLS加密传输,则无需填写密钥。

    如下信息根据实际情况填写:
    • IP地址:物联网平台的接入域名(也可以使用IP,通过ping命令“ping 域名”可以获得IP地址)。
    • VerifyCode:设备标识码,如:aaaaa11111。
    • PSK:注册设备时预置的密钥,如:aaaaa11111aaaaa。

    设备绑定成功,可以回到管理控制台,选择设备 > 所有设备,看见设备“aaaaa11111”显示“在线”,表示模拟器绑定成功。

  5. 模拟设备数据上报场景,则在NB-IoT设备模拟器中,输入十六进制码流:001400(00为地址域meaasgeID,长度为1个字节;14表示光照强度,长度为1个字节;00表示路灯开关状态为关闭状态,长度为1个字节),然后单击“发送数据”

    数据上报成功,可以回到管理控制台,在“aaaaa11111”设备详情页面中查看到最新上报数据为:"Light_Intensity": 20, "Light_Status": 0。

  6. 模拟远程下发控制命令场景,在管理控制台,找到对应的产品,单击产品进入产品界面,选择“在线调试”页签,单击设备“aaaaa11111”右边的“调试”,进入调试界面。

    在应用模拟器中,选择服务:StreetLight,命令:SWITCH_LIGHT,命令取值为:ON,单击“立即发送”

    我们可以在“日志”栏看到CIG下发的数据内容:ON,且模拟器会提示“收到平台的下行消息,是否应答?”,单击“是”,可以在管理控制台的应用模拟器看到命令状态为“已送达”

    由于插件中的string类型是按照ascii码解析的,因此需要下发可显示字符,非可显示字符在模拟器中不会显示。