华为云用户手册
-
请求示例 POST https://{host}:{port}/iodm/northbound/v1.5.0/operations/softwareUpgrade Content-Type: application/json app_key: ****** Authorization: Bearer ****** { "fileId": "**********", "targets": { "devices": [ "*****" ] } }
-
错误码 Http状态码 错误码 错误描述 说明 400 120015 Bad request error. 请求错误。 处理建议:请检查请求参数的是否有误。 400 123016 The parameter is error, targetversion not match with device. 参数不正确,目标版本与指定设备不匹配。 处理建议:请检查接口请求中deviceType、manufacturerName、model,与参数fileId指定的目标版本包信息是否一致。 400 123019 manufacturerName is null. 厂商名称内容为空。 处理建议:请检查接口请求中的manufacturerName是否为空。 400 123020 deviceType is null 设备类型内容为空。 处理建议:请检查接口请求中的deviceType是否为空。 400 123021 model is null. 设备型号内容为空。 处理建议:请检查接口请求中的model是否为空。 400 123022 deviceGroups and devices cannot be null together deviceGroups和devices不能同时为空。 处理建议:deviceGroups与devices必须要选择一个进行赋值。 400 123023 deviceGroups and devices cannot be exist together deviceGroups和devices不能同时存在。 处理建议:deviceGroups与devices只能选择一个进行赋值。 400 123024 The number of deviceGroups or devices reached upper limit deviceGroups或devices内容数量达到上限。 处理建议:请检查deviceGroups或devices的内容,数量不能超过256个。 400 123025 executeType is error or can not to be null. executeType有误或不能为空。 处理建议:请检查接口请求中的executeType是否为空或者是否有误。 400 123026 startTime or endTime is null or error. startTime或endTime为空或有误。 处理建议:请检查接口请求中的startTime和endTime是否为空或者格式有误。 400 123028 retryTimes is null or beyond the limit. retryTimes为空或超出上限。 处理建议:请检查接口请求中的retryTimes是否为空,或者不能小于1或者大于5。 400 123032 startTime can not be later than the endTime. startTime的时间不能比endTime晚。 处理建议:请检查接口请求中的startTime是否晚于endTime。 400 123033 startTime can not be earlier than the now. startTime的时间不能比当前时间早。 处理建议:请检查接口请求中的startTime是否早于当前时间。 400 123034 endtime must be greater than 5 minutes. endtime要比startTime大5分钟。 处理建议:请检查接口请求中的startTime和endTime间隔时间必须大于5分钟。 403 1010009 app throttle exceed. 应用调用接口过于频繁,超过流控值(默认值是100次/60s)。 处理建议:联系 物联网平台 维护人员调大流控阈值或者控制接口的调用频率。 403 1010005 Invalid access token or appId. 错误的token信息。 处理建议:请检查接口请求中所携带的accessToken是否有误。 404 123002 Device or package file not found. 设备或包不存在 处理建议:请检查接口请求中的fileId是否正确。
-
请求示例 POST 由应用服务器订阅批量任务状态变更请求消息中的callbackUrl决定 Content-Type: application/json { "resource" : "string", "event" : "string", "notify_data" : { "status_desc" : "string", "task_id" : "string", "task_type" : "string", "app_id" : "string", "status" : "string" } }
-
请求参数 名称 必选/可选 类型 位置 说明 resource 必选 String Body 订阅的资源名称,取值为batchtask.status。 event 必选 String Body 订阅的资源事件,取值为update。 notify_data 必选 batchTaskStatusUpdateNotification Object Body 设备的自定义字段列表。 表1 batchTaskStatusUpdateNotification 名称 必选/可选 类型 说明 app_id 必选 String 应用ID。 task_id 必选 String 批量任务ID。调用创建批量任务接口时返回的任务ID。 task_type 必选 String 任务类型。 firmwareUpgrade:固件升级 softwareUpgrade:软件升级 status 必选 String 任务状态 Waitting 任务正在被等待执行 Processing 任务正在执行 Success 任务成功 PartialSuccess 任务部分成功 Fail 任务失败 Stopped 任务被停止 status_desc 必选 String 任务状态描述。
-
制作软件升级版本包 设备升级的软件包文件由各设备厂商提供,在物联网平台上传设备的软件升级包前,需要制作软件升级的版本包,用于修改软件包的描述文件,如软件版本、厂商名称、设备类型、产品模型等信息。下面将详细介绍版本包的制作方法。 新建文件夹命名为“DM”,在DM文件夹下新建文件夹,命名为“linux”。 使用Notepad++文本工具新建一个文本文件,拷贝如下内容到文本中,在Notepad++工具的“编码”菜单中选择“使用UTF-8编码”,然后将文本进行存储,存储路径选择步骤1中的“linux”文件夹,文件名称命名为“UpgradeDesc”,保存类型选择“.json”。 { "specVersion": "", "fileName": "", "packageType": "", "version": "", "deviceType": "", "manufacturerName": "", "model": "", "protocolType":"", "description":"", "versionCheckCode":"", "deviceShard":"", "platform":"", "supportSourceVersionList":[], "date":"" } 打开创建的“UpgradeDesc.json”文件,修改软件升级描述文件,相关字段如下表所示。 字段名 字段描述 是否必填 specVersion 描述文件版本号,固定值:“1.0”。 是 fileName 软件包文件名,例如:“ExamplePackage_V1.0.10.xx”。 是 packageType 软件包类型,必须设置为:“softwarePackage”。 是 version 软件包版本号长度不超过16个字节,例如:“V1.0.10” 是 deviceType 设备类型,需要与产品模型保持一致。例如:“WaterMeter”。 是 manufacturerName 制造商名称,需要与产品模型保持一致。例如:“TestUtf8ManuName”。 是 model 产品型号,需要与产品模型保持一致。例如:“TestUtf8ModelM2M”。 是 protocolType 设备接入协议类型,需要与产品模型保持一致。例如:“CoAP”。 说明: 设备接入的协议类型有三种:“CoAP”、“LWM2M”、“MQTT”。 是 description 对软件包的自定义描述。 是 versionCheckCode 软件升级包校验码,长度为4个字符。软件包下载时支持断点续传,根据该字段标识前后两次下载的软件包分片是否为同一个软件包。 否 deviceShard 终端下载软件包的每个分片的大小,单位为byte,如果不设置默认为500byte。大小为32~500之间。 否 platform 标识设备的操作系统,如linux。 否 supportSourceVersionList 支持用于升级此版本包的设备源版本列表。 支持通配符配置,*代表匹配任意0~n个字符,?代表匹配单个任意字符,如果存在多个版本,请使用英文“;”隔开。 否 date 出包时间,格式为:“yyyy-MM-dd”。 否 在与“DM”同级目录下创建文件夹,命名为“linux”,该文件夹名称必须同步骤1中的文件夹命令保持一致,将厂商软件包(软件包格式无限制)置于该文件中。 选中“DM”和“linux”文件夹,使用压缩工具打包成ZIP格式的压缩包,建议命令为“xx_package.zip”。 文件“DM”和“linux”的命名是固定的。 “xx_package.zip”下不能包含package这层目录。 仅支持ZIP格式的压缩包,不能压缩成其他格式后,例如rar,再手动修改文件类型为zip。
-
从这里开始 联通用户专用,非联通用户请查看 设备接入服务 。 使用设备管理服务的完整流程如下图所示,主要分为产品开发、上线和日常管理三个部分。用户可以根据自己角色的不同,执行对应的操作即可。 产品开发:在开发中心(测试环境)操作,开发者在接入设备前,需要进行相应的开发工作,包括平台侧开发(开发中心)、设备侧开发、应用侧开发,是真实设备接入到设备管理服务的前提条件。 其中设备侧开发和应用侧开发不分先后顺序,可同步进行。 上线(转商用):基于设备管理服务提供的控制台,将真实设备接入到设备管理服务中,并对接用户开发的应用服务器,实现设备的远程监控和控制。 日常管理:真实设备接入后,基于控制台或者API接口,进行日常的应用管理和设备管理,详情请参考使用指南。 我是模组厂商(联通用户专用) 我是设备厂商(联通用户专用) 我是设备用户(联通用户专用) 我是应用开发者(联通用户专用)
-
Profile打包 Profile写作完成后,需要按如下层级结构打包: Profile打包需要遵循如下几点要求: Profile文件的目录层级结构必须如上图所示,不能增删。例如:第二层级只能有“profile”和“service”两个文件夹,每个服务下面必须包含“profile”文件夹等。 图中橙色字体的命名不能改动。 Profile文件以zip形式压缩。 Profile文件的命名必须按照deviceType_manufacturerId_model的格式命名,其中的deviceType、manufacturerId、model必须与devicetype-capability.json中对应字段的定义一致。例如:本实例中devicetype-capability.json的主要字段如下: { "devices": [ { "manufacturerId": "TestUtf8ManuId", "manufacturerName": "HZYB", "model": "NBIoTDevice", "protocolType": "CoAP", "deviceType": "WaterMeter", "serviceTypeCapabilities": **** } ] } 图中的WaterMeterBasic、WaterMeterAlarm、Battery等都是devicetype-capability.json中定义的服务。 Profile文件中的文档格式都是JSON,在编写完成后可以在互联网上查找一些格式校验网站,检查JSON的合法性。
-
设备能力定义样例 devicetype-capability.json记录了该设备的基础信息: { "devices": [ { "manufacturerId": "TestUtf8ManuId", "manufacturerName": "HZYB", "model": "NBIoTDevice", "protocolType": "CoAP", "deviceType": "WaterMeter", "omCapability":{ "upgradeCapability" : { "supportUpgrade":true, "upgradeProtocolType":"PCP" }, "fwUpgradeCapability" : { "supportUpgrade":true, "upgradeProtocolType":"LWM2M" }, "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 必选 包含了一个设备的完整能力信息(根节点不能修改)。 manufacturerId 必选 指示设备的制造商ID。 manufacturerName 必选 指示设备的制造商名称 (只允许英文)。 model 必选 指示设备的型号,考虑到一款设备下的多种型号,建议包含字母或数字以保证可扩展性。 protocolType 必选 指示设备接入物联网平台的协议类型。如NB-IoT的设备取值为CoAP。 deviceType 必选 指示设备的类型。 omCapability 可选 定义设备的软件升级、固件升级和配置更新的能力,字段含义详情见下文中的:omCapability结构描述。 如果设备不涉及软件/固件升级,本字段可以删除。 serviceTypeCapabilities 必选 包含了设备具备的服务能力描述。 serviceId 必选 服务的Id,如果设备中同类型的服务类型只有一个则serviceId与serviceType相同, 如果有多个则增加编号,如三键开关 Switch01、Switch02、Switch03。 serviceType 必选 服务类型,与servicetype-capability.json中serviceType字段保持一致。 option 必选 标识服务字段的类型,取值范围:Master(主服务), Mandatory(必选服务), Optional(可选服务)。 目前本字段为非功能性字段,仅起到描述作用。 omCapability结构描述 字段 子字段 可选/必选 描述 upgradeCapability 可选 设备软件升级能力。 supportUpgrade 可选 true:设备支持软件升级。 false:设备不支持软件升级。 upgradeProtocolType 可选 升级使用的协议类型,此处不同于设备的protocolType,例如CoAP设备软件升级协议使用PCP。 fwUpgradeCapability 可选 设备固件升级能力。 supportUpgrade 可选 true:设备支持固件升级。 false:设备不支持固件升级。 upgradeProtocolType 可选 升级使用的协议类型,此处不同于设备的protocolType,当前物联网平台仅支持LWM2M固件升级。 configCapability 可选 设备配置更新能力。 supportConfig 可选 true:设备支持配置更新。 false:设备不支持配置更新。 configMethod 可选 file:使用文件的方式下发配置更新。 defaultConfigFile 可选 设备默认配置信息(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": [ { "paraName": "result", "dataType": "int", "required": true, "min": -1000000, "max": 1000000, "step": 1, "maxLength": 10, "unit": null, "enumList": null } ] } ] } ], "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 必选 包含了一个服务的完整信息(根节点不可修改)。 serviceType 必选 指示服务的类型,与devicetype-capability.json中serviceType字段保持一致。 description 必选 指示服务的描述信息。 非功能性字段,仅起到描述作用,可置为null。 commands 必选 指示设备可以执行的命令,如果本服务无命令则置null。 commandName 必选 指示命令的名字,命令名与参数共同构成一个完整的命令。 paras 必选 命令包含的参数。 paraName 必选 命令中参数的名字。 dataType 必选 指示命令参数的数据类型。 取值范围:string、int、string list、decimal、DateTime、jsonObject、enum、boolean。 上报数据时,复杂类型数据格式如下: string list:["str1","str2","str3"] DateTime:yyyyMMdd’T’HHmmss’Z’如:20151212T121212Z jsonObject:自定义json结构体,物联网平台不解析,仅进行透传 required 必选 指示本命令是否必选,取值为true或false,默认取值false(非必选)。 目前本字段是非功能性字段,仅起到描述作用。 min 必选 指示最小值。 仅当dataType为int、decimal时生效。 max 必选 指示最大值。 仅当dataType为int、decimal时生效。 step 必选 指示步长。 暂不使用,填0即可。 maxLength 必选 指示字符串长度。 仅当dataType为string、string list、DateTime时生效。 unit 必选 指示单位,英文。 取值根据参数确定,如: 温度单位:“C”或“K” 百分比单位:“%” 压强单位:“Pa”或“kPa” enumList 必选 指示枚举值。 如开关状态status可有如下取值: "enumList" : ["OPEN","CLOSE"] 目前本字段是非功能性字段,仅起到描述作用,建议准确定义。 responses 必选 命令执行的响应。 responseName 必选 命名可以在该responses对应命令的commandName后面添加“_RSP”。 paras 必选 命令响应的参数。 paraName 必选 命令中参数的名字。 dataType 必选 指示数据类型。 取值范围:string、int、string list、decimal、DateTime、jsonObject 上报数据时,复杂类型数据格式如下: string list:["str1","str2","str3"] DateTime:yyyyMMdd’T’HHmmss’Z’如:20151212T121212Z jsonObject:自定义json结构体,物联网平台不解析,仅进行透传 required 必选 指示本命令响应是否必选,取值为true或false,默认取值false(非必选)。 目前本字段是非功能性字段,仅起到描述作用。 min 必选 指示最小值。 仅当dataType为int、decimal时生效,逻辑大于等于。 max 必选 指示最大值。 仅当dataType为int、decimal时生效,逻辑小于等于。 step 必选 指示步长。 暂不使用,填0即可。 maxLength 必选 指示字符串长度。 仅当dataType为string、string list、DateTime时生效。 unit 必选 指示单位,英文。 取值根据参数确定,如: 温度单位:“C”或“K” 百分比单位:“%” 压强单位:“Pa”或“kPa” enumList 必选 指示枚举值。 如开关状态status可有如下取值: "enumList" : ["OPEN","CLOSE"] 目前本字段是非功能性字段,仅起到描述作用,建议准确定义。 properties 必选 上报数据描述,每一个子节点为一条属性。 propertyName 必选 指示属性名称。 dataType 必选 指示数据类型。 取值范围:string、int、string list、decimal、DateTime、jsonObject 上报数据时,复杂类型数据格式如下: string list:["str1","str2","str3"] DateTime:yyyyMMdd’T’HHmmss’Z’如:20151212T121212Z jsonObject:自定义json结构体,物联网平台不解析,仅进行透传 required 必选 指示本条属性是否必选,取值为true或false,默认取值false(非必选)。 目前本字段是非功能性字段,仅起到描述作用。 min 必选 指示最小值。 仅当dataType为int、decimal时生效,逻辑大于等于。 max 必选 指示最大值。 仅当dataType为int、decimal时生效,逻辑小于等于。 step 必选 指示步长。 暂不使用,填0即可。 method 必选 指示访问模式。 R:可读;W:可写;E:可订阅。 取值范围:R、RW、RE、RWE 、null。 unit 必选 指示单位,英文。 取值根据参数确定,如: 温度单位:“C”或“K” 百分比单位:“%” 压强单位:“Pa”或“kPa” maxLength 必选 指示字符串长度。 仅当dataType为string、string list、DateTime时生效。 enumList 必选 指示枚举值。 如电池状态(batteryStatus)可有如下取值: "enumList" : [0, 1, 2, 3, 4, 5, 6] 目前本字段是非功能性字段,仅起到描述作用,建议准确定义。
-
命名规范 在Profile的开发过程中,需要遵循如下命名规范: 设备类型(deviceType)、服务类型(serviceType)、服务标识(serviceId)采用单词首字母大写的命名法。例如:WaterMeter、Battery。 属性使用第一个单词首字母小写,其余单词的首字母大写的命名法。例如:batteryLevel、internalTemperature。 命令使用所有字母大写,单词间用下划线连接的格式。例如:DISCOVERY,CHANGE_COLOR。 设备能力描述json文件固定命名devicetype-capability.json。 服务能力描述json文件固定命名servicetype-capability.json。 厂商ID和型号唯一标识一款产品,故这些信息的组合在不同的Profile文件中不能重复,且仅支持英文。 要注重名称的通用性,简洁性;对于服务能力描述,还要考虑其功能性。例如:对于多传感器设备,可以命名为MultiSensor;对于具有显示电量的服务,可以命名为Battery。
-
Profile模板 将一款新设备接入到物联网平台,首先需要编写这款设备的Profile。物联网平台提供了一些Profile文件模板,如果新增接入设备的类型和功能服务已经在物联网平台提供的设备Profile模板中包含,则可以直接选择使用;如果在物联网平台提供的设备Profile模板中未包含,则需要自己定义。 例如:接入一款水表 ,可以直接选择物联网平台上对应的Profile模板,修改设备型号标识属性和设备服务列表。 物联网平台提供的Profile模板会不断更新,如下表格列举设备类型和服务类型示例,仅供参考。 设备型号识别属性: 属性 Profile中key 属性值 设备类型 deviceType WaterMeter 厂商ID manufacturerId TestUtf8ManuId 厂商名称 manufacturerName HZYB 型号 model NBIoTDevice 协议类型 protocolType CoAP 设备的服务列表 服务描述 服务标识(serviceId) 服务类型(serviceType) 选项(option) 水表的基本功能 WaterMeterBasic Water Mandatory 告警服务 WaterMeterAlarm Battery Mandatory 电池服务 Battery Battery Optional 数据的上报规则 DeliverySchedule DeliverySchedule Mandatory 水表的连通性 Connectivity Connectivity Mandatory
-
编解码插件打包 插件变成完成后,需要使用Maven打包成jar包,并制作成插件包。 Maven打包 打开DOS窗口,进入“pom.xml”所在的目录。 输入maven打包命令:mvn package。 DOS窗口中显示“BUILD SUC CES S”后,打开与“pom.xml”目录同级的target文件夹,获取打包好的jar包。 jar包命名规范为:设备类型-厂商ID-设备型号-版本.jar,例如:WaterMeter-Huawei-NBIoTDevice-version.jar。 com目录存放的是class文件。 META-INF下存放的是OSGI框架下的jar的描述文件(根据pom.xml配置生成的)。 OSGI-INF下存放的是服务配置文件,把编解码注册为服务,供平台调用(只能有一个xml文件)。 其他jar是编解码引用到的jar包。 制作插件包 新建文件夹命名为“package”,包含一个“preload/”子文件夹。 将打包好的jar包放到“preload/”文件夹。 在“package”文件夹中,新建“package-info.json”文件。该文件的字段说明和模板如下: 注:“package-info.json”需要以UTF-8无BOM格式编码。仅支持英文字符。 表4 “package-info.json”字段说明 字段名 字段描述 是否必填 specVersion 描述文件版本号,填写固定值:"1.0"。 是 fileName 软件包文件名,填写固定值:"codec-demo" 是 version 软件包版本号。描述package.zip的版本,请与下面的bundleVersion取值保持一致。 是 deviceType 设备类型,与Profile文件中的定义保持一致。 是 manufacturerName 制造商名称,与Profile文件中的定义保持一致,否则无法上传到平台。 是 model 产品型号,与Profile文件中的定义保持一致。 是 platform 平台类型,本插件包运行的物联网平台的操作系统,填写固定值:"linux"。 是 packageType 软件包类型,该字段用来描述本插件最终部署的平台模块,填写固定值:"CIGPlugin"。 是 date 出包时间,格式为:"yyyy-MM-dd HH-mm-ss",如"2017-05-06 20:48:59"。 否 description 对软件包的自定义描述。 否 ignoreList 忽略列表,默认为空值。 是 bundles 一组bundle的描述信息。 注:bundle就是压缩包中的jar包,只需要写一个bundle。 是 表5 bundles的字段说明 字段名 字段描述 是否必填 bundleName 插件名称,和上文中pom.xml的Bundle-SymbolicName保持一致。 是 bundleVersion 插件版本,与上面的version取值保持一致。 是 priority 插件优先级,可赋值默认值:5。 是 fileName 插件jar的文件名称。 是 bundleDesc 插件描述,用来介绍bundle功能。 是 versionDesc 插件版本描述,用来介绍版本更迭时的功能特性。 是 package-info.json文件模板: { "specVersion":"1.0", "fileName":"codec-demo", "version":"1.0.0", "deviceType":"WaterMeter", "manufacturerName":"Huawei", "model":"NBIoTDevice", "description":"codec", "platform":"linux", "packageType":"CIGPlugin", "date":"2017-02-06 12:16:59", "ignoreList":[], "bundles":[ { "bundleName": "WaterMeter-Huawei-NBIoTDevice", "bundleVersion": "1.0.0", "priority":5, "fileName": "WaterMeter-Huawei-NBIoTDevice-1.0.0.jar", "bundleDesc":"", "versionDesc":"" }] } 选中“package”文件夹中的全部文件,打包成zip格式(“package.zip”)。 注:“package.zip”中不能包含“package”这层目录。
-
编解码插件质检 编解码插件的质检用于检验编解码是否可以正常使用。 获取编解码插件检测工具。 将检测工具“pluginDetector.jar”、Profile文件的“devicetype-capability.json”和需要检测的编解码插件包“package.zip”和tool文件夹放在同一个目录下。 获取设备数据上报的码流,并在检测工具的“data report”页签,将码流以十六进制格式输入,例如:AA72000032088D0320623399。 点击检测工具的“start detect”,查看解码后的json数据。 日志文本框会打印解码数据,如果提示“report data is success”,表示解码成功。 如果提示“ERROR”,表示解码出现错误。 当解码成功后,检测工具会继续调用编解码插件包的encode方法,对应答消息进行编码。 当提示“encode ack result success”时,表示对设备的应答消息编码成功。 获取应用服务器下发的命令(应用服务器通过调用物联网平台的“创建设备命令”接口进行命令下发),并在检测工具的“data report”页签输入。 点击检测工具的“start detect”,检测工具会调用encode接口对控制命令进行编码。 如果提示“encode cmd result success”,表示对命令编码成功;如果提示“ERROR”,表示对命令编码出现错误。 命令示例: { "identifier": "123", "msgType": "cloudReq", "serviceId": "NBWaterMeterCommon", "cmd": "SET_DEVICE_LEVEL", "mid": 2016, "paras": { "value": "10" }, "hasMore": 0 } 获取设备命令执行结果上报的码流,并在检测工具的“data report”页签,将码流以十六进制格式输入,例如:AA7201000107E0。 点击检测工具的“start detect”,查看解码后的Json数据。 日志文本框会打印解码数据,如果提示“report command result success”,表示解码成功;如果提示“ERROR”,表示解码出现错误。
-
decode接口说明 decode接口的入参binaryData为设备发过来的CoAP报文的payload部分。 设备的上行报文有两种情况需要插件处理(消息④是模组回复的协议ACK,无需插件处理): 设备上报数据(对应图中的消息①) 字段名 类型 是否必填 参数描述 identifier String 否 设备在应用协议里的标识,物联网平台通过decode接口解析码流时获取该参数,通过encode接口编码时将该参数放入码流。 msgType String 是 固定值"deviceReq",表示设备上报数据。 hasMore Int 否 表示设备是否还有后续数据上报,0表示没有,1表示有。 后续数据是指,设备上报的某条数据可能分成多次上报,在本次上报数据后,物联网平台以hasMore字段判定后续是否还有消息。hasMore字段仅在PSM模式下生效,当上报数据的hasMore字段为1时,物联网平台暂时不下发缓存命令,直到收到hasMore字段为0的上报数据,才下发缓存命令。如上报数据不携带hasMore字段,则物联网平台按照hasMore字段为0处理。 data ArrayNode 是 设备上报数据的内容。 表1 ArrayNode定义 字段名 类型 是否必填 参数描述 serviceId String 是 服务的id。 serviceData ObjectNode 是 一个服务的数据,具体字段在profile里定义。 eventTime String 否 设备采集数据时间(格式:yyyyMMddTHHmmssZ)。 如:20161219T114920Z。 示例: { "identifier": "123", "msgType": "deviceReq", "hasMore": 0, "data": [{ "serviceId": "NBWaterMeterCommon", "serviceData": { "meterId": "xxxx", "dailyActivityTime": 120, "flow": "565656", "cellId": "5656", "signalStrength": "99", "batteryVoltage": "3.5" }, "eventTime": "20160503T121540Z" }, { "serviceId": "waterMeter", "serviceData": { "internalTemperature": 256 }, "eventTime": "20160503T121540Z" }] } 设备对平台命令的应答(对应图中的消息⑤) 字段名 类型 参数描述 是否必填 identifier String 设备在应用协议里的标识,物联网平台通过decode接口解析码流时获取该参数,通过encode接口编码时将该参数放入码流。 否 msgType String 固定值"deviceRsp",表示设备的应答消息。 是 mid Int 2字节无符号的命令id。在设备需要返回命令执行结果(deviceRsp)时,用于将命令执行结果(deviceRsp)与对应的命令进行关联。 物联网平台在通过encode接口下发命令时,把物联网平台分配的mid放入码流,和命令一起下发给设备;设备在上报命令执行结果(deviceRsp)时,再将此mid返回给物联网平台。否则物联网平台无法将下发命令和命令执行结果(deviceRsp)进行关联,也就无法根据命令执行结果(deviceRsp)更新命令下发的状态(成功或失败)。 是 errcode Int 请求处理的结果码,物联网平台根据该参数判断命令下发的状态。 0表示成功,1表示失败。 是 body ObjectNode 命令的应答,具体字段由profile定义。 注:body体不是数组。 否 示例: { "identifier": "123", "msgType": "deviceRsp", "mid": 2016, "errcode": 0, "body": { "result": 0 } }
-
编解码插件的输入/输出格式样例 假定某款水表支持的服务定义如下: 服务类型 属性名称 属性说明 属性类型(数据类型) Battery - - - - batteryLevel 电量(0--100)% int Meter - - - - signalStrength 信号强度 int - currentReading 当前读数 int - dailyActivityTime 日激活通讯时长 string 那么数据上报时decode接口的输出: { "identifier": "12345678", "msgType": "deviceReq", "data": [ { "serviceId": "Meter", "serviceData": { "currentReading": "46.3", "signalStrength": 16, "dailyActivityTime": 5706 }, "eventTime": "20160503T121540Z" }, { "serviceId": "Battery", "serviceData": { "batteryLevel": 10 }, "eventTime": "20160503T121540Z" } ] } 收到数据上报后,平台对设备的应答响应,调用encode接口编码,输入为 { "identifier": "123", "msgType": "cloudRsp", "request":[ 1, 2 ], "errcode": 0, "hasMore": 0 } 假定某款水表支持的命令定义如下: 基本功能名称 分类 名称 命令参数 数据类型 枚举值 WaterMeter 水表 - - - - - CMD SET_TEMPERATURE_READ_PERIOD - - - - - - value int - - RSP SET_TEMPERATURE_READ_PERIOD_RSP - - - - - - result int 0表示成功,1表示输入非法,2表示执行失败 那么命令下发调用encode接口时,输入为 { "identifier": "12345678", "msgType": "cloudReq", "serviceId": "WaterMeter", "cmd": "SET_TEMPERATURE_READ_PERIOD", "paras": { "value": 4 }, "hasMore": 0 } 收到设备的命令应答后,调用decode接口解码,解码的输出 { "identifier": "123", "msgType": "deviceRsp", "errcode": 0, "body": { "result": 0 } }
-
encode接口说明 encode接口的入参是JSON格式的数据,是平台下发的命令或应答。 平台的下行报文可以分为两种情况: 平台对设备上报数据的应答(对应图中的消息②) 表2 平台收到设备的上报数据后对设备的应答encode接口的入参结构定义 字段名 类型 参数描述 是否必填 identifier String 设备在应用协议里的标识,物联网平台通过decode接口解析码流时获取该参数,通过encode接口编码时将该参数放入码流。 否 msgType String 固定值"cloudRsp",表示平台收到设备的数据后对设备的应答。 是 request byte[] 设备上报的数据。 是 errcode int 请求处理的结果码,物联网平台根据该参数判断命令下发的状态。 0表示成功,1表示失败。 是 hasMore int 表示平台是否还有后续消息下发,0表示没有,1表示有。 后续消息是指,平台还有待下发的消息,以hasMore字段告知设备不要休眠。hasMore字段仅在PSM模式下生效,且需要“下行消息指示”开启。 是 注:在cloudRsp场景下编解码插件检测工具显示返回null时,表示插件未定义上报数据的应答,设备侧不需要物联网平台给予响应。 示例: { "identifier": "123", "msgType": "cloudRsp", "request": [ 1, 2 ], "errcode": 0, "hasMore": 0 } 平台命令下发(对应图中的消息③) 表3 平台下发命令encode接口的入参结构定义 字段名 类型 参数描述 是否必填 identifier String 设备在应用协议里的标识,物联网平台通过decode接口解析码流时获取该参数,通过encode接口编码时将该参数放入码流。 否 msgType String 固定值"cloudReq",表示平台下发的请求。 是 serviceId String 服务的id。 是 cmd String 服务的命令名,参见profile的服务命令定义。 是 paras ObjectNode 命令的参数,具体字段由profile定义。 是 hasMore Int 表示平台是否还有后续命令下发,0表示没有,1表示有。 后续命令是指,平台还有待下发的消息,以hasMore字段告知设备不要休眠。hasMore字段仅在PSM模式下生效,且需要“下行消息指示”开启。 是 mid Int 2字节无符号的命令id,由物联网平台内部分配(范围1-65535)。 物联网平台在通过encode接口下发命令时,把物联网平台分配的mid放入码流,和命令一起下发给设备;设备在上报命令执行结果(deviceRsp)时,再将此mid返回物联网平台。否则物联网平台无法将下发命令和命令执行结果(deviceRsp)进行关联,也就无法根据命令执行结果(deviceRsp)更新命令下发的状态(成功或失败)。 是 示例: { "identifier": "123", "msgType": "cloudReq", "serviceId": "NBWaterMeterCommon", "mid": 2016, "cmd": "SET_TEMPERATURE_READ_PERIOD", "paras": { "value": 4 }, "hasMore": 0} }
-
业务概览 当用户在开通设备管理服务时,系统默认一起开通设备接入服务,即用户在使用设备管理服务时,包含设备接入服务的能力。使用设备管理服务的完整流程如下图所示,主要分为在开发中心(测试环境)进行产品开发、在控制台(商用环境)进行上线和日常管理。 产品开发:开发者在进行设备接入前,基于开发中心进行相应的开发工作,包括平台侧开发、设备侧开发、应用侧开发,是真实设备接入到设备管理服务的前提条件。 上线(转商用):基于设备管理服务提供的控制台,将真实设备接入到设备管理服务中,并对接用户开发的应用服务器,实现设备的远程监控和控制。 日常管理:真实设备接入后,基于控制台或者API接口,进行日常的应用管理和设备管理。 远端开发 转商用 设备侧开发 云端日常管理 创建项目 创建产品 开发Profile 开发编解码插件 设备侧开发 应用侧开发 API使用指导 使用SDK对接 调测产品 自助测试 产品发布 创建应用 导入产品 注册设备 接入设备 应用接入 对接验证 使用MQ TTS 协议接入(联通用户专用) 使用Modbus协议接入(联通用户专用) 使用Agent SDK接入 使用模组接入 软固件升级调测 应用管理 订阅推送 授权访问 设备管理 设备注册鉴权 数据上报 命令下发 设备配置更新 设备影子 规则引擎 群组与标签 设备监控 远程诊断 固件升级 软件升级 网关与子设备
-
开发中心与设备管理服务的差异 了解开发中心 开发中心是基于设备管理服务提供的物联网一站式开发工具,帮助开发者快速进行Profile(产品模型)和编解码插件的开发,同时提供在线自助测试、产品发布等多种能力,端到端指引物联网开发,帮助开发者提升集成开发效率、缩短物联网解决方案建设周期。 产品开发:提供产品开发向导,端到端引导开发者完成Profile开发、插件开发以及产品调测,助力物联网产品快速上线。 应用开发:支持对接信息、订阅调试、应用调试等能力,帮助开发者进行应用侧开发和调试,助力物联网应用便捷开发。 自助测试:支持对设备、应用进行自动化测试,并生成测试报告,检验产品是否达到发布标准。 产品发布:产品在开发中心完成自助测试后,开发者可以一键申请发布到产品中心,已发布的产品可直接应用于商用环境。 了解设备管理服务 请前往平台简介查看设备管理服务的介绍。 开发中心和设备管理服务有哪些差异? 两者所在的物联网平台环境不一样 开发中心所在的平台环境为测试环境,设备管理服务所在的平台环境为商用环境。两个环境的设备数据不能互通,已对接测试环境的设备/应用要迁移商用环境,需要在商用环境重新创建应用和注册设备,并修改设备/应用中平台的接入信息。 两者的设备数量限制不一样 开发中心单个项目(应用)下最多可注册20个设备,设备管理服务单个应用下最多可注册1000万个设备。在其他的平台能力上,两者保持一致,例如开发中心和设备管理服务使用同样的API,更多的平台能力使用限制请查看使用限制。 两者的计费策略不一样 开发中心为免费使用,设备管理为付费使用,设备管理服务的具体计费策略请查看计费详情。 开发中心和设备接入服务是否有联系? 开发中心是基于设备管理服务的物联网开发工具,在开发中心上开发的产品(Profile文件和编解码插件)只适用于设备管理服务,不能在设备接入服务中导入和使用。
-
方案概述 基于设备管理服务去实现一个物联网解决方案时,需要完成以下开发操作: 开发操作 开发说明 平台侧的开发 主要包括Profile的开发和编解码插件的开发。编解码插件的开发仅针对上报数据为二进制码流格式的设备,对于上报数据为JSON格式的设备不需要开发编解码插件。 设备侧的开发 主要为设备与物联网平台的集成对接开发,包括设备接入物联网平台、业务数据上报和对平台下发控制命令的处理。 应用侧的开发 主要为业务应用与物联网平台的集成对接开发,包括API接口的调用、业务数据的获取和HTTPS证书的管理。 基于物联网平台开发一个物联网解决方案的工作流程请参考从这里开始。
-
使用在线模拟器调试 模拟器在线调测具备设备模拟和应用模拟功能,可以对定义的Profile文件和编解码插件进行调试,用户可以直观的感受设备上报数据到物联网平台,以及使用物联网平台下发远程控制命令。 在“产品开发”页面进入到创建的产品中,选择“在线调测”,并单击“新增测试设备”。 选择“没有真实的物理设备”,使用模拟器进行调测,单击“创建”后,系统会默认创建一个模拟设备,并接入调测界面。 模拟设备数据上报场景,假设上报路灯采集的光照强度为:20,路灯开关状态为:0(关闭),则在设备模拟器中,输入十六进制码流:1400(光照强度消息为第一个字节,对应的十六进制码流为14;路灯开关状态为第二字节,对应的十六进制码流为00),然后单击“发送”,我们可以在应用模拟器中看到转换为JSON格式的数据为:"Light_Intensity": 20, "Light_Status": 0。 模拟远程下发控制命令场景,在应用模拟器中,选择服务:StreetLight,命令:SWITCH_LIGHT,命令取值为:ON,单击“立即发送”,我们可以在设备模拟器中看到转换为十六进制的码流:4F4E(经ASCLL码转为为十六进制)。
-
产品在线开发 产品模型(也称Profile)用于描述设备具备的能力和特性。开发者通过定义Profile文件,在物联网平台构建一款设备的抽象模型,使平台理解该款设备支持的服务、属性、命令等信息,例如温度、光强度、开关等。 本示例以一款智慧路灯为例进行描述,假设路灯设备上报一条数据消息,包含路灯的光照强度(Light_Intensity)和路灯的开关状态(Light_Status);支持远程控制路灯开关状态的命令(SWITCH_LIGHT)。 在“产品开发”界面,点击“新建产品”,然后选择“自定义产品”。 在弹出的对话框中,设置产品信息,完成后点击“创建”。 进入到Profile定义界面后,点击“新建服务”,填写服务信息,然后点击“√”。 定义路灯上报的环境光强度和路灯开关状态的属性。首先输入“服务名称”:StreetLight,然后点击“新增属性”。 首先定义一条属性为:路灯采集的当前环境的光照强度,数据类型为int,光照强度范围为:0~100。 再点击“添加属性”按钮,定义一条属性为:路灯当前的开关灯状态,数据类型为int,0代表关闭,1代表打开状态。 接下来定义远程控制开关灯状态的命令。点击“添加命令”按钮,定义命令名称为:SWITCH_LIGHT。 点击“添加下发命令字段”,命令名称为:SWITCH_LIGHT,数据类型为:string,长度为:3个字符,枚举值为:ON,OFF。 点击“确定”按钮,完成该路灯的Profile文件创建。
-
开发中心申请和创建项目 用户第一次使用物联网平台云服务时,首先需要申请开通“开发中心”服务。基于开发中心,用户可以在线开发设备的Profile文件和编解码插件;另外开发中心提供了设备和应用模拟器,可以便捷地调测开发的Profile文件和编解码插件的正确性。 登录华为云官方网站,访问IoT设备管理服务。 在设备管理云服务首页,点击“开发中心”开通业务。 填写开通信息,本示例以选择“智能路灯解决方案”为例,点击“立即开通”。 (可选)进入“开发中心”首页后,如果用户是第一次使用,首先需要点击右上角的“厂商信息”,编辑并完善厂商信息后,返回主页。 在“开发中心”首页,点击“新建项目”,创建一个新的物联网产品项目,填写项目名称、所属行业后,点击“确定”。 创建完项目后,会生成应用ID和应用密钥,请将密钥下载到本地并妥善保管,然后进入项目。 应用密钥用于应用服务器接入的鉴权,在界面上不可见,请妥善保管,如果忘记了密钥,可以在“对接信息”功能中,对密钥进行重置。 项目创建完成后,可以在“对接信息”中,查看项目的基本信息,例如设备接入信息、应用接入信息、重置密钥等。
-
编解码插件在线开发 通常情况下设备为了省电,设备会采用“二进制”格式上报数据,编解码插件的作用就是将设备上报的“二进制”格式数据,按照Profile文件的定义的属性转换为“JSON”格式数据,便于物联网平台和应用服务器识别。同时,用户远程下发控制命令时,物联网平台会将“JSON”格式的命令转换为“二进制”格式数据下发给设备。 注:如果设备本身上报的是JSON格式数据,则不需要定义编解码插件,如使用Agent Lite接入的设备。 在“产品开发”页面进入到创建的产品中,选择“编解码插件开发”。 在“在线编解码插件编辑器”中,点击“新增消息”。 输入消息名:LightData,消息类型选择:数据上报,然后再点击“添加字段”。 输入上报消息的名字:LightIntensity,数据类型:int8u(8位无符号整型),长度:1字节,单击“完成”。 再次单击“添加字段”,添加路灯上报的路灯开关状态数据。 输入名字:LightStatus,数据类型:int8u(8位无符号整型),长度:1字节,单击“完成”。 单击“完成”,完成路灯上报数据的编解码定义。 再次单击“新增消息”,定义远程控制路灯开关的命令对应的编解码插件消息。 输入消息名:SwitchStatus,消息类型选择:命令下发,然后再点击“添加字段”。 输入名字:SwitchStatus,数据类型:string(字符串类型),长度:3字符,单击“完成”。 单击“完成”,完成远程控制命令的编解码定义。 拖动右侧“设备模型”区域的属性字段和命令字段(Profile文件定义的字段),与编解码插件定义的数据上报消息和命令下发消息的相应字段建立映射关系。 编解码插件与Profile文件建立映射完成后,单击右上角“保存”,并单击“部署”,完成编解码插件的部署。
-
开发Modbus设备产品模型 产品模型(也称Profile)是用于描述Modbus设备具备的能力,通过定义产品模型,在物联网平台构建一款设备的抽象在线开发Profile型,使平台理解该款Modbus设备支持的服务、属性、命令等信息,如温度、电量等。Modbus设备的产品模型定义分为两部分:包含Modbus设备的能力(图中红色框内容)和定义Modbus点位表(图中蓝色框内容),如图所示。属性和命令的定义请根据在线开发Profile,在定义属性和命令的基础上,再定义Modbus点位表,下面将详细介绍点位表的定义方法。 登录物联网平台控制台,点击右上角进入“开发中心”。 定义Modbus设备的属性和Modbus点位表,属性的定义请参考在线开发Profile文件,然后定义定位表(上图中的新增扩展描述)字段,原则如下表所示。 参数名称 参数说明 Modbus读功能码 读功能码分为“比特访问(Bit Access)”和“16比特访问(16 Bit Access)”,功能码均为十进制。 比特访问功能码: 01:读线圈(Read Coils) 02:读输入离散量(Read Discrete Inputs) 16比特访问功能码: 03:读多个寄存器(Read Holding Registers) 04:读单个寄存器(Read Input Register) Modbus写功能码 写功能码分为“比特访问(Bit Access)”和“16比特访问(16 Bit Access)”,功能码均为十进制。 说明: 定义属性时,无需填写该字段。定义命令时,需要填写。 比特访问功能码: 05:写单个线圈(Write Single Coil) 15:写多个线圈(Write Multiple Coils) 16比特访问功能码: 06:写单个寄存器(Write Single Register) 16:写多个寄存器(Write Multiple Registers) 寄存器起始地址 寄存器起始地址,占16比特,例如:00 01 寄存器数量 属性对应的数据所在的寄存器个数,占16比特,例如:00 02 交换寄存器内高低字节 是否对寄存器内的数据进行高低位交换,默认:True。例如寄存器中存储的属性数据为:10011011,则IoT边缘节点获取的数据经过高低位交互后为:01100111。 交互寄存器顺序 是否对寄存器的位置进行交换,默认:True。例如寄存器的起始地址为0001,寄存器数量为0002,则将0002地址寄存器与0001地址寄存器进行交换。 缩放因子 对寄存器内的数据进行乘以缩放因子,得到所需的数据,例如获取的温度数据为365,缩放因子为0.1,则得到实际的温度数据为365*0.1=36.5 定义Modbus设备的属性和Modbus点位表,命令的定义请参考在线开发Profile文件,然后定义定位表(上图中的新增扩展描述)字段,点位表的填写原则如2中的表格所示。 定义完属性和命令后,请将Profile文件进行导入,然后根据添加Modbus设备操作,在设备管理服务中导入开发的Modbus设备产品模型。
-
为Modbus设备绑定通道 根据概述中的Modbus接入组网方案可以知道,Modbus设备在接入IoT边缘节点时,需要将Modbus设备绑定到具体的通道中。如果Modbus设备与IoT边缘节点直连,则该通道只能绑定该设备;如果Modbus设备与IoT边缘节点通过网关连接,则需要创建IoT边缘节点与网关之间的传输通道,并将Modbus设备绑定到指定的通道中。 在边缘节点设备的详情界面中,选择“配置”页签。 单击右上角的“通道”按钮,在弹出的对话框中单击“添加”按钮,填写通道信息后单击“确定”,完成TCP传输通道的添加。 参数名称 参数说明 通道名称 定义IoT边缘节点与Modbus设备或网关之间的传输通道。如:Channel_TCP01 传输模式 固定选择“TCP”。 IP地址 IoT边缘节点与Modbus设备或网关建立TCP传输通道时,IoT边缘节点作为客户端,Modbus设备或网关作为服务端,因此该地址需要填写为Modbus设备(直连)或网关(Modbus设备非直连接入IoT边缘节点)的IP地址。如:192.168.10.11 端口 TCP服务端(Modbus设备或网关)的端口号。如:8000 Modbus设备通过网关接入到IoT边缘节点时,如果添加设备前,已经创建了相应的通道,可以不用再执行该步骤,直接按照步骤3绑定Modbus设备即可。 在“配置”页签中,单击“绑定子设备”按钮,然后单击“添加”按钮。 在弹出的添加子设备配置页面中,选择需要绑定的Modbus设备,然后点击“下一步”。 在弹出的对话框中,填写相关信息后,单击“提交”,完成Modbus设备的通道绑定。配置完成后,设备管理服务会将配置信息下发给IoT边缘节点。 参数名称 参数说明 关联通道 选择需要将Modbus设备绑定的通道,如:Channel_TCP01 从站号 用于标识同一个通道下的不同Modbus设备。填写原则:需要与Modbus设备规划的从站号保持一致。 数据采集间隔 IoT边缘节点采集Modbus设备数据的时间间隔,单位为:秒,最小采集间隔可设置为1秒。请根据Modbus设备数据采集的实际周期进行灵活设置。 执行完以上操作后,Modbus设备上电接入到IoT边缘节点后,经过一个数据采集周期即可在设备管理服务的设备列表中查看采集的设备数据。
-
概述 Modbus协议目前已经成为工业领域通信协议的业界标准,是工业电子设备之间最常用的连接方式。使用Modbus协议的方式包括直连和非直连两种方式,组网方案如下图所示。 接入方式 方案说明 适用场景 直连接入 Modbus设备直接与边缘节点进行连接,通过TCP协议通信。边缘节点作为客户端,Modbus设备作为服务端进行连接。该方式中,在传输通道绑定设备时,边缘节点与Modbus设备之间的通道只能绑定一个设备。 Modbus设备具备TCP通信能力。 说明: Modbus设备具备TCP能力,但如果IP资源比较受限,无法为每一个Modbus设备分配一个IP地址,也可采用非直连方式进行连接组网。 非直连接入 Modbus设备通过RTU串口与网关进行连接,然后边缘节点通过TCP协议与网关进行通信。网关作为Master节点,Modbus设备作为Slave节点进行连接。该方式中,在传输通道(边缘节点与网关之间的TCP传输通道)绑定设备时,需要将该网关下的Modbus设备绑定到指定的通道,并且,在同一个传输通道中,通过“从站号”区分不同的Modbus设备。 Modbus设备不具备TCP通信能力,只能通过RTU(串口)方式进行通信。 在数据采集时,边缘节点可根据指定的数据采集间隔时间,主动向Modbus设备或通过网关向Modbus设备进行数据的采集,数据格式为二进制格式。数据采集完成后,IoT边缘服务将采集的数据规整(Json格式)后,通过MQTT的方式将数据上报到设备管理。
-
接入流程 业务场景 操作步骤 说明 设备准备 准备Modbus网关 购买支持Modbus协议的网关(Modbus设备与网关支持通过RTU通信,网关与边缘节点采用TCP通信) 准备Modbus设备 购买支持Modbus协议的传感器设备 物联网平台侧操作 开发Modbus设备产品模型 在产品中心开发Modbus设备的产品模型 添加Modbus设备 在边缘节点下,添加Modbus设备 创建Modbus通道和绑定设备 将Modbus设备绑定到指定的TCP传输通道
-
控制命令下发测试 控制命令下发测试用于测试设备接收和处理控制命令的能力,目的是验证Profile中定义的命令字段是否正确。如果平台与设备交互的“数据格式”为二进制码流,还会验证编解码插件与Profile的映射关系是否正确。由于下发的命令是立即下发模式,设备需要在线。 如果使用业务应用进行测试,还会测试业务应用是否正确调用物联网平台“创建设备命令”接口给设备下发命令的能力。 在控制命令下发测试界面,单击“下一步”开始测试。 根据向导进入测试界面,物联网平台会根据Profile的定义向设备下发一条命令。在真实设备应答后,查看测试用例执行结果。 如果是使用业务应用接入物联网平台,则操作业务应用向设备下发一条命令,在真实设备应答后,进入“上传应用下发命令截图”界面,单击界面中的“+”,上传业务应用命令下发成功的截图。此图作为业务应用正确调用物理网平台“创建设备命令”接口的凭证。 测试成功,单击“下一步”进入下一阶段测试。 测试失败,排查并处理问题后,单击“重新测试”重测测试用例。
-
设备绑定测试 设备绑定测试用于测试设备接入物联网平台的能力,包括设备注册和设备上线两个步骤。 设备绑定测试是进行其他测试的前提条件,如果测试失败,则无法进行其他测试。 在设备绑定测试界面,单击“下一步”,进入注册设备界面。 根据向导进入测试界面,选择“安全模式”,并填写“设备标识”和“模组名称”,单击“下一步”。 如果安全模式选择“加密”,还需要填写“PSK”。 如果不是使用模组进行测试,则“模组名称”填写无。 根据向导操作真实设备接入物联网平台进行绑定,查看测试用例执行结果。 测试成功,单击“下一步”进入下一阶段测试。 测试失败,排查并处理问题后,单击“重新测试”重测测试用例。
-
数据上报测试 数据上报测试用于测试设备上报数据的能力,目的是验证Profile中定义的属性字段是否正确。如果物联网平台与设备交互的“数据格式”为二进制码流,还会验证编解码插件与Profile的映射关系是否正确。 在数据上报测试界面,单击“下一步”开始测试。 根据向导进入测试界面,操作真实设备上报Profile中定义的属性数据,如果设备的所有属性数据都已上报完成,可以点击“终止测试”完成数据上报测试并查看测试用例执行结果。 测试成功,单击“下一步”进入下一阶段测试。 测试失败,排查并处理问题后,单击“重新测试”重测测试用例。 平台会检测所有上报成功的属性数据,并记录到测试报告中,重复上报的属性只会记录一次。
共100000条
- 1
- ...
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575
- 576
- 577
- 578
- 579
- 580
- 581
- 582
- 583
- 584
- 585
- 586
- 587
- 588
- 589
- 590
- 591
- 592
- 593
- 594
- 595
- 596
- 597
- 598
- 599
- 600
- 601
- 602
- 603
- 604
- 605
- 606
- 607
- 608
- 609
- 610
- 611
- 612
- 613
- 614
- 615
- 616
- 617
- 618
- 619
- 620
- 621
- 622
- 623
- 624
- 625
- 626
- 627
- 628
- 629
- 630
- 631
- 632
- 633
- 634
- 635
- 636
- 637
- 638
- 639
- 640
- 641
- 642
- 643
- 644
- 645
- 646
- 647
- 648
- 649
- 650
- 651
- 652
- 653
- 654
- 655
- 656
- 657
- 658
- 659
- 660
- 661
- 662
- 663
- 664
- 665
- 666
- 667
- 668
- 669
- 670
- 671
- 672
- 673
- 674
- 675
- 676
- 677
- 678
- 679
- 680
- 681
- 682
- 683
- 684
- 685
- 686
- 687
- 688
- 689
- 690
- 691
- 692
- 693
- 694
- 695
- 696
- 697
- 698
- 699
- 700
- 701
- 702
- 703
- 704
- 705
- 706
- 707
- 708
- 709
- 710
- 711
- 712
- 713
- 714
- 715
- 716
- 717
- 718
- 719
- 720
- 721
- 722
- 723
- 724
- 725
- 726
- 727
- 728
- 729
- 730
- 731
- 732
- 733
- 734
- 735
- 736
- 737
- 738
- 739
- 740
- 741
- 742
- 743
- 744
- 745
- 746
- 747
- 748
- 749
- 750
- 751
- 752
- 753
- 754
- 755
- 756
- 757
- 758
- 759
- 760
- 761
- 762
- 763
- 764
- 765
- 766
- 767
- 768
- 769
- 770
- 771
- 772
- 773
- 774
- 775
- 776
- 777
- 778
- 779
- 780
- 781
- 782
- 783
- 784
- 785
- 786
- 787
- 788
- 789
- 790
- 791
- 792
- 793
- 794
- 795
- 796
- 797
- 798
- 799
- 800
- 801
- 802
- 803
- 804
- 805
- 806
- 807
- 808
- 809
- 810
- 811
- 812
- 813
- 814
- 815
- 816
- 817
- 818
- 819
- 820
- 821
- 822
- 823
- 824
- 825
- 826
- 827
- 828
- 829
- 830
- 831
- 832
- 833
- 834
- 835
- 836
- 837
- 838
- 839
- 840
- 841
- 842
- 843
- 844
- 845
- 846
- 847
- 848
- 849
- 850
- 851
- 852
- 853
- 854
- 855
- 856
- 857
- 858
- 859
- 860
- 861
- 862
- 863
- 864
- 865
- 866
- 867
- 868
- 869
- 870
- 871
- 872
- 873
- 874
- 875
- 876
- 877
- 878
- 879
- 880
- 881
- 882
- 883
- 884
- 885
- 886
- 887
- 888
- 889
- 890
- 891
- 892
- 893
- 894
- 895
- 896
- 897
- 898
- 899
- 900
- 901
- 902
- 903
- 904
- 905
- 906
- 907
- 908
- 909
- 910
- 911
- 912
- 913
- 914
- 915
- 916
- 917
- 918
- 919
- 920
- 921
- 922
- 923
- 924
- 925
- 926
- 927
- 928
- 929
- 930
- 931
- 932
- 933
- 934
- 935
- 936
- 937
- 938
- 939
- 940
- 941
- 942
- 943
- 944
- 945
- 946
- 947
- 948
- 949
- 950
- 951
- 952
- 953
- 954
- 955
- 956
- 957
- 958
- 959
- 960
- 961
- 962
- 963
- 964
- 965
- 966
- 967
- 968
- 969
- 970
- 971
- 972
- 973
- 974
- 975
- 976
- 977
- 978
- 979
- 980
- 981
- 982
- 983
- 984
- 985
- 986
- 987
- 988
- 989
- 990
- 991
- 992
- 993
- 994
- 995
- 996
- 997
- 998
- 999
- 1000
- 1001
- 1002
- 1003
- 1004
- 1005
- 1006
- 1007
- 1008
- 1009
- 1010
- 1011
- 1012
- 1013
- 1014
- 1015
- 1016
- 1017
- 1018
- 1019
- 1020
- 1021
- 1022
- 1023
- 1024
- 1025
- 1026
- 1027
- 1028
- 1029
- 1030
- 1031
- 1032
- 1033
- 1034
- 1035
- 1036
- 1037
- 1038
- 1039
- 1040
- 1041
- 1042
- 1043
- 1044
- 1045
- 1046
- 1047
- 1048
- 1049
- 1050
- 1051
- 1052
- 1053
- 1054
- 1055
- 1056
- 1057
- 1058
- 1059
- 1060
- 1061
- 1062
- 1063
- 1064
- 1065
- 1066
- 1067
- 1068
- 1069
- 1070
- 1071
- 1072
- 1073
- 1074
- 1075
- 1076
- 1077
- 1078
- 1079
- 1080
- 1081
- 1082
- 1083
- 1084
- 1085
- 1086
- 1087
- 1088
- 1089
- 1090
- 1091
- 1092
- 1093
- 1094
- 1095
- 1096
- 1097
- 1098
- 1099
- 1100
- 1101
- 1102
- 1103
- 1104
- 1105
- 1106
- 1107
- 1108
- 1109
- 1110
- 1111
- 1112
- 1113
- 1114
- 1115
- 1116
- 1117
- 1118
- 1119
- 1120
- 1121
- 1122
- 1123
- 1124
- 1125
- 1126
- 1127
- 1128
- 1129
- 1130
- 1131
- 1132
- 1133
- 1134
- 1135
- 1136
- 1137
- 1138
- 1139
- 1140
- 1141
- 1142
- 1143
- 1144
- 1145
- 1146
- 1147
- 1148
- 1149
- 1150
- 1151
- 1152
- 1153
- 1154
- 1155
- 1156
- 1157
- 1158
- 1159
- 1160
- 1161
- 1162
- 1163
- 1164
- 1165
- 1166
- 1167
- 1168
- 1169
- 1170
- 1171
- 1172
- 1173
- 1174
- 1175
- 1176
- 1177
- 1178
- 1179
- 1180
- 1181
- 1182
- 1183
- 1184
- 1185
- 1186
- 1187
- 1188
- 1189
- 1190
- 1191
- 1192
- 1193
- 1194
- 1195
- 1196
- 1197
- 1198
- 1199
- 1200
- 1201
- 1202
- 1203
- 1204
- 1205
- 1206
- 1207
- 1208
- 1209
- 1210
- 1211
- 1212
- 1213
- 1214
- 1215
- 1216
- 1217
- 1218
- 1219
- 1220
- 1221
- 1222
- 1223
- 1224
- 1225
- 1226
- 1227
- 1228
- 1229
- 1230
- 1231
- 1232
- 1233
- 1234
- 1235
- 1236
- 1237
- 1238
- 1239
- 1240
- 1241
- 1242
- 1243
- 1244
- 1245
- 1246
- 1247
- 1248
- 1249
- 1250
- 1251
- 1252
- 1253
- 1254
- 1255
- 1256
- 1257
- 1258
- 1259
- 1260
- 1261
- 1262
- 1263
- 1264
- 1265
- 1266
- 1267
- 1268
- 1269
- 1270
- 1271
- 1272
- 1273
- 1274
- 1275
- 1276
- 1277
- 1278
- 1279
- 1280
- 1281
- 1282
- 1283
- 1284
- 1285
- 1286
- 1287
- 1288
- 1289
- 1290
- 1291
- 1292
- 1293
- 1294
- 1295
- 1296
- 1297
- 1298
- 1299
- 1300
- 1301
- 1302
- 1303
- 1304
- 1305
- 1306
- 1307
- 1308
- 1309
- 1310
- 1311
- 1312
- 1313
- 1314
- 1315
- 1316
- 1317
- 1318
- 1319
- 1320
- 1321
- 1322
- 1323
- 1324
- 1325
- 1326
- 1327
- 1328
- 1329
- 1330
- 1331
- 1332
- 1333
- 1334
- 1335
- 1336
- 1337
- 1338
- 1339
- 1340
- 1341
- 1342
- 1343
- 1344
- 1345
- 1346
- 1347
- 1348
- 1349
- 1350
- 1351
- 1352
- 1353
- 1354
- 1355
- 1356
- 1357
- 1358
- 1359
- 1360
- 1361
- 1362
- 1363
- 1364
- 1365
- 1366
- 1367
- 1368
- 1369
- 1370
- 1371
- 1372
- 1373
- 1374
- 1375
- 1376
- 1377
- 1378
- 1379
- 1380
- 1381
- 1382
- 1383
- 1384
- 1385
- 1386
- 1387
- 1388
- 1389
- 1390
- 1391
- 1392
- 1393
- 1394
- 1395
- 1396
- 1397
- 1398
- 1399
- 1400
- 1401
- 1402
- 1403
- 1404
- 1405
- 1406
- 1407
- 1408
- 1409
- 1410
- 1411
- 1412
- 1413
- 1414
- 1415
- 1416
- 1417
- 1418
- 1419
- 1420
- 1421
- 1422
- 1423
- 1424
- 1425
- 1426
- 1427
- 1428
- 1429
- 1430
- 1431
- 1432
- 1433
- 1434
- 1435
- 1436
- 1437
- 1438
- 1439
- 1440
- 1441
- 1442
- 1443
- 1444
- 1445
- 1446
- 1447
- 1448
- 1449
- 1450
- 1451
- 1452
- 1453
- 1454
- 1455
- 1456
- 1457
- 1458
- 1459
- 1460
- 1461
- 1462
- 1463
- 1464
- 1465
- 1466
- 1467
- 1468
- 1469
- 1470
- 1471
- 1472
- 1473
- 1474
- 1475
- 1476
- 1477
- 1478
- 1479
- 1480
- 1481
- 1482
- 1483
- 1484
- 1485
- 1486
- 1487
- 1488
- 1489
- 1490
- 1491
- 1492
- 1493
- 1494
- 1495
- 1496
- 1497
- 1498
- 1499
- 1500
- 1501
- 1502
- 1503
- 1504
- 1505
- 1506
- 1507
- 1508
- 1509
- 1510
- 1511
- 1512
- 1513
- 1514
- 1515
- 1516
- 1517
- 1518
- 1519
- 1520
- 1521
- 1522
- 1523
- 1524
- 1525
- 1526
- 1527
- 1528
- 1529
- 1530
- 1531
- 1532
- 1533
- 1534
- 1535
- 1536
- 1537
- 1538
- 1539
- 1540
- 1541
- 1542
- 1543
- 1544
- 1545
- 1546
- 1547
- 1548
- 1549
- 1550
- 1551
- 1552
- 1553
- 1554
- 1555
- 1556
- 1557
- 1558
- 1559
- 1560
- 1561
- 1562
- 1563
- 1564
- 1565
- 1566
- 1567
- 1568
- 1569
- 1570
- 1571
- 1572
- 1573
- 1574
- 1575
- 1576
- 1577
- 1578
- 1579
- 1580
- 1581
- 1582
- 1583
- 1584
- 1585
- 1586
- 1587
- 1588
- 1589
- 1590
- 1591
- 1592
- 1593
- 1594
- 1595
- 1596
- 1597
- 1598
- 1599
- 1600
- 1601
- 1602
- 1603
- 1604
- 1605
- 1606
- 1607
- 1608
- 1609
- 1610
- 1611
- 1612
- 1613
- 1614
- 1615
- 1616
- 1617
- 1618
- 1619
- 1620
- 1621
- 1622
- 1623
- 1624
- 1625
- 1626
- 1627
- 1628
- 1629
- 1630
- 1631
- 1632
- 1633
- 1634
- 1635
- 1636
- 1637
- 1638
- 1639
- 1640
- 1641
- 1642
- 1643
- 1644
- 1645
- 1646
- 1647
- 1648
- 1649
- 1650
- 1651
- 1652
- 1653
- 1654
- 1655
- 1656
- 1657
- 1658
- 1659
- 1660
- 1661
- 1662
- 1663
- 1664
- 1665
- 1666
- 1667
- 1668
- 1669
- 1670
- 1671
- 1672
- 1673
- 1674
- 1675
- 1676
- 1677
- 1678
- 1679
- 1680
- 1681
- 1682
- 1683
- 1684
- 1685
- 1686
- 1687
- 1688
- 1689
- 1690
- 1691
- 1692
- 1693
- 1694
- 1695
- 1696
- 1697
- 1698
- 1699
- 1700
- 1701
- 1702
- 1703
- 1704
- 1705
- 1706
- 1707
- 1708
- 1709
- 1710
- 1711
- 1712
- 1713
- 1714
- 1715
- 1716
- 1717
- 1718
- 1719
- 1720
- 1721
- 1722
- 1723
- 1724
- 1725
- 1726
- 1727
- 1728
- 1729
- 1730
- 1731
- 1732
- 1733
- 1734
- 1735
- 1736
- 1737
- 1738
- 1739
- 1740
- 1741
- 1742
- 1743
- 1744
- 1745
- 1746
- 1747
- 1748
- 1749
- 1750
- 1751
- 1752
- 1753
- 1754
- 1755
- 1756
- 1757
- 1758
- 1759
- 1760
- 1761
- 1762
- 1763
- 1764
- 1765
- 1766
- 1767
- 1768
- 1769
- 1770
- 1771
- 1772
- 1773
- 1774
- 1775
- 1776
- 1777
- 1778
- 1779
- 1780
- 1781
- 1782
- 1783
- 1784
- 1785
- 1786
- 1787
- 1788
- 1789
- 1790
- 1791
- 1792
- 1793
- 1794
- 1795
- 1796
- 1797
- 1798
- 1799
- 1800
- 1801
- 1802
- 1803
- 1804
- 1805
- 1806
- 1807
- 1808
- 1809
- 1810
- 1811
- 1812
- 1813
- 1814
- 1815
- 1816
- 1817
- 1818
- 1819
- 1820
- 1821
- 1822
- 1823
- 1824
- 1825
- 1826
- 1827
- 1828
- 1829
- 1830
- 1831
- 1832
- 1833
- 1834
- 1835
- 1836
- 1837
- 1838
- 1839
- 1840
- 1841
- 1842
- 1843
- 1844
- 1845
- 1846
- 1847
- 1848
- 1849
- 1850
- 1851
- 1852
- 1853
- 1854
- 1855
- 1856
- 1857
- 1858
- 1859
- 1860
- 1861
- 1862
- 1863
- 1864
- 1865
- 1866
- 1867
- 1868
- 1869
- 1870
- 1871
- 1872
- 1873
- 1874
- 1875
- 1876
- 1877
- 1878
- 1879
- 1880
- 1881
- 1882
- 1883
- 1884
- 1885
- 1886
- 1887
- 1888
- 1889
- 1890
- 1891
- 1892
- 1893
- 1894
- 1895
- 1896
- 1897
- 1898
- 1899
- 1900
- 1901
- 1902
- 1903
- 1904
- 1905
- 1906
- 1907
- 1908
- 1909
- 1910
- 1911
- 1912
- 1913
- 1914
- 1915
- 1916
- 1917
- 1918
- 1919
- 1920
- 1921
- 1922
- 1923
- 1924
- 1925
- 1926
- 1927
- 1928
- 1929
- 1930
- 1931
- 1932
- 1933
- 1934
- 1935
- 1936
- 1937
- 1938
- 1939
- 1940
- 1941
- 1942
- 1943
- 1944
- 1945
- 1946
- 1947
- 1948
- 1949
- 1950
- 1951
- 1952
- 1953
- 1954
- 1955
- 1956
- 1957
- 1958
- 1959
- 1960
- 1961
- 1962
- 1963
- 1964
- 1965
- 1966
- 1967
- 1968
- 1969
- 1970
- 1971
- 1972
- 1973
- 1974
- 1975
- 1976
- 1977
- 1978
- 1979
- 1980
- 1981
- 1982
- 1983
- 1984
- 1985
- 1986
- 1987
- 1988
- 1989
- 1990
- 1991
- 1992
- 1993
- 1994
- 1995
- 1996
- 1997
- 1998
- 1999
- 2000
- 2001
- 2002
- 2003
- 2004
- 2005
- 2006
- 2007
- 2008
- 2009
- 2010
- 2011
- 2012
- 2013
- 2014
- 2015
- 2016
- 2017
- 2018
- 2019
- 2020
- 2021
- 2022
- 2023
- 2024
- 2025
- 2026
- 2027
- 2028
- 2029
- 2030
- 2031
- 2032
- 2033
- 2034
- 2035
- 2036
- 2037
- 2038
- 2039
- 2040
- 2041
- 2042
- 2043
- 2044
- 2045
- 2046
- 2047
- 2048
- 2049
- 2050
- 2051
- 2052
- 2053
- 2054
- 2055
- 2056
- 2057
- 2058
- 2059
- 2060
- 2061
- 2062
- 2063
- 2064
- 2065
- 2066
- 2067
- 2068
- 2069
- 2070
- 2071
- 2072
- 2073
- 2074
- 2075
- 2076
- 2077
- 2078
- 2079
- 2080
- 2081
- 2082
- 2083
- 2084
- 2085
- 2086
- 2087
- 2088
- 2089
- 2090
- 2091
- 2092
- 2093
- 2094
- 2095
- 2096
- 2097
- 2098
- 2099
- 2100
- 2101
- 2102
- 2103
- 2104
- 2105
- 2106
- 2107
- 2108
- 2109
- 2110
- 2111
- 2112
- 2113
- 2114
- 2115
- 2116
- 2117
- 2118
- 2119
- 2120
- 2121
- 2122
- 2123
- 2124
- 2125
- 2126
- 2127
- 2128
- 2129
- 2130
- 2131
- 2132
- 2133
- 2134
- 2135
- 2136
- 2137
- 2138
- 2139
- 2140
- 2141
- 2142
- 2143
- 2144
- 2145
- 2146
- 2147
- 2148
- 2149
- 2150
- 2151
- 2152
- 2153
- 2154
- 2155
- ...
- 2156
- 2157
- 2158
- 2159
- 2160
- 2161
- 2162
- 2163
- 2164
- 2165
- 2166
- 2167
- 2168
- 2169
- 2170
- 2171
- 2172
- 2173
- 2174
- 2175
- 2176
- 2177
- 2178
- 2179
- 2180
- 2181
- 2182
- 2183
- 2184
- 2185
- 2186
- 2187
- 2188
- 2189
- 2190
- 2191
- 2192
- 2193
- 2194
- 2195
- 2196
- 2197
- 2198
- 2199
- 2200
- 2201
- 2202
- 2203
- 2204
- 2205
- 2206
- 2207
- 2208
- 2209
- 2210
- 2211
- 2212
- 2213
- 2214
- 2215
- 2216
- 2217
- 2218
- 2219
- 2220
- 2221
- 2222
- 2223
- 2224
- 2225
- 2226
- 2227
- 2228
- 2229
- 2230
- 2231
- 2232
- 2233
- 2234
- 2235
- 2236
- 2237
- 2238
- 2239
- 2240
- 2241
- 2242
- 2243
- 2244
- 2245
- 2246
- 2247
- 2248
- 2249
- 2250
- 2251
- 2252
- 2253
- 2254
- 2255
- 2256
- 2257
- 2258
- 2259
- 2260
- 2261
- 2262
- 2263
- 2264
- 2265
- 2266
- 2267
- 2268
- 2269
- 2270
- 2271
- 2272
- 2273
- 2274
- 2275
- 2276
- 2277
- 2278
- 2279
- 2280
- 2281
- 2282
- 2283
- 2284
- 2285
- 2286
- 2287
- 2288
- 2289
- 2290
- 2291
- 2292
- 2293
- 2294
- 2295
- 2296
- 2297
- 2298
- 2299
- 2300
- 2301
- 2302
- 2303
- 2304
- 2305
- 2306
- 2307
- 2308
- 2309
- 2310
- 2311
- 2312
- 2313
- 2314
- 2315
- 2316
- 2317
- 2318
- 2319
- 2320
- 2321
- 2322
- 2323
- 2324
- 2325
- 2326
- 2327
- 2328
- 2329
- 2330
- 2331
- 2332
- 2333
- 2334
- 2335
- 2336
- 2337
- 2338
- 2339
- 2340
- 2341
- 2342
- 2343
- 2344
- 2345
- 2346
- 2347
- 2348
- 2349
- 2350
- 2351
- 2352
- 2353
- 2354
- 2355
- 2356
- 2357
- 2358
- 2359
- 2360
- 2361
- 2362
- 2363
- 2364
- 2365
- 2366
- 2367
- 2368
- 2369
- 2370
- 2371
- 2372
- 2373
- 2374
- 2375
- 2376
- 2377
- 2378
- 2379
- 2380
- 2381
- 2382
- 2383
- 2384
- 2385
- 2386
- 2387
- 2388
- 2389
- 2390
- 2391
- 2392
- 2393
- 2394
- 2395
- 2396
- 2397
- 2398
- 2399
- 2400
- 2401
- 2402
- 2403
- 2404
- 2405
- 2406
- 2407
- 2408
- 2409
- 2410
- 2411
- 2412
- 2413
- 2414
- 2415
- 2416
- 2417
- 2418
- 2419
- 2420
- 2421
- 2422
- 2423
- 2424
- 2425
- 2426
- 2427
- 2428
- 2429
- 2430
- 2431
- 2432
- 2433
- 2434
- 2435
- 2436
- 2437
- 2438
- 2439
- 2440
- 2441
- 2442
- 2443
- 2444
- 2445
- 2446
- 2447
- 2448
- 2449
- 2450
- 2451
- 2452
- 2453
- 2454
- 2455
- 2456
- 2457
- 2458
- 2459
- 2460
- 2461
- 2462
- 2463
- 2464
- 2465
- 2466
- 2467
- 2468
- 2469
- 2470
- 2471
- 2472
- 2473
- 2474
- 2475
- 2476
- 2477
- 2478
- 2479
- 2480
- 2481
- 2482
- 2483
- 2484
- 2485
- 2486
- 2487
- 2488
- 2489
- 2490
- 2491
- 2492
- 2493
- 2494
- 2495
- 2496
- 2497
- 2498
- 2499
- 2500
- 2501
- 2502
- 2503
- 2504
- 2505
- 2506
- 2507
- 2508
- 2509
- 2510
- 2511
- 2512
- 2513
- 2514
- 2515
- 2516
- 2517
- 2518
- 2519
- 2520
- 2521
- 2522
- 2523
- 2524
- 2525
- 2526
- 2527
- 2528
- 2529
- 2530
- 2531
- 2532
- 2533
- 2534
- 2535
- 2536
- 2537
- 2538
- 2539
- 2540
- 2541
- 2542
- 2543
- 2544
- 2545
- 2546
- 2547
- 2548
- 2549
- 2550
- 2551
- 2552
- 2553
- 2554
- 2555
- 2556
- 2557
- 2558
- 2559
- 2560
- 2561
- 2562
- 2563
- 2564
- 2565
- 2566
- 2567
- 2568
- 2569
- 2570
- 2571
- 2572
- 2573
- 2574
- 2575
- 2576
- 2577
- 2578
- 2579
- 2580
- 2581
- 2582
- 2583
- 2584
- 2585
- 2586
- 2587
- 2588
- 2589
- 2590
- 2591
- 2592
- 2593
- 2594
- 2595
- 2596
- 2597
- 2598
- 2599
- 2600
- 2601
- 2602
- 2603
- 2604
- 2605
- 2606
- 2607
- 2608
- 2609
- 2610
- 2611
- 2612
- 2613
- 2614
- 2615
- 2616
- 2617
- 2618
- 2619
- 2620
- 2621
- 2622
- 2623
- 2624
- 2625
- 2626
- 2627
- 2628
- 2629
- 2630
- 2631
- 2632
- 2633
- 2634
- 2635
- 2636
- 2637
- 2638
- 2639
- 2640
- 2641
- 2642
- 2643
- 2644
- 2645
- 2646
- 2647
- 2648
- 2649
- 2650
- 2651
- 2652
- 2653
- 2654
- 2655
- 2656
- 2657
- 2658
- 2659
- 2660
- 2661
- 2662
- 2663
- 2664
- 2665
- 2666
- 2667
- 2668
- 2669
- 2670
- 2671
- 2672
- 2673
- 2674
- 2675
- 2676
- 2677
- 2678
- 2679
- 2680
- 2681
- 2682
- 2683
- 2684
- 2685
- 2686
- 2687
- 2688
- 2689
- 2690
- 2691
- 2692
- 2693
- 2694
- 2695
- 2696
- 2697
- 2698
- 2699
- 2700
- 2701
- 2702
- 2703
- 2704
- 2705
- 2706
- 2707
- 2708
- 2709
- 2710
- 2711
- 2712
- 2713
- 2714
- 2715
- 2716
- 2717
- 2718
- 2719
- 2720
- 2721
- 2722
- 2723
- 2724
- 2725
- 2726
- 2727
- 2728
- 2729
- 2730
- 2731
- 2732
- 2733
- 2734
- 2735
- 2736
- 2737
- 2738
- 2739
- 2740
- 2741
- 2742
- 2743
- 2744
- 2745
- 2746
- 2747
- 2748
- 2749
- 2750
- 2751
- 2752
- 2753
- 2754
- 2755
- 2756
- 2757
- 2758
- 2759
- 2760
- 2761
- 2762
- 2763
- 2764
- 2765
- 2766
- 2767
- 2768
- 2769
- 2770
- 2771
- 2772
- 2773
- 2774
- 2775
- 2776
- 2777
- 2778
- 2779
- 2780
- 2781
- 2782
- 2783
- 2784
- 2785
- 2786
- 2787
- 2788
- 2789
- 2790
- 2791
- 2792
- 2793
- 2794
- 2795
- 2796
- 2797
- 2798
- 2799
- 2800
- 2801
- 2802
- 2803
- 2804
- 2805
- 2806
- 2807
- 2808
- 2809
- 2810
- 2811
- 2812
- 2813
- 2814
- 2815
- 2816
- 2817
- 2818
- 2819
- 2820
- 2821
- 2822
- 2823
- 2824
- 2825
- 2826
- 2827
- 2828
- 2829
- 2830
- 2831
- 2832
- 2833
- 2834
- 2835
- 2836
- 2837
- 2838
- 2839
- 2840
- 2841
- 2842
- 2843
- 2844
- 2845
- 2846
- 2847
- 2848
- 2849
- 2850
- 2851
- 2852
- 2853
- 2854
- 2855
- 2856
- 2857
- 2858
- 2859
- 2860
- 2861
- 2862
- 2863
- 2864
- 2865
- 2866
- 2867
- 2868
- 2869
- 2870
- 2871
- 2872
- 2873
- 2874
- 2875
- 2876
- 2877
- 2878
- 2879
- 2880
- 2881
- 2882
- 2883
- 2884
- 2885
- 2886
- 2887
- 2888
- 2889
- 2890
- 2891
- 2892
- 2893
- 2894
- 2895
- 2896
- 2897
- 2898
- 2899
- 2900
- 2901
- 2902
- 2903
- 2904
- 2905
- 2906
- 2907
- 2908
- 2909
- 2910
- 2911
- 2912
- 2913
- 2914
- 2915
- 2916
- 2917
- 2918
- 2919
- 2920
- 2921
- 2922
- 2923
- 2924
- 2925
- 2926
- 2927
- 2928
- 2929
- 2930
- 2931
- 2932
- 2933
- 2934
- 2935
- 2936
- 2937
- 2938
- 2939
- 2940
- 2941
- 2942
- 2943
- 2944
- 2945
- 2946
- 2947
- 2948
- 2949
- 2950
- 2951
- 2952
- 2953
- 2954
- 2955
- 2956
- 2957
- 2958
- 2959
- 2960
- 2961
- 2962
- 2963
- 2964
- 2965
- 2966
- 2967
- 2968
- 2969
- 2970
- 2971
- 2972
- 2973
- 2974
- 2975
- 2976
- 2977
- 2978
- 2979
- 2980
- 2981
- 2982
- 2983
- 2984
- 2985
- 2986
- 2987
- 2988
- 2989
- 2990
- 2991
- 2992
- 2993
- 2994
- 2995
- 2996
- 2997
- 2998
- 2999
- 3000
- 3001
- 3002
- 3003
- 3004
- 3005
- 3006
- 3007
- 3008
- 3009
- 3010
- 3011
- 3012
- 3013
- 3014
- 3015
- 3016
- 3017
- 3018
- 3019
- 3020
- 3021
- 3022
- 3023
- 3024
- 3025
- 3026
- 3027
- 3028
- 3029
- 3030
- 3031
- 3032
- 3033
- 3034
- 3035
- 3036
- 3037
- 3038
- 3039
- 3040
- 3041
- 3042
- 3043
- 3044
- 3045
- 3046
- 3047
- 3048
- 3049
- 3050
- 3051
- 3052
- 3053
- 3054
- 3055
- 3056
- 3057
- 3058
- 3059
- 3060
- 3061
- 3062
- 3063
- 3064
- 3065
- 3066
- 3067
- 3068
- 3069
- 3070
- 3071
- 3072
- 3073
- 3074
- 3075
- 3076
- 3077
- 3078
- 3079
- 3080
- 3081
- 3082
- 3083
- 3084
- 3085
- 3086
- 3087
- 3088
- 3089
- 3090
- 3091
- 3092
- 3093
- 3094
- 3095
- 3096
- 3097
- 3098
- 3099
- 3100
- 3101
- 3102
- 3103
- 3104
- 3105
- 3106
- 3107
- 3108
- 3109
- 3110
- 3111
- 3112
- 3113
- 3114
- 3115
- 3116
- 3117
- 3118
- 3119
- 3120
- 3121
- 3122
- 3123
- 3124
- 3125
- 3126
- 3127
- 3128
- 3129
- 3130
- 3131
- 3132
- 3133
- 3134
- 3135
- 3136
- 3137
- 3138
- 3139
- 3140
- 3141
- 3142
- 3143
- 3144
- 3145
- 3146
- 3147
- 3148
- 3149
- 3150
- 3151
- 3152
- 3153
- 3154
- 3155
- 3156
- 3157
- 3158
- 3159
- 3160
- 3161
- 3162
- 3163
- 3164
- 3165
- 3166
- 3167
- 3168
- 3169
- 3170
- 3171
- 3172
- 3173
- 3174
- 3175
- 3176
- 3177
- 3178
- 3179
- 3180
- 3181
- 3182
- 3183
- 3184
- 3185
- 3186
- 3187
- 3188
- 3189
- 3190
- 3191
- 3192
- 3193
- 3194
- 3195
- 3196
- 3197
- 3198
- 3199
- 3200
- 3201
- 3202
- 3203
- 3204
- 3205
- 3206
- 3207
- 3208
- 3209
- 3210
- 3211
- 3212
- 3213
- 3214
- 3215
- 3216
- 3217
- 3218
- 3219
- 3220
- 3221
- 3222
- 3223
- 3224
- 3225
- 3226
- 3227
- 3228
- 3229
- 3230
- 3231
- 3232
- 3233
- 3234
- 3235
- 3236
- 3237
- 3238
- 3239
- 3240
- 3241
- 3242
- 3243
- 3244
- 3245
- 3246
- 3247
- 3248
- 3249
- 3250
- 3251
- 3252
- 3253
- 3254
- 3255
- 3256
- 3257
- 3258
- 3259
- 3260
- 3261
- 3262
- 3263
- 3264
- 3265
- 3266
- 3267
- 3268
- 3269
- 3270
- 3271
- 3272
- 3273
- 3274
- 3275
- 3276
- 3277
- 3278
- 3279
- 3280
- 3281
- 3282
- 3283
- 3284
- 3285
- 3286
- 3287
- 3288
- 3289
- 3290
- 3291
- 3292
- 3293
- 3294
- 3295
- 3296
- 3297
- 3298
- 3299
- 3300
- 3301
- 3302
- 3303
- 3304
- 3305
- 3306
- 3307
- 3308
- 3309
- 3310
- 3311
- 3312
- 3313
- 3314
- 3315
- 3316
- 3317
- 3318
- 3319
- 3320
- 3321
- 3322
- 3323
- 3324
- 3325
- 3326
- 3327
- 3328
- 3329
- 3330
- 3331
- 3332
- 3333
- 3333