• 沒有找到結果。

开发编解码插件_设备接入 IoTDA_开发指南_产品开发_华为云

N/A
N/A
Protected

Academic year: 2022

Share "开发编解码插件_设备接入 IoTDA_开发指南_产品开发_华为云"

Copied!
263
0
0

加載中.... (立即查看全文)

全文

(1)

开发指南

文档版本 46

发布日期 2021-07-05

(2)

版权所有 © 华为技术有限公司 2022。 保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传 播。

商标声明

和其他华为商标均为华为技术有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

您购买的产品、服务或特性等应受华为公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或 特性可能不在您的购买或使用范围之内。除非合同另有约定,华为公司对本文档内容不做任何明示或暗示的声 明或保证。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文 档中的所有陈述、信息和建议不构成任何明示或暗示的担保。

(3)

目 录

1 开发前必读... 1

2 资源获取...3

3 产品开发...8

3.1 产品开发指引... 8

3.2 创建产品... 10

3.3 开发产品模型...11

3.3.1 什么是产品模型...11

3.3.2 在线开发产品模型... 13

3.3.3 离线开发产品模型... 16

3.3.4 导出和导入产品模型... 28

3.4 开发编解码插件... 29

3.4.1 什么是编解码插件... 29

3.4.2 图形化开发插件...31

3.4.3 使用 JavaScript 开发插件... 70

3.4.4 离线开发插件... 85

3.4.5 下载和上传插件... 108

3.5 在线调试... 109

4 设备侧开发... 113

4.1 设备接入指引... 113

4.2 使用 IoT Device SDK 接入...114

4.2.1 IoT Device SDK 介绍... 114

4.2.2 IoT Device SDK 使用指南(Java)... 117

(4)

4.3.5 Android Demo 使用说明...158

4.3.6 C Demo 使用说明... 168

4.3.7 C# Demo 使用说明...174

4.3.8 NodeJS Demo 使用说明...183

4.3.9 MQTT over WebSocket 使用说明...188

4.4 通过华为认证模组接入...192

5 应用侧开发... 201

5.1 API 使用指导... 201

5.2 订阅推送... 204

5.2.1 订阅推送方式概述... 204

5.2.2 使用 HTTP/HTTPS 订阅推送... 205

5.2.3 使用 AMQP 订阅推送...211

5.2.3.1 AMQP 订阅推送... 211

5.2.3.2 配置 AMQP 服务端订阅... 212

5.2.3.3 AMQP 客户端接入说明... 214

5.2.3.4 Java SDK 接入示例... 216

5.2.3.5 Node.js SDK 接入示例... 222

5.2.3.6 C# SDK 接入示例... 223

5.2.3.7 Android SDK 接入示例... 226

5.3 Java Demo 使用说明... 227

5.4 使用 Postman 调测... 240 设备接入

开发指南 目 录

(5)

1 开发前必读

方案概述

基于IoT平台去实现一个物联网解决方案时,需完成的详细操作如下:

开发操作 开发说明

产品开发 主要呈现物联网平台的界面查询与操作,包括产品管理、产品模 型开发、插件开发、在线调试等。

应用侧的开发 主要为业务应用与物联网平台的集成对接开发,包括API接口调

用、业务数据获取和HTTPS证书管理。

设备侧的开发 主要为设备与物联网平台的集成对接开发,包括设备接入物联网

平台、业务数据上报和对平台下发控制命令的处理。

业务概览

开通设备接入服务后,使用设备接入服务的完整流程如下图所示,主要分为产品开 发、应用侧开发、设备侧开发和日常管理。

● 产品开发:开发者在进行设备接入前,基于控制台进行相应的开发工作,包括创 建产品、创建设备、在线开发产品模型、在线开发插件、在线调试、自助测试和 发布产品。其中自助测试和发布产品暂未上线。

● 应用侧开发:通过API的形式对外开放物联网平台丰富的设备管理能力,应用开发 人员基于API接口开发所需的行业应用,如智慧城市、智慧园区、智慧工业、车联

(6)

1-1 流程图 设备接入

开发指南 1 开发前必读

(7)

2 资源获取

平台对接信息

请进入IoTDA的控制台界面,在左侧菜单栏的上方“默认” 按钮处切换对应的实例进 行获取。

2-1 进入控制台,选择左侧导航栏“总览”,单击“平台接入地址”。

2-2 根据相应的接入类型和协议选择对应的接入地址。

(8)

资源包名 描述 下载路径 IoT Device SDK(Java) 设备可以通过集成IoT

Device SDK(Java)接入物 联网平台, Demo提供了调 用SDK接口的样例代码。

使用指导请参考

IoT Device SDK使用指南

(Java)。

IoT Device SDK(Java)

IoT Device SDK(C) 设备可以通过集成IoT Device SDK(C)接入物联 网平台, Demo提供了调用 SDK接口的样例代码。使 用指导请参考

IoT Device SDK(C)使用 指南。

IoT Device SDK(C)

IoT Device SDK(C#) 设备可以通过集成IoT Device SDK(C#)接入物联 网平台, Demo提供了调用 SDK接口的样例代码。使 用指导请参考

IoT Device SDK(C#)使用 指南。

IoT Device SDK(C#)

IoT Device SDK(Android) 设备可以通过集成IoT Device SDK(Android)接 入物联网平台, Demo提供 了调用SDK接口的样例代 码。使用指导请参考 IoT Device

SDK(Android)使用指 南。

IoT Device SDK(Android)

IoT Device SDK(Go) 设备可以通过集成IoT Device SDK(Go)接入物联 网平台, Demo提供了调用 SDK接口的样例代码。使 用指导请参考

IoT Device SDK(Go)使用 指南。

IoT Device SDK(Go)

IoT Device SDK Tiny (C) 设备可以通过集成IoT Device SDK Tiny (C)接入 物联网平台, Demo提供了 调用SDK接口的样例代 码。使用指导请参考 IoT Device Tiny SDK(C) 使用指南

IoT Device SDK Tiny (C) 设备接入

开发指南 2 资源获取

(9)

资源包名 描述 下载路径 原生MQTT/MQTTS协议接

入示例

设备侧可以通过原生 MQTT/MQTTS协议接入到 物联网平台,Demo提供 了SSL加密建链和TCP不加 密建链、数据上报、订阅 Topic的样例代码。

接入示例参考:Java版、

Python版、Android版、

C版、C#、NodeJS。

quickStart(Java) quickStart(Android) quickStart(Python) quickStart(C) quickStart(C#) quickStart(Node.js)

产品模型模板 产品模型模板中包含了典

型场景的产品模型样例,

开发者可以在模板基础进 行修改,定义自己需要的 产品模型。

使用指导可以参考离线开 发产品模型。

产品模型开发示例

编解码插件样例 编解码插件的代码样例工 程,开发者可以基于该样 例工程进行二次开发。

使用指导可以参考离线开 发插件。

编解码插件开发样例

编解码插件检测工具 用于检测离线开发的编解 码插件的编解码能力是否 正常。

编解码插件检测工具

NB-IoT设备模拟器 用于模拟以CoAP/

LWM2M协议接入物联网 平台的NB设备,实现数据 上报和命令下发功能。

使用指导可以参考基于控 制台开发产品。

NB-IoT设备模拟器

IoT Link Studio(原名为

IoT Studio) IoT Link Studio是针对IoT 物联网端侧开发(IoT Device SDK Tiny)的IDE 环境,提供了编译、烧 录、调试等一站式开发体

IoT Link Studio

(10)

应用开发资源

为了降低应用的开发难度、提升开发效率,物联网平台开放了应用侧API。应用通过调 用物联网平台的API,实现安全接入、设备管理、数据采集、命令下发等业务场景。

资源包名 描述 下载

应用侧开发 API Java

Demo 物联网平台为应用服务器

提供了应用侧API,能够 让开发者快速验证API开放 的能力,体验业务功能,

熟悉业务流程。

使用指南可以参考Java Demo使用说明。

API Java Demo

应用侧开发 Java SDK Java SDK提供Java方法调 用应用侧API与平台通 信。使用指南可以参考 Java SDK使用指南。

Java SDK

应用侧开发 C# SDK C# SDK提供C#方法调用 应用侧API与平台通信。

使用指南可以参考C# SDK 使用指南。

C# SDK

应用侧开发 Python SDK Python SDK提供Python方 法调用应用侧API与平台 通信。使用指南可以参考 Python SDK使用指南。

Python SDK

应用侧开发 Go SDK Go SDK提供Go方法调用 应用侧API与平台通信。

使用指南可以参考Go SDK使用指南。

Go SDK

应用侧开发 Node.js SDK Node.js SDK提供Node.js 方法调用应用侧API与平 台通信。使用指南可以参 考Node.js SDK使用指 南。

Node.js SDK

应用侧开发 PHP SDK PHP SDK提供PHP方法调 用应用侧API与平台通 信。使用指南可以参考 PHP SDK使用指南。

PHP SDK

证书资源

在设备和对接物联网平台的部分场景中,需要在设备侧集成相应证书。

说明

此证书文件只适用于华为云物联网平台,且必须配合设备侧接入域名使用。

设备接入

开发指南 2 资源获取

(11)

证书类型,证书格式,以及用途详见下表。

证书包名称 证书类 型

证书格式 说明 下载

certificate

(北京四基础 版)

设备侧

证书 pem、

jks、bks 用于设备校验平台的身 份。该证书必须配合当前 设备侧接入域名使用。

注:之前的老域名(iot- acc.cn-

north-4.myhuaweicloud.c om)必须要配合老证书使 用。

证书文件

certificate

(北京四标准 版)

设备侧 证书

pem、jks、bks 用于设备校验平台的身 份。该证书必须配合当前 设备侧接入域名使用。

证书文件

certificate

(上海一标准 版)

设备侧

证书 pem、

jks、bks 用于设备校验平台的身 份。该证书必须配合当前 设备侧接入域名使用。

证书文件

certificate(北

京四) 应用侧

证书 pem 用于订阅推送场景,应用 侧校验平台的身份。

证书文件

certificate

(设备发放)

设备侧

证书 pem、

jks、bks 用于设备校验平台(设备 发放)的身份。该证书必 须配合设备发放使用。

证书文件

(12)

3 产品开发

产品开发指引 创建产品 开发产品模型 开发编解码插件 在线调试

3.1 产品开发指引

在物联网平台集成解决方案中,物联网平台作为承上启下的中间部分,向应用服务器 开放API接口,向各种协议的设备提供API对接。为了提供更加丰富的设备管理能力,

物联网平台需要理解接入设备具备的能力以及设备上报数据的格式,因此,您需要在 控制台上完成产品模型和插件的开发。

● 产品模型是用来描述设备能力的文件,通过JSON的格式定义了设备的基本属性、

上报数据和下发命令的消息格式。定义产品模型,即在物联网平台构建一款设备 的抽象模型,使平台理解该款设备支持的属性信息。

● 编解码插件主要根据设备上报数据的格式来判断是否需要开发。如果设备上报的

“数据格式”为“二进制码流”,则该产品下需要进行编解码插件开发;如果

“数据格式”为“JSON”,则该产品下不需要进行编解码插件开发。编解码插件 是供物联网平台调用,完成二进制格式和JSON格式相互转换的。它将设备上报的 二进制数据解码为JSON格式供应用服务器“阅读”,将应用服务器下行的JSON 格式命令编码为二进制格式数据供终端设备(UE)“理解执行”。

设备接入

开发指南 3 产品开发

(13)

产品开发流程

设备接入控制台提供了一站式开发工具,帮助开发者快速开发产品(产品模型、编解 码插件),并进行自助测试。

(14)

● 开发插件:如果设备上报的数据是二进制码流格式,就需要开发对应的插件,用 于物联网平台完成二进制格式和JSON格式的转换;如果设备上报的是JSON格式 数据,则不需要开发插件。

● 在线调试:设备接入控制台提供了产品在线调试的功能,您可以根据自己的业务 场景,在开发真实应用和真实设备之前,使用应用模拟器和设备模拟器对数据上 报和命令下发等场景进行调测,也可以在真实设备开发完成后使用应用模拟器验 证业务流。

3.2 创建产品

在物联网平台中,某一类具有相同能力或特征的设备的合集被称为一款产品。

操作步骤

步骤1 访问设备接入服务,单击“立即使用”进入设备接入控制台。

步骤2 单击左侧导航栏“产品”,单击页面右上角的“创建产品”。根据页面提示填写参 数,然后单击“确定”,完成产品的创建。

基本信息 所属资源空 间

平台自动将新创建的产品归属在默认资源空间下。如需归属在其他 资源空间下,下拉选择所属的资源空间。如无对应的资源空间,请 先创建资源空间。

产品名称 为产品命名。产品名称在账号内具有唯一性。支持字母、数字、下 划线(_)、连字符(-)的字符组合。

协议类型 ● MQTT:使用MQTT协议接入平台的设备,数据格式可以是二进 制也可以是JSON格式,采用二进制时需要部署编解码插件。

● LwM2M/CoAP:使用在资源受限(包括存储、功耗等)的NB- IoT设备,数据格式是二进制,需要部署编解码插件才能与物联网 平台交互。

● Modbus:物联网平台支持使用Modbus协议接入,使用Modbus 协议的设备接入IoT边缘节点的方式为非直连。直连设备和非直连 设备差异说明,请参考这里。

数据格式 ● JSON:平台和设备之间的通信协议采用JSON格式。

● 二进制码流:您需在控制台开发编解码插件,将设备上报的二进 制码流数据转换为JSON格式;将平台下发的JSON格式数据解析 为二进制码流格式,设备才能与平台进行通信。

厂商名称 设备所属的厂商名称。支持中英文字符、数字、下划线(_)、连字 符(-)的字符组合。

所属行业 请根据实际情况填写。若使用平台预置的产品模型,请根据产品模 型所属的行业填写。

设备类型 请根据实际情况填写。若使用平台预置的产品模型,会自动关联设 备类型,不需要再输入设备类型。

高级配置 设备接入

开发指南 3 产品开发

(15)

产品ID 定制ProductID,用于唯一标识一个产品。如果携带此参数,平台将 产品ID设置为该参数值;如果不携带此参数,产品ID在物联网平台 创建产品后由平台分配获得。

产品描述 产品描述。请根据实际情况填写。

产品创建成功后,您可以单击“删除”删除不再使用的产品。删除产品后,该产品下 的产品模型、编解码插件等资源将被清空,请谨慎操作。

----结束

后续步骤

1. 在产品列表中,单击对应的产品,进入产品详情页。您可以查看产品ID、产品名 称、设备类型、数据格式、厂商名称、所属资源空间、协议类型等产品基本信 息。其中产品ID(product Id)是物联网平台自动生成的,其余信息均是由用户创 建产品时自定义。

2. 您可以在产品详情页,开发产品模型、开发编解码插件、在线调试、自定义 Topic。

3.3 开发产品模型

3.3.1 什么是产品模型

产品模型用于描述设备具备的能力和特性。开发者通过定义产品模型,在物联网平台 构建一款设备的抽象模型,使平台理解该款设备支持的服务、属性、命令等信息,如 颜色、开关等。当定义完一款产品模型后,在进行注册设备时,就可以使用在控制台 上定义的产品模型。

(16)

产品模型包括产品信息和服务能力:

● 产品信息

描述一款设备的基本信息,包括厂商ID、厂商名称、设备类型、协议类型。

例如:水表的厂商名称为“HZYB”,厂商ID为“TestUtf8ManuId”,设备类型 为“WaterMeter”,协议类型为“CoAP”。

● 服务能力

描述设备具备的业务能力。将设备业务能力拆分成若干个服务后,再定义每个服 务具备的属性、命令以及命令的参数。

以水表为例,水表具有多种能力,如上报水流、告警、电量、连接等各种数据,

并且能够接受服务器下发的各种命令。产品模型文件在描述水表的能力时,可以 将水表的能力划分五个服务,每个服务都需要定义各自的上报属性或命令。说明 如下:

服务类型 描述

基础(WaterMeterBasi c)

用于定义水表上报的水流量、水温、水压等参数,如果需 要命令控制或修改这些参数,还需要定义命令的参数。

告警(WaterMeterAlar m)

用于定义水表需要上报的各种告警场景的数据,必要的话 需要定义命令。

电池(Battery) 定义水表的电压、电流强度等数据。

传输规则(DeliverySchedul e)

定义水表的一些传输规则,必要的话需要定义命令。

连接(Connectivity) 定义水表连接参数。

注:具体定义几个服务是非常灵活的,如上面的例子可以将告警服务拆分成水压 告警服务和流量告警服务,也可以将告警服务合入到水表基础服务中。

物联网平台提供了多种定义产品模型的方法,您可以根据自己需求,选择对应的方法 定义产品模型。

● 自定义模型(在线开发):从零自定义构建产品模型,详细请参考在线开发产品 模型。

● 上传模型文件(离线开发):将本地写好的产品模型上传到平台,详细请参考离 线开发产品模型。

Excel导入:通过导入文件的方式快速定义产品功能。对于开发者来说,降低产品 模型开发门槛,只需根据表格填写参数;对于高阶开发者和集成商来说,提升行 业复杂模型开发效率。例如,楼宇自控空调模型包含的service条目超过100条,在 表格中编辑开发产品模型,效率大大提升,可以随时编辑调整参数。详细请参考 Excel导入。

● 导入库模型(平台预置产品模型):您可以使用平台预置的产品模型,快速完成 产品开发。当前平台提供了标准模型和厂商模型。标准模型遵循行业标准的产品 模型,适用行业内绝大部分厂商设备,而厂商模型针对设备类型发布的产品模 型,适用于用行业内少量厂家设备。您可以根据实际需求选择相应的产品模型。

设备接入

开发指南 3 产品开发

(17)

3.3.2 在线开发产品模型

概述

在线开发产品模型前需要创建产品。创建产品需要输入产品名称、厂商名称、所属行 业、设备类型等信息,产品模型会使用这些信息作为设备能力字段取值。物联网平台 提供了标准模型和厂商模型,这些模型涉及多个领域,模型中提供了已经编辑好的产 品模型文件,您可以根据自己的需要对产品模型中的字段进行修改和增删;如果选择 自定义产品模型,则需要完整定义产品模型。

本节定义包含一个服务的产品模型为示例,该产品模型包含设备上报数据、下发命 令、下发命令响应等场景的服务和字段。

操作步骤

步骤1 访问设备接入服务,单击“立即使用”进入“设备接入”控制台。

步骤2 单击左侧导航栏的“产品”,在产品列表中,找到对应的产品,单击产品进入产品详 情页。

步骤3 在产品详情模型定义页面,单击“自定义模型”,添加服务。

步骤4 输入“服务ID”、“服务类型”和“服务描述”,然后单击“确认”。

● “服务ID”:采用首字母大写的命名方式。比如:WaterMeter、StreetLight。

● “服务类型”:建议和服务ID保持一致。

● “服务描述”:比如路灯上报的环境光强度和路灯开关状态的属性。

添加服务后,在“添加服务”区域,对属性和命令进行定义。每个服务下,可以包含 属性和命令,也可以只包含其中之一,请根据此类设备的实际情况进行配置。

步骤5 单击步骤4新增的服务ID,在展开的页面单击单击“新增属性”,在弹出窗口中配置属 性的各项参数,然后单击“确定”。

参数 说明

属性名称 建议采用驼峰形式,如batteryLevel、internalTemperature。

是否必选 建议勾选。

数据类型 ● int:当上报的数据为整数或布尔值时,可配置为此类型。

● decimal:当上报的数据为小数时,可配置为此类型。配置

“经纬度”属性时,数据类型建议使用“decimal”。

(18)

参数 说明 步长

单位

步骤6 单击“添加命令”,在弹出窗口中配置命令。

● “命令名称”:首位必须为字母,建议采用全大写形式,单词间用下划线连接的 命名方式,如DISCOVERY,CHANGE_STATUS。

● “配置下发参数”:单击“新增输入参数”,在弹出窗口中配置下发命令字段的 各项参数,然后“确定”。

参数 说明

参数名称 首位必须为字母,建议采用第一个单词首字母小写,其余单词 的首字母大写的命名方式,比如valueChange

必选 建议勾选。

数据类型 请根据此类设备的实际情况进行配置。

取值范围 步长 设备接入

开发指南 3 产品开发

(19)

参数 说明 单位

● 如果要添加命令响应,单击“新增响应参数”,在弹出窗口中配置响应命令字段 的各项参数,然后单击“确定”。

参数 说明

参数名称 首位必须为字母,建议采用第一个单词首字母小写,其余单词 的首字母大写的命名方式,比如valueResult

必选 建议勾选。

(20)

----结束

3.3.3 离线开发产品模型

概述

产品模型本质上就是一个devicetype-capability.json文件和若干个serviceType- capability.json文件,按照如下目录打包的一个zip包。其中WaterMeter是 deviceType,TestUtf8Manuld是manufactureId,WaterMeterBasic/

WaterMeterAlarm/Battery是服务类型。

设备接入

开发指南 3 产品开发

(21)

所以离线开发产品模型就是按照产品模型编写规则和JSON格式规范在devicetype- capability.json中定义设备能力,在servicetype-capability.json中定义服务能力。因此 离线开发产品模型需要熟悉JSON的格式。

由于离线开发产品模型文件相对在线开发比较耗时,因此推荐在线开发产品模型。

命名规范

在产品模型的开发过程中,需要遵循如下命名规范:

● 设备类型(deviceType)、服务类型(serviceType)、服务标识(serviceId)采 用单词首字母大写的命名法。例如:WaterMeter、Battery。

● 属性使用第一个单词首字母小写,其余单词的首字母大写的命名法。例如:

batteryLevel、internalTemperature。

● 命令使用所有字母大写,单词间用下划线连接的格式。例如:DISCOVERY,

CHANGE_COLOR。

(22)

提供的设备产品模型模板中包含,则可以直接选择使用;如果在物联网平台提供的设 备产品模型模板中未包含,则需要自己定义。

例如:接入一款水表 ,可以直接选择物联网平台上对应的产品模型模板,修改设备服 务列表。

说明

物联网平台提供的产品模型模板会不断更新,如下表格列举设备类型和服务类型示例,仅供参 考。

设备类型识别属性:

属性 产品模型中key 属性值

设备类型 deviceType WaterMeter 厂商ID manufacturerId TestUtf8ManuId 厂商名称 manufacturerName HZYB

协议类型 protocolType CoAP

设备的服务列表

服务描述 服务标识

(serviceId) 服务类型

(serviceType) 选项(option)

水表的基本功能 WaterMeterBasic Water Mandatory 告警服务 WaterMeterAlarm Battery Mandatory 电池服务 Battery Battery Optional 数据的上报规则 DeliverySchedule DeliverySchedule Mandatory 水表的连通性 Connectivity Connectivity Mandatory

设备能力定义样例

devicetype-capability.json记录了该设备的基础信息:

{ "devices": [ {

"manufacturerId": "TestUtf8ManuId", "manufacturerName": "HZYB", "protocolType": "CoAP", "deviceType": "WaterMeter", "omCapability":{

"upgradeCapability" : { "supportUpgrade":true, "upgradeProtocolType":"PCP"

},

"fwUpgradeCapability" : { "supportUpgrade":true, "upgradeProtocolType":"LWM2M"

设备接入

开发指南 3 产品开发

(23)

},

"configCapability" : { "supportConfig":true, "configMethod":"file", "defaultConfigFile": { "waterMeterInfo" : {

"waterMeterPirTime" : "300"

} } } },

"serviceTypeCapabilities": [ {

"serviceId": "WaterMeterBasic", "serviceType": "WaterMeterBasic", "option": "Mandatory"

}, {

"serviceId": "WaterMeterAlarm", "serviceType": "WaterMeterAlarm", "option": "Mandatory"

}, {

"serviceId": "Battery", "serviceType": "Battery", "option": "Optional"

}, {

"serviceId": "DeliverySchedule", "serviceType": "DeliverySchedule", "option": "Mandatory"

}, {

"serviceId": "Connectivity", "serviceType": "Connectivity", "option": "Mandatory"

} ] } ] }

各字段的解释:

字段 子字段 可选/必选 描述

devices - - 必选 包含了一个设备的完整能力信息(根节 点不能修改)。

- manufactur

erId - 可选 指示设备的制造商ID。

- manufactur - 指示设备的制造商名称 (只允许英

(24)

字段 子字段 可选/必选 描述 - omCapabili

ty - 可选 定义设备的软件升级、固件升级和配置

更新的能力,字段含义详情见下文中 的:omCapability结构描述。

如果设备不涉及软件/固件升级,本字 段可以删除。

- serviceType

Capabilities - 必选 包含了设备具备的服务能力描述。

- - servic

eId 必选 服务的Id,如果设备中同类型的服务类 型只有一个则serviceId与serviceType相 同, 如果有多个则增加编号,如三键 开关 Switch01、Switch02、

Switch03。

- - servic

eType 必选 服务类型,与servicetype-

capability.json中serviceType字段保持 一致。

- - optio

n 必选 标识服务字段的类型,取值范围:

Master(主服务), Mandatory(必选 服务), Optional(可选服务)。

目前本字段为非功能性字段,仅起到描 述作用。

omCapability结构描述

字段 子字段 可选/

必选

描述

upgradeCa

pability - 可选 设备软件升级能力。

- supportUpg

rade 可选 true:设备支持软件升级。

false:设备不支持软件升级。

- upgradePro

tocolType 可选 升级使用的协议类型,此处不同于设备的 protocolType,例如CoAP设备软件升级协议使 用PCP。

fwUpgrad eCapabilit y

- 可选 设备固件升级能力。

- supportUpg

rade 可选 true:设备支持固件升级。

false:设备不支持固件升级。

- upgradePro

tocolType 可选 升级使用的协议类型,此处不同于设备的 protocolType,当前物联网平台仅支持 LWM2M固件升级。

设备接入

开发指南 3 产品开发

(25)

字段 子字段 可选/

必选

描述

configCap

ability - 可选 设备配置更新能力。

- supportConf

ig 可选 true:设备支持配置更新。

false:设备不支持配置更新。

- configMeth

od 可选 file:使用文件的方式下发配置更新。

- defaultConf

igFile 可选 设备默认配置信息(Json格式),具体配置信 息由设备商自定义。物联网平台只储存该信息 供下发时使用,不解析处理配置字段的具体含 义。

服务能力定义样例

servicetype-capability.json记录了该设备的服务信息:

{ "services": [ {

"serviceType": "WaterMeterBasic", "description": "WaterMeterBasic", "commands": [

{

"commandName": "SET_PRESSURE_READ_PERIOD", "paras": [

{

"paraName": "value", "dataType": "int", "required": true, "min": 1, "max": 24, "step": 1, "maxLength": 10, "unit": "hour", "enumList": null }

],

"responses": [ {

"responseName": "SET_PRESSURE_READ_PERIOD_RSP", "paras": [

(26)

"properties": [ {

"propertyName": "registerFlow", "dataType": "int",

"required": true, "min": 0, "max": 0, "step": 1, "maxLength": 0, "method": "R", "unit": null, "enumList": null },

{

"propertyName": "currentReading", "dataType": "string",

"required": false, "min": 0, "max": 0, "step": 1, "maxLength": 0, "method": "W", "unit": "L", "enumList": null },

{

"propertyName": "timeOfReading", "dataType": "string",

"required": false, "min": 0, "max": 0, "step": 1, "maxLength": 0, "method": "W", "unit": null, "enumList": null },

...

] } ] }

各字段的解释:

字段 子字段 必

选/

可选 描述

services - - - - 必选 包含了一个服务的完整信息(根节点不可 修改)。

- ser viceTy pe

- - - 必选 指示服务的类型,与devicetype-

capability.json中serviceType字段保持一 致。

- des cripti on

- - - 必选 指示服务的描述信息。

非功能性字段,仅起到描述作用,可置为 null。

设备接入

开发指南 3 产品开发

(27)

字段 子字段 必 选/

可选 描述

- co mma nds

- - - 必选 指示设备可以执行的命令,如果本服务无 命令则置null。

- - com mandNa me

- - 必选 指示命令的名字,命令名与参数共同构成 一个完整的命令。

- - para

s - - 必选 命令包含的参数。

- - - para Name

- 必选 命令中参数的名字。

- - - dataT

ype - 必选 指示命令参数的数据类型。

取值范围:string、int、string list、

decimal、DateTime、jsonObject、

enum、boolean。

上报数据时,复杂类型数据格式如下:

● string list:["str1","str2","str3"]

● DateTime:

yyyyMMdd’T’HHmmss’Z’如:

20151212T121212Z

● jsonObject:自定义json结构体,物联 网平台不解析,仅进行透传

- - - requir

ed - 必选 指示本命令是否必选,取值为true或 false,默认取值false(非必选)。

目前本字段是非功能性字段,仅起到描述 作用。

- - - min - 必选 指示最小值。

仅当dataType为int、decimal时生效。

(28)

字段 子字段 必 选/

可选 描述

- - - unit - 必选 指示单位,英文。

取值根据参数确定,如:

温度单位:“C”或“K”

百分比单位:“%”

压强单位:“Pa”或“kPa”

- - - enum

List - 必选 指示枚举值。

如开关状态status可有如下取值:

"enumList" : ["OPEN","CLOSE"]

目前本字段是非功能性字段,仅起到描述 作用,建议准确定义。

- - resp onses

- - 必选 命令执行的响应。

- - - respo nseName

- 必选 命名可以在该responses对应命令的 commandName后面添加“_RSP”。

- - - paras - 必选 命令响应的参数。

- - - - pa

raNa me

必选 命令中参数的名字。

- - - - da

taTy pe

必选 指示数据类型。

取值范围:string、int、string list、

decimal、DateTime、jsonObject 上报数据时,复杂类型数据格式如下:

● string list:["str1","str2","str3"]

● DateTime:

yyyyMMdd’T’HHmmss’Z’如:

20151212T121212Z

● jsonObject:自定义json结构体,物联 网平台不解析,仅进行透传

- - - - re

quire d

必选 指示本命令响应是否必选,取值为true或 false,默认取值false(非必选)。

目前本字段是非功能性字段,仅起到描述 作用。

设备接入

开发指南 3 产品开发

(29)

字段 子字段 必 选/

可选 描述

- - - - mi

n 必选 指示最小值。

仅当dataType为int、decimal时生效,逻 辑大于等于。

- - - - m

ax 必选 指示最大值。

仅当dataType为int、decimal时生效,逻 辑小于等于。

- - - - ste

p 必选 指示步长。

暂不使用,填0即可。

- - - - m

axLe ngth

必选 指示字符串长度。

仅当dataType为string、string list、

DateTime时生效。

- - - - un

it 必选 指示单位,英文。

取值根据参数确定,如:

温度单位:“C”或“K”

百分比单位:“%”

压强单位:“Pa”或“kPa”

- - - - en

um List

必选 指示枚举值。

如开关状态status可有如下取值:

"enumList" : ["OPEN","CLOSE"]

目前本字段是非功能性字段,仅起到描述 作用,建议准确定义。

- pro perties

- - - 必选 上报数据描述,每一个子节点为一条属 性。

- - prop ertyNam

- - 必选 指示属性名称。

(30)

字段 子字段 必 选/

可选 描述

- - data

Type - - 必选 指示数据类型。

取值范围:string、int、string list、

decimal、DateTime、jsonObject 上报数据时,复杂类型数据格式如下:

● string list:["str1","str2","str3"]

● DateTime:

yyyyMMdd’T’HHmmss’Z’如:

20151212T121212Z

● jsonObject:自定义json结构体,物联 网平台不解析,仅进行透传

- - requi

red - - 必选 指示本条属性是否必选,取值为true或 false,默认取值false(非必选)。

目前本字段是非功能性字段,仅起到描述 作用。

- - min - - 必选 指示最小值。

仅当dataType为int、decimal时生效,逻 辑大于等于。

- - max - - 必选 指示最大值。

仅当dataType为int、decimal时生效,逻 辑小于等于。

- - step - - 必选 指示步长。

暂不使用,填0即可。

- - met

hod - - 必选 指示访问模式。

R:可读;W:可写;E:可订阅。

取值范围:R、RW、RE、RWE 、null。

- - unit - - 必选 指示单位,英文。

取值根据参数确定,如:

温度单位:“C”或“K”

百分比单位:“%”

压强单位:“Pa”或“kPa”

- - max Length

- - 必选 指示字符串长度。

仅当dataType为string、string list、

DateTime时生效。

设备接入

开发指南 3 产品开发

(31)

字段 子字段 必 选/

可选 描述

- - enu mList

- - 必选 指示枚举值。

如电池状态(batteryStatus)可有如下取 值:

"enumList" : [0, 1, 2, 3, 4, 5, 6]

目前本字段是非功能性字段,仅起到描述 作用,建议准确定义。

产品模型打包

产品模型写作完成后,需要按如下层级结构打包:

(32)

{ "devices": [ {

"manufacturerId": "TestUtf8ManuId", "manufacturerName": "HZYB",

"protocolType": "CoAP", "deviceType": "WaterMeter", "serviceTypeCapabilities": ****

} ] }

● 图中的WaterMeterBasic、WaterMeterAlarm、Battery等都是devicetype- capability.json中定义的服务。

产品模型文件中的文档格式都是JSON,在编写完成后可以在互联网上查找一些格式校 验网站,检查JSON的合法性。

3.3.4 导出和导入产品模型

产品模型作为一种资源,可以从物联网平台导出,也可以导入到物联网平台。

● 当产品开发完成并测试验证后,需要将在线开发的产品模型移植时,则可以将产 品模型导出到本地。

● 当您已经有完备的产品模型(线下开发或从其他项目/平台导出),或者使用excel 编辑开发产品模型时,可以将产品模型直接导入到“物联网平台”。

导出产品模型

当产品开发完成并测试验证后,需要将在线开发的产品模型移植时,则可以将产品导 出到本地。

步骤1 访问设备接入服务,单击“立即使用”进入设备接入控制台。

步骤2 单击左侧导航栏的“产品”,在产品列表中,找到对应的产品,单击产品进入产品界 面。

步骤3 在产品界面,单击右边“导出”,将产品模型下载到本地。

----结束

导入产品模型

当您已经有完备的产品模型时(线下开发或从其他项目/平台导出),或者使用excel编 辑开发产品模型时,可以将产品模型直接导入“物联网平台”。

说明

通过本地导入的产品模型不含编解码插件,如果设备上报采用的是二进制码流,请前往控制台进 行插件开发或导入插件。

● 上传模型文件 设备接入

开发指南 3 产品开发

(33)

a. 访问设备接入服务,单击“立即使用”进入设备接入控制台。

b. 单击左侧导航栏的“产品”,在产品列表中,找到对应的产品,单击产品进 入产品界面。

c. 在模型定义页面,单击“上传模型文件”,在弹框中加载本地的产品模型文 件,然后单击“确认”。

Excel导入

a. 访问设备接入服务,单击“立即使用”进入设备接入控制台。

b. 单击左侧导航栏的“产品”,在产品列表中,找到相应的产品,单击产品进 入产品界面。

c. 单击“Excel导入”,在产品模板表格中,填写“设备”页签的服务ID,以及

“参数”页签的属性、命令、事件等参数。导入Excel表格后,然后单击“确 认”。

3.4 开发编解码插件

(34)

数据上报流程

在数据上报流程中,有两处需要用到编解码插件:

● 将设备上报的二进制码流解码成JSON格式的数据,发送给应用服务器。

● 将应用服务器响应的JSON格式数据编码成二进制码流,下发给设备。

设备接入

开发指南 3 产品开发

(35)

命令下发流程

在命令下发流程中,有两处需要用到编解码插件:

● 将应用服务器下发的JSON格式数据编码成二进制码流,下发给设备。

● 将设备响应的二进制码流解码成JSON格式的数据,上报给应用服务器。

图形化开发和离线开发

编解码插件的开发手段有图形化开发、离线开发和脚本化开发三种,由于插件离线开 发较为复杂,且耗时比较长,我们推荐使用图形化开发编解码插件。

● 图形化开发是指在设备接入控制台,通过可视化的方式快速开发一款产品的编解

码插件。

● 离线开发是指使用编解码插件的Java代码Demo进行二次开发,实现编解码功能、

完成插件打包和质检等。

● 脚本化开发是指使用JavaScript脚本实现编解码的功能。

(36)

● 数据上报和命令下发

● 字符串及可变长字符串的编解码插件

● 数组及可变长数组数据类型

数据上报和命令下发

场景说明

有一款烟感设备,具有如下特征:

● 具有烟雾报警功能(火灾等级)和温度上报功能。

● 支持远程控制命令,可远程打开报警功能。比如火灾现场温度,远程打开烟雾报 警,提醒住户疏散。

● 支持上报命令执行结果。

产品模型定义

在烟感产品的开发空间,完成产品模型定义。

● level:火灾级别,用于表示火灾的严重程度。

● temperature:温度,用于表示火灾现场温度。

● SET_ALARM:打开或关闭告警命令,value=0表示关闭,value=1表示打开。

编解码插件开发

步骤1 在烟感产品的开发空间,选择“插件开发”,单击“图形化开发”。

步骤2 单击“新增消息”,新增“smokerinfo”消息。配置此步骤的主要目的是,将设备上 传的二进制码流消息解码成JSON格式,以便物联网平台理解。配置示例如下:

● 消息名:smokerinfo

● 消息类型:数据上报。

● 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会 下发用户设置的响应数据到设备。

● 响应数据:AAAA0000(默认)

设备接入

开发指南 3 产品开发

(37)

1. 单击“添加字段”,勾选“标记为地址域”,添加messageId字段,表示消息类 型。在本场景中,上报火灾等级和温度的消息类型是0x0。设备上报消息时,每条 消息首个字段就是messageId。如设备上报消息为0001013A,第一个字段00就是 表示此条消息是上报火灾级别和温度的消息。后续字段01和013A分别代表火灾级 别和温度。如果只有一条数据上报消息和一条命令下发消息,可以不添加

messageId字段。

– “数据类型”根据数据上报消息种类的数量进行配置。messageId字段默认 的数据类型为int8u。

– “偏移值”是根据字段位置和字段的字节数的配置自动填充的。messageId 为此消息的第一个字段,起始位置为0,字节长度为1,终点位置为1。所以偏 移值为0-1。

– “长度”是根据“数据类型”的配置自动填充的。

– “默认值”可以修改,但必须为十六进制格式,且设备数据上报消息的对应 字段必须和此处的默认值保持一致。

(38)

2. 添加level字段,表示火灾级别。

– “字段名”只能输入包含字母、数字、_和$,且不能以数字开头的字符。

– “数据类型”根据设备上报数据的实际情况进行配置,需要和产品模型相应 字段的定义相匹配。产品模型中定义的火灾级别level属性的数据类型为int,

最大值为9。所以选择的数据类型为int8u。

– “偏移值”是根据字段位置和字段的字节数的配置自动填充的。“level”字 段的起始位置就是前一字段的终点,前一字段“messageId”的终点位置为 1,所以“level”字段的起始位置为1。“level”字段长度为1个字节,终点 为2。所以“偏移值”为1-2。

– “长度”根据“数据类型”的配置自动填充。

– “默认值”不填。此处火灾级别level不固定,无默认值。

设备接入

开发指南 3 产品开发

(39)

3. 添加temperature字段,表示温度。

– “数据类型”,在产品模型中,temperature属性的“数据类型”为int,最 大值1000,因此在插件中定义temperature字段的“数据类型”为

“int16u”,以满足temperature属性的取值范围。

– “偏移值”是根据与首字段的间隔的字符数自动配置的。“temperature”字 段的起始位置就是前一字段的终点,前一字段“level”的终点位置为2,所以

“temperature”字段的起始位置为2。“temperature”字段长度为2个字 节,终点为4。所以“偏移值”为2-4。

– “长度”根据数据类型的配置自动填充。

– “默认值”不填,此处温度temperature的值不固定,无默认值。

(40)

步骤3 单击“新增消息”,新增“SET_ALARM”消息,设置火灾告警的温度阈值。例如超过 60摄氏度,设备上报告警。配置此步骤的主要目的是,将平台下发的JSON格式命令消 息编码成二进制数据,以便烟感设备理解。配置示例如下:

● 消息名:SET_ALARM

● 消息类型:命令下发

● 添加响应字段:是。添加响应字段后,设备在接收命令后,可以上报命令执行结 果。您可以根据自己的需求,选择是否添加响应字段。

设备接入

开发指南 3 产品开发

(41)

a. 单击“添加字段”,添加messageId字段,表示消息类型。例如,设置火灾 告警阈值的消息类型为0x3。messageId、数据类型、长度、默认值、偏移值 的说明可参考1。

(42)

b. 添加mid字段。这里的mid字段是由平台生成和下发的,用于将下发的命令和 命令下发响应消息关联。mid字段的数据类型默认为int16u。长度、默认值、

偏移值的说明可参考2。

设备接入

开发指南 3 产品开发

(43)

c. 添加value字段,表示下发命令的参数值。例如,下发火灾告警的温度阈值。

数据类型、长度、默认值、偏移值的说明可以参考2。

(44)

d. 单击“添加响应字段”,添加“messageId”字段,表示消息类型。命令下 发响应消息为上行消息,需要通过messageId和数据上报消息进行区分。上 报火灾告警温度阈值的消息类型为0x4。messageID、数据类型、长度、默认 值、偏移值的说明可参考1。

设备接入

开发指南 3 产品开发

(45)

e. 添加mid字段。这里的mid字段需要跟平台下发的命令里的mid字段保持一 致,用于将下发的命令和命令执行结果进行关联。mid字段的数据类型默认为 int16u。长度、默认值、偏移值的说明可参考2。

(46)

f. 添加errcode字段,用于表示命令执行状态:00表示成功,01表示失败,如果 未携带该字段,则默认命令执行成功。errcode字段的数据类型默认为int8u。

长度、默认值、偏移值的说明可参考2。

设备接入

开发指南 3 产品开发

(47)

g. 添加result字段,用于表示命令执行结果。例如,设备向平台返回当前的告警 阈值。

(48)

步骤4 拖动右侧“设备模型”区域的属性字段和命令字段,数据上报消息和命令下发消息的 相应字段建立映射关系。

步骤5 单击“保存”,并在插件保存成功后单击“部署”,将编解码插件部署到物联网平 台。

设备接入

开发指南 3 产品开发

(49)

----结束

调测编解码插件

步骤1 在烟感产品的开发空间,选择“在线调试”,并单击“新增测试设备”。

步骤2 用户可根据自己的业务场景,选择使用真实设备或者模拟设备进行调测。具体请参考 在线调试。本文以模拟设备为例,调测编解码插件。

在弹出的“新增测试设备”窗口,选择“模拟设备”,单击“确定”,创建一个虚拟 设备。虚拟设备名称包含 “Simulator”字样,每款产品下只能创建一个虚拟设备。

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

步骤4 使用设备模拟器进行数据上报。十六进制码流示例:0008016B。00为地址域 meaasgeID,08表示火灾级别level,长度为1个字节;016B表示温度,长度为2个字 节。

在“应用模拟器”区域查看数据上报的结果:{level=8, temperature=363}。8为十六 进制数08转换为十进制的数值;363为十六进制数016B转换为十进制的数值。

在设备模拟器区域看到平台下发的响应数据AAAA0000。

(50)

----结束 总结

● 如果插件需要对命令执行结果进行解析,则必须在命令和命令响应中定义mid字 段。

● 命令下发的mid是2个字节,对于每个设备来说,mid从1递增到65535,对应码流 为0001到FFFF。

● 设备执行完命令,命令执行结果上报中的mid要与收到命令中的mid保持一致,这 样平台才能刷新对应命令的状态。

字符串及可变长字符串的编解码插件

如果该烟感设备需要支持描述信息上报功能,描述信息支持字符串和可变长度字符串 两种类型,则按照以下步骤创建消息。

产品模型定义

在烟感产品的开发空间完成产品模型定义。

编解码插件开发

步骤1 在烟感产品的开发空间,选择“插件开发”,单击“图形化开发”。

设备接入

开发指南 3 产品开发

(51)

步骤2 单击“新增消息”,新增消息“otherinfo”,上报字符串类型的描述信息。配置此步 骤的主要目的是,将设备上传的字符串二进制码流消息解码成JSON格式,以便物联网 平台理解。配置示例如下:

● 消息名:otherinfo

● 消息类型:数据上报

● 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会 下发用户设置的响应数据到设备。

● 响应数据:AAAA0000(默认)

1. 单击“添加字段”,添加messageId字段,表示消息种类。在本场景中,0x0用于 标识上报火灾等级和温度的消息,0x1用于标识只上报温度的消息,0x2用于标识 上报描述信息(字符串类型)的消息。messageID、数据类型、长度、默认值、

偏移值的说明可参考1。

(52)

2. 添加other_info字段,表示字符串类型的描述信息。在本场景中,字符串类型的 字段数据类型选择“string”,“长度”配置 6个字节。字段名、默认值、偏移值 的说明可参考2。

设备接入

开发指南 3 产品开发

(53)

步骤3 单击“新增消息”,新增“other_info2”消息名,配置数据上报消息,上报可变长度 字符串类型的描述信息。配置此步骤的主要目的是,将设备上传的可变长度字符串二 进制码流消息解码成JSON格式,以便物联网平台理解。配置示例如下:

● 消息名:other_info2

● 消息类型:数据上报

● 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会 下发用户设置的响应数据到设备。

● 响应数据:AAAA0000(默认)

(54)

1. 添加messageId字段,表示消息种类。在本场景中,0x0用于标识上报火灾等级和 温度的消息,0x1用于标识只上报温度的消息,0x3用于标识上报描述信息(可变 长度字符串类型)的消息。messageID、数据类型、长度、默认值、偏移值的说 明可参考1。

设备接入

开发指南 3 产品开发

(55)

2. 添加length字段,表示可变字符串长度。“数据类型”根据可变长度字符串的长 度进行配置,此场景可变字符串长度在255以内,配置为“int8u”。长度、默认 值、偏移值的说明可参考2。

(56)

3. 添加other_info字段,数据类型选择“varstring”,表示可变长度字符串类型的 描述信息。“长度关联字段”选择“length”,“长度关联字段差值”和“数值 长度”自动填充。“掩码”默认为“0xff”。偏移值说明可参考2。

设备接入

开发指南 3 产品开发

(57)

步骤4 拖动右侧“设备模型”区域的属性字段,与数据上报消息的相应字段建立映射关系。

(58)

步骤5 单击“保存”,并在插件保存成功后单击“部署”,将编解码插件部署到物联网平 台。

----结束

调测编解码插件

步骤1 在烟感产品的开发空间,选择“在线调试”,并单击“新增测试设备”。

步骤2 用户可根据自己的业务场景,选择使用真实设备或者模拟设备进行调测。具体请参考 在线调试。本文以模拟设备为例,调测编解码插件。

在弹出的“新增测试设备”窗口,选择“模拟设备”,单击“确定”,创建一个虚拟 设备。虚拟设备名称包含 “Simulator”字样,每款产品下只能创建一个虚拟设备。

设备接入

开发指南 3 产品开发

(59)

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

步骤4 使用设备模拟器上报字符串类型的描述信息。

十六进制码流示例:0231。02表示messageId,此消息上报字符串类型的描述信息;

31表示描述信息,长度为1个字节。

在“应用模拟器”区域查看数据上报的结果:{other_info=null}。描述信息不足6个字 节,编解码插件无法解析。

十六进制码流示例:02313233343536。02表示messageId,此消息上报字符串类型的 描述信息;313233343536表示描述信息,长度为6个字节。

在“应用模拟器”区域查看数据上报的结果:{other_info=123456}。描述信息长度为 6个字节,编解码插件解析成功。

(60)

在“应用模拟器”区域查看数据上报的结果:{other_info=123456}。描述信息长度超 过6个字节,编解码插件截取前6个字节进行解析。

十六进制码流示例:02013132333435。02表示messageId,此消息上报字符串类型的 描述信息;013132333435表示描述信息,长度为6个字节。

在“应用模拟器”区域查看数据上报的结果:{other_info=\u000112345}。01在ASCII 码表里表示“标题开始”,无法用具体字符表示,因此编解码插件解析为\u0001。

步骤5 使用设备模拟器上报可变长度字符串类型的描述信息。

十六进制码流示例:030141。03表示messageId,此消息上报可变长度字符串类型的 描述信息;01表示描述信息长度(1个字节),长度为1个字节;41表示描述信息,长 度为1个字节。

在“应用模拟器”区域查看数据上报的结果:{other_info=A}。41是A的十六进制 ASCII码。

设备接入

开发指南 3 产品开发

(61)

十六进制码流示例:03024142。03表示messageId,此消息上报可变长度字符串类型 的描述信息;02表示描述信息长度(2个字节),长度为1个字节;4142表示描述信 息,长度为2个字节。

在“应用模拟器”区域查看数据上报的结果:{other_info=AB}。4142是AB的十六进制 ASCII码。

十六进制码流示例:030341424344。03表示messageId,此消息上报可变长度字符串 类型的描述信息;03表示描述信息长度(3个字节),长度为1个字节;41424344表示 描述信息,长度为4个字节。

在“应用模拟器”区域查看数据上报的结果:{other_info=ABC}。描述信息长度超过3 个字节,编解码插件截取前3个字节进行解析,414243是ABC的十六进制ASCII码。

十六进制码流示例:0304414243。03表示messageId,此消息上报可变长度字符串类 型的描述信息;04表示字符串长度(4个字节),长度为1个字节;414243表示描述信 息,长度为4个字节。

在“应用模拟器”区域查看数据上报的结果:{other_info=null}。描述信息长度不足4 个字节,编解码插件解析失败。

(62)

总结

● 当数据类型为字符串或可变长度字符串时,插件是按照ASCII码进行编解码的:上 报数据时,将16进制码流解码为对应字符串,比如:21解析为“!”、31解析为

“1”、41解析为“A”;下发命令时,将字符串编码对应的16进制码流,比如:

“!”编码为21,“1”编码为31,“A”编码为41。

● 当某字段的数据类型为可变长度字符串时,该字段需要关联长度字段,长度字段 的数据类型必须为int。

● 针对可变长度字符串,命令下发和数据上报的编解码插件开发方式相同。

● 图形化开发的编解码插件使用ASCII码16进制的标准表对字符串和可变长度字符串 进行编解码。解码时(数据上报),如果解析结果无法使用具体字符表示,如:

标题开始、正文开始、正文结束等,则使用\u+2字节码流值表示(例如:01解析 为\u0001,02解析为\u0002);如果解析结果可以使用具体字符表示,则使用具 体字符。

数组及可变长数组数据类型

如果该烟感设备需要支持描述信息上报功能,描述信息描述信息支持数组和可变长度 数组两种类型,则按照以下步骤创建消息。

产品模型定义

在烟感产品的开发空间完成产品模型定义。

编解码插件开发

步骤1 在烟感产品的开发空间,选择“插件开发”,单击“图形化开发”。

步骤2 单击“新增消息”,新增消息“otherinfo”,上报数组类型的描述信息。配置此步骤 的主要目的是,将设备上传的数组二进制码流消息解码成JSON格式,以便物联网平台 理解。配置示例如下:

● 消息名:otherinfo

● 消息类型:数据上报

● 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会 下发用户设置的响应数据到设备。

● 响应数据:AAAA0000(默认)

设备接入

开发指南 3 产品开发

(63)

1. 单击“添加字段”,添加messageId字段,表示消息种类。在本场景中,0x0用于 标识上报火灾等级和温度的消息,0x1用于标识只上报温度的消息,0x2用于标识 上报描述信息(数组类型)的消息。messageID、数据类型、长度、默认值、偏 移值的说明可参考1。

(64)

2. 添加other_info字段,“数据类型”选择“array”,表示数组类型的描述信息。

在本场景中,“长度”配置为5个字节。字段名、默认值、偏移值的说明可参考 2。

设备接入

开发指南 3 产品开发

(65)

步骤3 单击“新增消息”,新增“other_info2”消息,上报可变长度数组类型的描述信息。

配置此步骤的主要目的是,将设备上传的可变长度数组二进制码流消息解码成JSON格 式,以便物联网平台理解。配置示例如下:

● 消息名:other_info2

● 消息类型:数据上报

● 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会 下发用户设置的响应数据到设备。

● 响应数据:AAAA0000(默认)

(66)

1. 单击“添加字段”,添加messageId字段,表示消息种类。在本场景中,0x0用于 标识上报火灾等级和温度的消息,0x1用于标识只上报温度的消息,0x3用于标识 上报描述信息(可变长度数组类型)的消息。messageID、数据类型、长度、默 认值、偏移值的说明可参考1。

设备接入

开发指南 3 产品开发

(67)

2. 添加length字段,表示数组长度。“数据类型”根据可变长度数组的长度进行配 置,长度在255以内,配置为“int8u”。长度、默认值、偏移值的说明可参考2。

(68)

3. 添加other_info字段,“数据类型”选择“variant”,表示可变长度数组类型的 描述信息。“长度关联字段”选择“length”,“长度关联字段差值”和“数值 长度”自动填充。“掩码”默认为“0xff”。偏移值说明可参考2。

设备接入

开发指南 3 产品开发

(69)

步骤4 拖动右侧“设备模型”区域的属性字段,与数据上报消息的相应字段建立映射关系。

(70)

步骤5 单击“保存”,并在插件保存成功后单击“部署”,将编解码插件部署到物联网平 台。

----结束

调测编解码插件

步骤1 在烟感产品的开发空间,选择“在线调试”,并单击“新增测试设备”。

步骤2 用户可根据自己的业务场景,选择使用真实设备或者模拟设备进行调测。具体请参考 在线调试。本文以模拟设备为例,调测编解码插件。

在弹出的“新增测试设备”窗口,选择“模拟设备”,单击“确定”,创建一个虚拟 设备。虚拟设备名称包含 “Simulator”字样,每款产品下只能创建一个虚拟设备。

设备接入

开发指南 3 产品开发

(71)

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

步骤4 使用设备模拟器上报数组类型的描述信息。

十六进制码流示例:0211223344。02表示messageId,此消息上报数组类型的描述信 息;11223344表示描述信息,长度为4个字节。

在“应用模拟器”区域查看数据上报的结果:{other_info=null}。描述信息不足5个字 节,编解码插件无法解析。

十六进制码流示例:021122334455。02表示messageId,此消息上报数组类型的描述 信息;1122334455表示描述信息,长度为5个字节。

在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data:

{"other_info":"ESIzRFU="}}。描述信息长度为5个字节,编解码插件解析成功。

(72)

在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data:

{"other_info":"ESIzRFU="}}。描述信息长度超过5个字节,编解码插件截取前5个字节 进行解析。

步骤5 使用设备模拟器上报可变长度数组类型的描述信息。

十六进制码流示例:030101。03表示messageId,此消息上报可变长度数组类型的描 述信息;01表示描述信息长度(1个字节),长度为1个字节;01表示描述信息,长度 为1个字节。

在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data:

{"other_info":"AQ=="}}。AQ==是01经过base64编码后的值。

十六进制码流示例:03020102。03表示messageId,此消息上报可变长度数组类型的 描述信息;02表示描述信息长度(2个字节),长度为1个字节;0102表示描述信息,

长度为2个字节。

在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data:

{"other_info":"AQI="}}。AQI=是01经过base64编码后的值。

十六进制码流示例:03030102。03表示messageId,此消息上报可变长度数组类型的 描述信息;03表示描述信息长度(3个字节),长度为1个字节;0102表示描述信息,

长度为2个字节。

在“应用模拟器”区域查看数据上报的结果:{other_info=null}。描述信息长度不足3 个字节,编解码插件解析失败。

设备接入

开发指南 3 产品开发

(73)

十六进制码流示例:0303010203。03表示messageId,此消息上报可变长度数组类型 的描述信息;03表示描述信息长度(3个字节),长度为1个字节;010203表示描述信 息,长度为3个字节。

在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data:

{"other_info":"AQID"}}。AQID是010203经过base64编码后的值。

十六进制码流示例:030301020304。03表示messageId,此消息上报可变长度数组类 型的描述信息;03表示描述信息长度(3个字节),长度为1个字节;01020304表示描 述信息,长度为4个字节。

在“应用模拟器”区域查看数据上报的结果:{other_info=AQID}。描述信息长度超过 3个字节,编解码插件截取前3个字节进行解析,AQID是010203经过base64编码后的 值。

數據

表 4-2 未集成华为 SDK、但通过华为测试的模组 模组类型 厂商 具体型号 华为云市场购买链 接 NB-IoT模组 移远 BC39 购买页面 BC95 待上架 BC35 购买页面 BC26 购买页面 BC28 购买页面 有方 N27 待上架 N25 待上架 N21 待上架 中怡数宽 TPB41 购买页面 TPB23 购买页面 云程科技 CFB-609 购买页面 利尔达 NB86-G 待上架 4G Cat4模组 域格 CLM920_NC5 购买页面 CLM920_NC3 购买页面 移远 EC20 购买页面

參考文獻

相關文件

z請利用 struct 記錄 Bob 和 Alice 的相關資訊 z列印出 Bob 及 Alice 分別花多少錢. z再列印出

private void closeBTN_Click(object sender, System.EventArgs

Session.Add(string name, object value) z將新項目加入 Session 當中。..

zCount 屬性–取得項目個數 zAdd 方法–新增項目. zRemove 方法–移除指定項目

z屬性 (property) z方法 (method) z事件

private void answerLB Click(object sender private void answerLB_Click(object sender,. System.EventArgs

(Web Form、Web Service Mobile Form) Windows Form ADO.NET、XML. Base Class

So the WiSee receiver computes the average energy in the positive and negative Doppler frequencies (other than the DC and the four frequency bins around it). If the ratio between