华为云用户手册
-
数据上报测试 数据上报测试用于测试设备上报数据的能力,目的是验证Profile中定义的属性字段是否正确。如果 物联网平台 与设备交互的“数据格式”为二进制码流,还会验证编解码插件与Profile的映射关系是否正确。 在数据上报测试界面,单击“下一步”开始测试。 根据向导进入测试界面,操作真实设备上报Profile中定义的属性数据,如果设备的所有属性数据都已上报完成,可以点击“终止测试”完成数据上报测试并查看测试用例执行结果。 测试成功,单击“下一步”进入下一阶段测试。 测试失败,排查并处理问题后,单击“重新测试”重测测试用例。 平台会检测所有上报成功的属性数据,并记录到测试报告中,重复上报的属性只会记录一次。
-
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的合法性。
-
服务能力定义样例 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
-
设备能力定义样例 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格式),具体配置信息由设备商自定义。物联网平台只储存该信息供下发时使用,不解析处理配置字段的具体含义。
-
编解码插件质检 编解码插件的质检用于检验编解码是否可以正常使用。 获取编解码插件检测工具。 将检测工具“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”,表示解码出现错误。
-
编解码插件的输入/输出格式样例 假定某款水表支持的服务定义如下: 服务类型 属性名称 属性说明 属性类型(数据类型) 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 }}
-
编解码插件打包 插件变成完成后,需要使用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”这层目录。
-
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} }
-
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 } }
-
应用开发资源 为了降低应用的开发难度、提升开发效率,物联网平台开放了丰富的Restful API和SDK包。应用通过调用物联网平台的API,实现安全接入、设备管理、数据采集、命令下发等业务场景。 资源包名 描述 下载 应用侧开发 API JAVA Demo 物联网平台为应用服务器提供了Restful API,能够让开发者快速验证Restful接口开放的能力,体验业务功能,熟悉业务流程。 使用指南可以参考IoT平台应用侧API参考。 API JAVA Demo 应用侧开发 Java SDK Java SDK提供JAVA方法调用物联网平台Restful接口与平台通信,Demo提供调用SDK接口的样例代码。 使用指南可以参考IoT平台应用侧JAVA SDK API参考和JAVA SDK 使用指南 JAVA SDK JAVA SDK Demo 应用侧开发 Python SDK Python SDK提供Python方法调用平台Restful接口与平台通信,Demo提供调用SDK接口的样例代码。 使用指南可以参考IoT平台应用侧Python SDK API参考和Python SDK使用指南。 Python SDK Python SDK Demo
-
证书资源 在设备和应用对接物联网平台的部分场景中,需要在设备侧和应用侧集成相应证书。请点击获取证书文件。 此证书文件只适用于华为云物联网平台。 证书类型,证书格式,以及适用开发语言,用途详见下表。 证书包名称 一级目录 二级目录 三级目录 说明 certificate Northbound API code Java 应用服务器通过HTTPS协议调用物联网平台接口,用于校验物联网平台的合法性时,使用该目录下的证书。请根据应用服务器侧的编程语言选择相应目录下的证书文件,并置于应用服务器侧。 PHP Python postman - Postman通过HTTPS协议调试物联网平台接口时,使用该目录下的证书。 Agent Lite Android - 终端设备或网关通过集成Agent Lite SDK接入物联网平台时,使用该目录下的证书。请根据终端设备或网关侧的编程语言选择相应目录下的证书文件,并置于终端设备或网关侧。 C-Linux - Java -
-
设备开发资源 物联网平台支持设备通过MQTT协议和LWM2M/CoAP协议进行接入,设备可以通过调用设备侧的接口或者集成SDK的方式接入到物联网平台。 资源包名 描述 下载路径 Agent Lite SDK(Linux C) 设备可以通过集成Agent Lite SDK接入物联网平台, Demo提供了调用SDK接口的样例代码。 使用指导可以参考 Agent Lite API参考(C)和Agent Lite SDK使用指南(C)。 Agent Lite SDK(Linux通用) Agent Lite SDK(指定工具链) Agent Lite Demo(C-Linux) Agent Lite SDK(Windows C) 设备可以通过集成Agent Lite SDK接入物联网平台, Demo提供了调用SDK接口的样例代码。 使用指导可以参考 Agent Lite API参考(C)和Agent Lite SDK使用指南(C)。 Agent Lite SDK(Windows) Agent Lite Demo(C-Windows) 说明: Demo的libs文件夹下为32位SDK,若需要使用64位SDK,请下载并替换Demo中的SDK。 Agent Lite SDK(Java) 设备可以通过集成Agent Lite SDK接入物联网平台, Demo提供了调用SDK接口的样例代码。 使用指导可以参考 Agent Lite API参考(Java)和Agent Lite SDK使用指南(Java)。 Agent Lite Demo(Java) 说明: SDK在Demo的libs文件夹下。 Agent Lite Demo(Java)仅适用于Windows系统环境。 Agent Lite SDK(Android) 设备可以通过集成Agent Lite SDK接入物联网平台, Demo提供了调用SDK接口的样例代码。 使用指导可以参考 Agent Lite API参考(Android)和Agent Lite SDK使用指南(Android)。 Agent Lite Demo(Android) 说明: SDK在Demo的libs文件夹下。 LiteOS SDK 设备可以通过集成LiteOS SDK接入物联网平台,Demo提供了调用SDK接口的样例代码。 LiteOS SDK Profile模板 Profile模板中包含了典型场景的Profile样例,开发者可以在模板基础进行修改,定义自己需要的Profile。 使用指导可以参考离线开发Profile。 Profile开发示例 编解码插件样例 编解码插件的代码样例工程,开发者可以基于该样例工程进行二次开发。 使用指导可以参考离线开发插件。 编解码插件开发样例 编解码插件检测工具 用于检测离线开发的编解码插件的编解码能力是否正常。 编解码插件检测工具 NB-IoT设备模拟器 用于模拟以CoAP/LWM2M协议接入物联网平台的NB设备,实现数据上报和命令下发功能。 使用指导可以参考体验开发中心。 NB-IoT设备模拟器 IoT Studio IoT Studio是基于LiteOS嵌入式系统软件开发的工具,支持C,C++、汇编等多种开发语言,提供了代码编辑、编译、烧录及调试等一站式开发体验。 使用指导可以参考设备侧开发实践。 IoT Studio
-
在线开发Profile(联通用户专用) 非联通用户请查看 设备接入服务 。 在线创建Profile前需要先创建项目并定义产品。创建产品需要输入manufactureId、manufactureName、deviceType、Model等信息,Profile会使用这些信息作为设备能力字段取值。在产品创建时,如果选择使用系统模板,则系统将会自动使用相应的Profile模板,您可以直接使用或在此基础上进行修改;如果选择自定义产品模板,则需要完整定义Profile。 本节定义包含一个服务的Profile为示例,该Profile包含设备上报数据、下发命令、下发命令响应、软固件升级等场景的服务和字段。 在“产品开发”界面选择产品,选择具体产品,进入该产品的开发空间。 在产品开发空间,点击“Profile定义”,然后点击“新建服务”。 在“新建服务”区域,对服务名称、属性和命令进行定义。每个服务下,可以包含属性和命令,也可以只包含其中之一,请根据此类设备的实际情况进行配置。 填写“服务名称”,“服务名称”采用首字母大写的命名方式,比如:WaterMeter、Battery。 点击“添加属性”,在弹出窗口中配置属性的各项参数,点击“确定”。 名称:首位必须为字母,建议采用驼峰形式,如batteryLevel、internalTemperature。 数据类型:配置可参考如下原则: int:当上报的数据为整数或布尔值时,可以配置为此类型。 decimal:当上报的数据为小数时,可以配置为此类型。配置“经纬度”属性时,数据类型建议使用“decimal”。 string:当上报的数据为字符串、枚举值或布尔值时,可以配置为此类型。如果为枚举值或布尔值,值之间需要用英文逗号(“,”)分隔。 DateTime:当上报的数据为日期时,可以配置为此类型。 jsonObject:当上报的数据为json结构体时,可以配置为此类型。 访问模式:设置应用服务器通过接口访问数据的模式: R:通过接口可以查询该属性。 W:通过接口可以修改该属性值。 E:应用服务器订阅了数据变化通知后,设备上报了属性,应用服务器会收到推送通知。 是否必选:设备上报的这个属性是不是必选。 点击“添加命令”,在弹出窗口中配置“命令名称”,点击“确定”。“命令名称”首位必须为字母,建议采用全大写形式,单词间用下划线连接的命名方式,如DISCOVERY,CHANGE_STATUS。 点击“添加下发命令字段”,在弹出窗口中配置下发命令字段的各项参数,点击“确定”。“下发命令字段名称”首位必须为字母,建议采用第一个单词首字母小写,其余单词的首字母大写的命名方式,比如valueChange;其余参数,请根据此类设备的实际情况进行配置。 如果要添加命令响应,点击“添加响应命令字段”,在弹出窗口中配置响应命令字段的各项参数,点击“确定”。“响应命令字段名称”首位必须为字母,建议采用第一个单词首字母小写,其余单词的首字母大写的命名方式,比如valueResult;其余参数,请根据此类设备的实际情况进行配置。 如果要添加软件/固件升级能力,在“维护能力配置 ”下,开启“软件升级”/“固件升级”。 提交后,Profile中会自动多出一个“DM服务”应用于升级。 父主题: 开发Profile
-
接口介绍 API分组 应用场景 应用安全接入 本部分接口提供“鉴权”以及“刷新token”两个接口。应用服务器通过调用这两个接口获取鉴权令牌,是调用其他平台API的前提,其他接口调用都需要在请求的Header中携带参数app_key和Authorization。 app_key取值与请求参数中appId相同。 Authorization的格式为Authorization: Bearer {accessToken}。 关于应用安全接入的接口一般有两种调用模式,一种是每次业务处理前都调用一下鉴权接口重新获取token,然后用token来调用其他业务接口;另外一种是应用服务器有一个有效管理机制,通过定期地刷新token,保证在调用其他业务接口前token都是有效的。 设备管理 本部分接口提供设备管理的相关功能。设备作为一种资源,设备管理接口提供了注册设备,删除设备,修改设备信息、位置信息等。查询设备信息的接口归类在“数据采集”中。 平台的接入的设备有两种,直连设备和非直连设备。 直连设备指已实现TCP/IP协议栈的设备,它可以直接与平台进行通信,常见的设备包括网关、以太网设备、NB-IoT设备等。 非直连设备指未实现TCP/IP协议栈的设备,只能基于一些简单的近场通信协议如ZigBee、ZWave、Bluetooth或者是其他的一些非IP有线方式传输协议如串口、并口等接入,此时需要一个网关设备,先让设备接入到网关,再通过网关与华为物联网平台通信。 设备管理的接口中提供了发现非直连设备、删除非直连设备等接口。如果您的方案中不包含非直连设备,则不需要调用这两个接口。 数据采集 数据采集接口提供设备的查询、批量设备查询、设备历史数据和历史命令的查询、设备能力(即profile中定义的设备能力)查询。 当应用服务器向平台查询设备的历史数据和历史命令时,这些数据已经存储在物联网平台上,因此与设备是否在线无关。 订阅管理 物联网平台允许应用服务器订阅其所关注的事件,每一种事件的每一次订阅都会生成一个subscriptionId,应用服务器可以使用subscriptionId对本次订阅进行查询、更新、删除等操作。 平台是通过Restful接口向应用服务器推送数据的,因此应用服务器需要开发一个Restful接口来接收推送数据,这个接口的URL也需要在订阅时提供给物联网平台。由于不同事件的推送消息结构不同,因此应用服务器可以考虑为每一种事件实现一个Restful接口。 注意事项: 关于平台上的事件种类和推送的消息样例,请参考推送通知。 https推送的前提是先在平台上上传应用服务器的CA证书。 命令下发 本部分接口提供命令的创建、删除、查询、批量创建等功能。 批量处理 目前仅支持创建批量下发缓存命令任务,您也可以查询批量任务信息。 设备组管理 应用服务器可以通过本部分接口在物联网平台上管理设备组。设备组是把设备进行分组管理。一个设备可以归属到多个设备组内。 在对设备进行某些操作时(如升级设备软固件、批量下发命令等),可通过设备组来指定要进行操作的设备。 设备升级 若需要对设备进行软固件版本升级,应用服务器可调用本部分接口为多个设备创建升级任务,升级前请确保目标版本包已经上传到物联网平台。当前仅支持对CoAP接入的设备进行软固件版本升级。
-
准备工作 注册华为帐号并开通华为云,完成实名认证。 使用华为帐号登录HiLens控制台,选择专业版,选择“北京四”区域。 技能订阅:用户提供北京四的project_id和iam_id,用于共享定制技能。提供账号信息后,等待技能提供方共享技能;共享成功后,用户在HiLens技能市场购买相关的技能(如:AR巡检演示Demo需要skill-xr3d-3ddetection和skill-xr3d-edge-server两个技能) 边缘服务服器:系统:ubuntu18.04,不修改内核,显卡3080、3090(支持cuda11.1),安装新版的nvidia驱动(如:470.63.01)
-
获取当前帧图像 定义:Void GetPictureData(SavePictureCallback callback) 描述:在ARInspect SDK工作期间,摄像头被占用,如果想获取摄像头采集的图像,可调用该接口获取一帧实时图像。 参数: 表1 参数 名称 类型 描述 callback SavePictureCallback 实现回调函数,接收图片数据。callback定义如下 callback定义: public delegate void SavePictureCallback(byte[] data); 返回值:NA 父主题: 接口说明
-
注册状态回调 定义:Void RegisterStateCallback(StateCallback callback) 描述:在ARInspect SDK工作期间,通过该接口实时获取SDK状态,主要包括运行状态与错误码信息,在注册时立即回调一次当前状态,后续由事件触发。 参数: 表1 名称 类型 描述 callback StateCallback 实现回调函数,处理状态与错误码信息。callback定义如下 callback定义: public delegate void StateCallback (int stateCode); stateCode定义 端SLAM定位中。表示端SLAM定位成功,GetCameraPose返回的数据来自端SLAM。 云SLAM定位中。表示云Slam定位成功,GetCameraPose返回的数据来自云SLAM。 1:未找到License 2:License校验失败 11:SD卡未挂载 12:SD卡空间不足 21:网络未连接 22:IP配置错误 23:服务器不可达 24:端口配置错误 31:Unity配置错误 32:帧率配置错误 返回值:NA 父主题: 接口说明
-
开发环境 操作系统: Windows 10 Unity开发环境: Unity版本:2020.1.17 Android SDK版本:API Level 31 Android JDK版本:JDK 1.8 Android NDK版本:NDK-r19 Android Gradle版本:gradle-6.7.1 Unity工程设置(终端为眼镜需设置,PAD不涉及): 删除原相机,点击菜单栏的“ARCamera/Create Camera For ARGlass”创建AR相机。 设置分辨率:将分辨率调整为2560*720 UI设置: Canvas: Rec Transform:Width:1280, Heigh:720 Render Mode:World Space Event Camera:None(Camera) ARInspect SDK软件包: ARInspect for unity_{version}.unitypackage SDK软件包,由华为方提供。 父主题: 开发准备
-
HiLens注册设备 注册页面 图1 注册 注册成功页面(未激活) 图2 注册成功 下载固件和证书 图3 下载 安装固件包 安装新版本固件(旧版本固件存在宿主机重启技能丢失,无法再次拉起本地容器的情况) tar -xvf [固件包]bash install_manual.shps -ef | grep hdad # 查看hdad进程是否存在 注册 hdactl register_bind -p [证书名称].tar.gz --ip [docker0 ip] 注册成功的状态: 图4 状态 容器内的Agent与宿主机中的固件交互,缺省情况下会把宿主机的IP挂载到容器内,如果宿主机的IP是动态获取的,会导致容器内的Agent与宿主机中的固件无法交互;需要使用“ifconfig”命令查看docker0的ip(172.17.0.1) 父主题: 边缘服务部署
-
资源和成本规划 表1 资源和成本规划 华为云服务 计费模式 数量 价格 备注 场景重建 一次性收费 N/A N/A 5万平方米以内,收费XX万;超过5万平后,每增加1万平方米,收费X万; 包含点 云地图 采集、视觉地图制作、导航地图制作 大空间视觉定位服务 按年收费 1 XX万元 1年内,服务10并发以内,收费XX万,之后每增加1并发,收费X万 物体锚定服务 按年收费 1 XX万元 10个以内物体,1年,服务10并发,收费XX万;之后每增加1并发,收费X万;每增加10个物体,收费X万; (不包含物体图像数据采集) 路径规划与导航服务 按年收费 1 XX万元 10万平米以内,1年内,服务10并发以内,收费XX万,之后每增加10并发,收费X万
-
边缘服务器安装Docker docker 查看docker版本,版本建议20以上 sudo docker --version 安装教程 sudo apt updatesudo apt install docker-ce docker-ce-cli containerd.io nvidia-docker 查看nvidia-docker版本 sudo nvidia-docker --version 安装教程参考:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#install-guide distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \&& curl -s -L https://nvidia.github.io/libnvidia-container/experimental/$distribution/libnvidia-container.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.listsudo apt-get updatesudo apt-get install -y nvidia-docker2sudo systemctl restart docker 父主题: 边缘服务部署
-
SDK接口使用说明 图1 SDK接口使用说明 添加引用:” ARInspect SDK”。 在程序生命周期开始时调用SDK初始化方法,对SDK进行初始化:“InspectSDK.Instance.InitSdk(int mode)”。 在Unity中的Update系列方法中进行SLAM数据的调用及获取:“InspectSDK.Instance.GetCameraPose(null)”。 在可以获取到正常位姿后,可以调用物体识别接口:“InspectSDK.Instance.TrackModel(callback)”。 在程序调用前需调用关闭SDK接口:” InspctSDK.Instance.StopSdk()”。 整体代码示例如下图: 图2 代码示例 父主题: 应用开发
-
部署跟踪服务 图1 部署跟踪服务 计算资源配置 按需配置,推荐内存8G以上,加速卡缺省1个(暂时无法精确到小数) 图2 计算资源配置 环境变量配置 新版本不需要配置DETECTION_3D_ENDPOINT,可自动从HiLens配置的环境变量中获取 表1 环境变量配置 环境变量名称 示例 描述 IS_SGLE_INSTANCE True 部署模式,单实例版本需要配置IS_SINGLE_INSTANCE参数;多实例版本不需要配置该参数 MODELS_CONFIG {"models":{"0": {"object_key": "models/shuifo/shuifo.bin","bucket_name": "xr3d-models-bucket"}},"maps":{"0": {"object_key": "maps/F1-2F/F1-2F.bin","bucket_name": "xr3d-models-bucket"}}} 配置模型文件和地图文件在OBS桶的位置 DEFAULT_OBJ_NAME ShuShuiFa 缺省物体名称 LOG _LEVEL 3 日志级别 DETECTION_3D_PORT 8080 定位服务端口 网络配置 单实例网络配置 图3 计算资源配置 数据存储配置 宿主机新建目录并改变权限 sudo mkdir -p /opt/xr3d/models/ 图4 改变权限 表2 数据存储配置 挂载地址 说明 备注 /opt/xr3d/models 3ddetection技能的物体模型文件和ai模型文件 - /opt/xr3d/ai_models edge_server技能的地图文件 - /opt/xr3d/ai_models edge_server技能的物体模型文件 - 在线部署 部署时,通过配置从OBS下载对应的地图和模型文件(需要确认OBS桶中有对应的模型文件) 离线运行 离线状态下无法从OBS通获取模型文件,可以将地图或模型文件拷贝到对应的挂载路径 离线重启电脑 离线重启电脑,技能无法从OBS下载模型文件,可以直接使用挂载路径已有的模型文件 父主题: HiLens部署技能
-
配置文件 配置文件中常用参数描述如下 ARInspect.config: "slam_client":使用端SLAM还是云SLAM。 "save_log": 是否保存SDK日志。调试阶段建议为true,否则false。 slam_sdk_config.json: "save_image": 是否保存传给端侧SLAM算法模块的图像。建议false,否则会导致log过大,快速占满磁盘。 "log_level":日志等级,0=trace, 1=debug, 2=info,3=warn,4=error,5=critical,6=off,建议选择info。 " flush_level ":日志写到文件的触发等级,如4表示遇到error,则将日志写到文件,建议选择3(warn) initParam.json: "offlineMapName":配置地图名称,如:"F1-2F.bin" " logLevelSwitch":日志等级开关,0表示关,1表示开。建议调试阶段开启info及以上即[0, 0, 0, 1, 1, 1],否则全0 " logModuleSwitch":模块日志开关,0表示关,1表示开。建议调试阶段开启所有模块[1, 1, 1, 1, 1, 1],否则全0 hwServerUrl.json: "serverIp": 配置边侧服务器ip地址,如"192.168.3.23"。 "vio_type": 配置VIO类型。常用值:1=云SLAM+云TRACK;4=端SLAM+云TRACK。通常有地图选择1,无地图选择4。 " log_level ": 日志等级,取值:0~4,对应debug,info,warn,error,fatal,建议调试阶段选择0(debug),否则为1(info) 父主题: 应用开发
-
应用场景 随着国家“出五进一”等用人标准的陆续出台,工业场景中的现场作业面临人员短缺、作业现场专家缺乏等问题。 传统的人工巡检劳动强度大、检测质量差、巡检结果多依靠纯手工纸质记录,后期再录入业务系统,全流程数字化程度低; 作业现场场地面积大,巡检设备众多,需要记录回传的信息类型多,如遇到巡检异常,作业人员缺乏专业知识,作业现场缺少专家支撑,存在安全隐患; 传统线下培训成本高、互动性较弱、经验传递难、知识积累难。 专业设备结构复杂,检修操作过程依靠感觉,缺少规划化监控,安全性较难保障。 AR现场作业解决方案,联合AR眼镜硬件合伙作伴,可以实现如下业务效果: AR智慧巡检,用户穿戴AR设备融入3D数字化信息,完成设备巡检、异常上报、信息录入等工作。设备自动化识别,当用户走到设备附近,设备参数标准参数自动触发显示,和后台数据在视野中实时呈现;3D隐藏结构展示,快速赋能巡检作业新员工;巡检信息后台数据比对,异常数据自动上报,提升巡检效率、降低工作负荷; AR导航导览,工业场景下,场站面积大,场景复杂,巡检点位众多,而且有许多相同设备需要巡检。依靠纸质记录、工人经验很容易出现漏检、错检等现象。AR导航导览可彻底解决这一问题:根据工单,所有巡检点位自动编排,巡检路径最优化,提高作业效率;巡检过程中,根据距离感应,周围设备信息自动化呈现,彻底解决设备贴牌、扫码记录的繁琐步骤;通过定位导航技术,工人到达巡检点位自动打卡,并指引到达下一个巡检点,解决漏检、错检问题; AR辅助维修,借助AR设备现场作业,用户可在产线中对多个设备,高效率、精准地故障发现,从而快速维修,以减少由于设备故障而带来的生产损失。维修任务可视化呈现,与现实中的设备虚实融合,检修员可直观找到待检修区域及设备;维修步骤3D可视化引导,精准指引用户维修过程,按照眼镜端提示操作,全程自动录像,方便问题回溯和实时查看;工单数据智能化回传后台,减少传统纸质信息记录中的错记、漏记问题,提升设备维修效率; AR远程协作,现场作业过程中遇到紧急问题时,作业人员无法第一时间找到解决方法,可通过AR远程协助请求远程联络专家,现场作业状况实时同步,远程专家第一视角作业指导。通过AR标注、屏幕共享,指导现场员工进行作业,快速解决现场问题。多部门、多人协同作业,指定用户知识分享、精准空间内容锚定。
-
方案架构 该解决方案基于端边云部署架构构建AR现场作业工作流,云端部署三维重建、模型训练等算力消耗型服务,管理和更新边缘服务。用户按需在边缘部署融合定位、物体定位跟踪等AR能力;基于端侧SDK自定义开发AR面板、AR导航、设备拆解等功能。 图1 方案架构图 该解决方案会部署如下资源: 创建用于上传训练数据和结果数据导出的OBS桶,开发者可以自主通过华为云账号向该桶上传更新数据和下载结果数据; 用户在HiLens技能市场订阅所需的边侧AR服务技能;用户自购边缘服务器,使用HiLens云服务纳管边缘服务器并将技能下发到边缘服务器。
-
方案优势 算法高效高精度 采用先进的深度学习、AR算法,深入研究各行业业务场景,提高技术在复杂场景中的适配度,支持多终端视觉定位导航,高效高精度大场景重建,厘米级定位精度、毫秒级位姿输出。 端边云协同架构 端边云协同架构支持端侧使用到最新最优的云上AI服务,边侧算力充足,支持快速部署充分发挥AI算法优势,缓解低算力终端计算压力。 适配复杂场景 该解决方案考虑了多种复杂的环境,如场站中大量重复结构、相似设备,支持弱纹理设备的精准识别及定位跟踪,帮助用户在复杂场景中高效率完成现场作业。 提供通用API接口 提供符合RESTful规范的API访问接口,不同行业不同应用场景用户,均可通过接口直接调用场景重建等云服务,接口通用性强,对接快速、简单易用。
-
部署物体定位服务 图1 部署物体定位服务 计算资源配置 按需配置,推荐内存4G以上,加速卡缺省1个(暂时无法精确到小数) 图2 部署物体定位服务 环境变量配置 图3 部署物体定位服务 表1 环境变量配置 名称 示例 描述 MODELS_CONFIG {"models":{"0": {"object_key": "models/shuifo/shuifo.bin","bucket_name": "xr3d-models-bucket"}}} 配置模型文件(包含对应的AI模型)在OBS桶的位置 网络配置 图4 网络配置 登入华为云HiLens页面,在设备管理查看对应设备部署服务的状态,跟踪服务与定位服务状态为成功即可。 图5 查看 父主题: HiLens部署技能
共99354条
- 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
- 3311
推荐文章