华为云用户手册

  • 重启模组 前提条件 仅针对NB-IoT模组进行重启。 设备要支持远程重启模组的能力,即设备支持上述LWM2M协议接口里定义的Reboot资源。 设备对应的产品模型(联通用户专用)的protocolType必须为CoAP或LWM2M,且omCapability不为null。 操作步骤 登录 物联网平台 控制台,点击右上角“进入设备管理服务”。 在设备列表中,单击具体的设备进入到设备的详情页面,选择“设置”页签。 点击“重启”按钮,需要等待设备上线或者上报数据时,物联网平台才会将重启的指令下发到设备。 重启模组的任务执行后,可以在查看操作记录中,查看任务状态。在重启模组的任务中,存在以下几种状态。 Waiting:表示任务处于等待状态,创建任务后,系统设置了一个10秒的定时器,10秒过后,变更为Processing状态。 Processing:表示物联网平台正在处理任务状态,如果设备在25h内未上线或上报数据,则变更为Fail状态;如果设备在25h内上线或上报数据,则平台会将重启模组的指令下发给设备,设备处理完成后会给平台返回处理结果,根据反馈的结果变更为Success或Fail状态。 Success:表示重启模组成功。根据设备反馈的重启模组执行结果,如果重启模组成功,则变更为Success状态。 Fail:表示重启模组失败。物联网平台超过25h未将重启模组的指令下发给设备,状态会变更为Fail;设备上报数据后,物联网平台将重启模组指令下发给设备,如果30分钟内未收到设备的反馈结果,则状态会变更为Fail;物联网平台收到设备反馈的模组重启结果为重启失败,则状态会变更为Fail。
  • 概述 物联网平台支持用户对接入的设备进行远程维护操作,快速定位问题及恢复业务,减少近端维护引入的高成本。当前仅支持通过控制台对NB-IoT设备进行日志收集、重启模组。 物联网平台支持基于LWM2M协议的日志收集和重启模组能力,如下表所示。 资源路径 对象名 资源名 对应物联网平台的功能 /3/0/4 Device Reboot 远程重启模组 /20/0/4014 Event Log LogData 模组日志收集 因此,NB-IoT设备需要支持上述LWM2M协议接口里定义的这2个资源,同时设备对应的产品模型的omCapability不为null,才能接收和响应物联网平台下发的指令,进行远程的日志收集、重启模组。
  • 产品模型打包 产品模型写作完成后,需要按如下层级结构打包: 产品模型打包需要遵循如下几点要求: 产品模型文件的目录层级结构必须如上图所示,不能增删。例如:第二层级只能有“profile”和“service”两个文件夹,每个服务下面必须包含“profile”文件夹等。 产品模型文件以zip形式压缩。 产品模型文件的命名必须按照deviceType_manufacturerId的格式命名,其中的deviceType、manufacturerId必须与devicetype-capability.json中对应字段的定义一致。例如:本实例中devicetype-capability.json的主要字段如下: { "devices": [ { "manufacturerId": "TestUtf8ManuId", "manufacturerName": "HZYB", "protocolType": "CoAP", "deviceType": "WaterMeter", "serviceTypeCapabilities": **** } ] } 图中的WaterMeterBasic、WaterMeterAlarm、Battery等都是devicetype-capability.json中定义的服务。 产品模型文件中的文档格式都是JSON,在编写完成后可以在互联网上查找一些格式校验网站,检查JSON的合法性。
  • 设备能力定义样例 devicetype-capability.json记录了该设备的基础信息: { "devices": [ { "manufacturerId": "TestUtf8ManuId", "manufacturerName": "HZYB", "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 - 必选 指示设备的制造商名称 (只允许英文)。 - 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] 目前本字段是非功能性字段,仅起到描述作用,建议准确定义。
  • 概述 产品模型本质上就是一个devicetype-capability.json文件和若干个serviceType-capability.json文件,其中devicetype-capability.json是描述产品模型包含的服务能力的文件,serviceType-capability.json文件是用于描述devicetype-capability.json文件中的service_capabilities的每一个能力的详细描述。按照如下目录打包的一个zip包。其中WaterMeter是deviceType,TestUtf8Manuld是manufactureId,WaterMeterBasic/WaterMeterAlarm/Battery是服务类型。 所以离线开发产品模型就是按照产品模型编写规则和JSON格式规范在devicetype-capability.json中定义设备能力,在servicetype-capability.json中定义服务能力。因此离线开发产品模型需要熟悉JSON的格式。 由于离线开发产品模型文件相对在线开发比较耗时,因此推荐在线开发产品模型。
  • 命名规范 在产品模型的开发过程中,需要遵循如下命名规范: 设备类型(deviceType)、服务类型(serviceType)、服务标识(serviceId)采用单词首字母大写的命名法。例如:WaterMeter、Battery。 属性使用第一个单词首字母小写,其余单词的首字母大写的命名法。例如:batteryLevel、internalTemperature。 命令使用所有字母大写,单词间用下划线连接的格式。例如:DISCOVERY,CHANGE_COLOR。 设备能力描述json文件固定命名devicetype-capability.json。 服务能力描述json文件固定命名servicetype-capability.json。 厂商id在不同的产品模型文件中不能重复,且仅支持英文。 要注重名称的通用性,简洁性;对于服务能力描述,还要考虑其功能性。例如:对于多传感器设备,可以命名为MultiSensor;对于具有显示电量的服务,可以命名为Battery。
  • 产品模型模板 将一款新设备接入到物联网平台,首先需要编写这款设备的产品模型。物联网平台提供了一些产品模型文件模板,如果新增接入设备的类型和功能服务已经在物联网平台提供的设备产品模型模板中包含,则可以直接选择使用;如果在物联网平台提供的设备产品模型模板中未包含,则需要自己定义。 例如:接入一款水表 ,可以直接选择物联网平台上对应的产品模型模板,修改设备服务列表。 物联网平台提供的产品模型模板会不断更新,如下表格列举设备类型和服务类型示例,仅供参考。 设备类型识别属性: 属性 产品模型中key 属性值 设备类型 deviceType WaterMeter 厂商ID manufacturerId TestUtf8ManuId 厂商名称 manufacturerName HZYB 协议类型 protocolType CoAP 设备的服务列表 服务描述 服务标识(serviceId) 服务类型(serviceType) 选项(option) 水表的基本功能 WaterMeterBasic Water Mandatory 告警服务 WaterMeterAlarm Battery Mandatory 电池服务 Battery Battery Optional 数据的上报规则 DeliverySchedule DeliverySchedule Mandatory 水表的连通性 Connectivity Connectivity Mandatory
  • 编解码插件打包 插件编程完成后,需要使用Maven打包成jar包,并制作成插件包。 Maven打包 打开DOS窗口,进入“pom.xml”所在的目录。 输入maven打包命令:mvn package。 DOS窗口中显示“BUILD SUC CES S”后,打开与“pom.xml”目录同级的target文件夹,获取打包好的jar包。 jar包命名规范为:设备类型-厂商ID-版本.jar,例如:WaterMeter-Huawei-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 设备类型,与产品模型文件中的定义保持一致。 是 manufacturerName 制造商名称,与产品模型文件中的定义保持一致,否则无法上传到平台。 是 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", "description":"codec", "platform":"linux", "packageType":"CIGPlugin", "date":"2017-02-06 12:16:59", "ignoreList":[], "bundles":[ { "bundleName": "WaterMeter-Huawei", "bundleVersion": "1.0.0", "priority":5, "fileName": "WaterMeter-Huawei-1.0.0.jar", "bundleDesc":"", "versionDesc":"" }] } 选中“package”文件夹中的全部文件,打包成zip格式(“package.zip”)。 注:“package.zip”中不能包含“package”这层目录。 离线插件包最大限制为4M,如果超出4M,请自行分析并将包大小裁剪到4M以内。
  • 编解码插件的输入/输出格式样例 假定某款水表支持的服务定义如下: 服务类型 属性名称 属性说明 属性类型(数据类型) 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模式下生效,且需要“下行消息指示”开启。 是 LwM2M协议的命令下发格式和MQTT协议的命令下发格式不一样 注:在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 服务的命令名,参见产品模型的服务命令定义。 是 paras ObjectNode 命令的参数,具体字段由产品模型定义。 是 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 是 一个服务的数据,具体字段在产品模型里定义。 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" }] } LwM2M协议的数据格式跟MQTT的数据格式不同。 设备对平台命令的应答(对应图中的消息⑤) 字段名 类型 参数描述 是否必填 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 命令的应答,具体字段由产品模型定义。 注:body体不是数组。 否 示例: { "identifier": "123", "msgType": "deviceRsp", "mid": 2016, "errcode": 0, "body": { "result": 0 } }
  • 什么是产品模型 产品模型用于描述设备具备的能力和特性。开发者通过定义产品模型,在物联网平台构建一款设备的抽象模型,使平台理解该款设备支持的服务、属性、命令等信息,如、开关等。当定义完一款产品模型后,在进行注册设备时,就可以使用在控制台上定义的产品模型。 产品模型定义了服务能力: 服务能力 描述设备具备的业务能力。将设备业务能力拆分成若干个服务后,再定义每个服务具备的属性、命令以及命令的参数。 以水表为例,水表具有多种能力,如上报水流、告警、电量、连接等各种数据,并且能够接受服务器下发的各种命令。产品模型文件在描述水表的能力时,可以将水表的能力划分五个服务,每个服务都需要定义各自的上报属性或命令。说明如下: 服务类型 描述 基础(WaterMeterBasic) 用于定义水表上报的水流量、水温、水压等参数,如果需要命令控制或修改这些参数,还需要定义命令的参数。 告警(WaterMeterAlarm) 用于定义水表需要上报的各种告警场景的数据,必要的话需要定义命令。 电池(Battery) 定义水表的电压、电流强度等数据。 传输规则(DeliverySchedule) 定义水表的一些传输规则,必要的话需要定义命令。 连接(Connectivity) 定义水表连接参数。 注:具体定义几个服务是非常灵活的,如上面的例子可以将告警服务拆分成水压告警服务和流量告警服务,也可以将告警服务合入到水表基础服务中。 物联网平台提供了多种定义产品模型的方法,您可以根据自己需求,选择对应的方法定义产品模型。 自定义模型(在线开发):从零自定义构建产品模型,详细请参考在线开发产品模型。 上传模型文件(离线开发):将本地写好的产品模型上传到平台,详细请参考离线开发产品模型。 Excel导入:通过导入文件的方式快速定义产品功能。对于开发者来说,降低产品模型开发门槛,只需根据表格填写参数;对于高阶开发者和集成商来说,提升行业复杂模型开发效率。例如,楼宇自控空调模型包含的service条目超过100条,在表格中编辑开发产品模型,效率大大提升,可以随时编辑调整参数。详细请参考Excel导入。 导入库模型(平台预置产品模型):您可以使用平台预置的产品模型,快速完成产品开发。当前平台提供了标准模型和厂商模型。标准模型遵循行业标准的产品模型,适用行业内绝大部分厂商设备,而厂商模型针对设备类型发布的产品模型,适用于用行业内少量厂家设备。您可以根据实际需求选择相应的产品模型。 父主题: 开发产品模型
  • 使用MQTT(S)协议-证书接入的鉴权流程 图1 MQTT(S)协议-证书接入鉴权流程图 在控制台上传设备CA证书。 通过调用注册接口向物联网平台发送注册请求或者在控制台上注册设备。 注册时需要填写设备标识码,通常使用MAC地址,Serial No或IMEI作为nodeId。 物联网平台向设备分配全局唯一的设备ID(deviceId)。 设备登录时,携带设备侧X.509证书发起接入鉴权请求。 平台验证通过后,返回成功响应,设备连接物联网平台成功。
  • 使用LwM2M/CoAP协议接入的鉴权流程 图1 LwM2M/CoAP协议接入鉴权流程图 通过调用注册接口向物联网平台发送注册请求或者在控制台上注册设备。 物联网平台向设备分配密钥,返回timeout。 密钥可以在注册设备时自定义,如果没有定义,平台将自动分配预置密钥。 timeout是指超时时间,若设备在有效时间未接入物联网平台,则平台会删除该设备的注册信息。 设备登录时,安全设备携带设备唯一标识码nodeId(如IMEI)和密钥发起接入鉴权请求;非安全设备携带设备唯一标识码nodeId发起接入鉴权请求。 平台验证通过后,返回成功响应,设备连接物联网平台成功。
  • 示例1 证书认证设备,不限制UserName与ClientId参数取值,从设备证书通用名称(Common Name)中取值设备ID。 表1 鉴权参数 参数 说明 Client ID 任意值 User Name 任意值 Password 空值 鉴权模板: { "template_name": "template1", "description": "template1", "template_body": { "parameters": { "iotda::certificate::common_name": { "type": "String" } }, "resources": { "device_id": { "Ref": "iotda::certificate::common_name" } } } }
  • 示例2 设备ID格式为:${ProductId}_${NodeId}。 表2 鉴权参数 参数 说明 Client ID 固定格式: ${ClientId}|securemode=2,signmethod=hmacsha256|timestamp=${timestamp}| ${ClientId}: 固定格式 ${ProductId}.${NodeId}。 ${NodeId}: 设备标识码。 ${ProductId}:产品ID。 ${timestamp}:Unix时间戳,毫秒。 User Name 由设备标识码和产品ID组成,固定格式: ${NodeId}&${ProductId} Password 以设备密码为密钥,将设备参数与参数值拼接后的字符串为加密串进行hmacsha256算法加密。 加密串格式: clientId${clientId}deviceName${nodeId}productKey${productId}timestamp${timestamp} ${ClientId}: 固定格式 ${ProductId}.${NodeId}。 ${NodeId}: 设备标识码。 ${ProductId}:产品ID。 ${timestamp}:时间戳。 鉴权模板: { "template_name": "template2", "description": "template2", "template_body": { "parameters": { "iotda::mqtt::client_id": { "type": "String" }, "iotda::mqtt::username": { "type": "String" }, "iotda::device::secret": { "type": "String" } }, "resources": { "device_id": { "Fn::Join": [{ "Fn::SplitSelect": [ "${iotda::mqtt::username}", "&", 1 ] }, "_", { "Fn::SplitSelect": [ "${iotda::mqtt::username}", "&", 0 ] }] }, "timestamp": { "type": "UNIX", "value": { "Fn::MathDiv": [{ "Fn::ParseLong": { "Fn::SplitSelect": [{ "Fn::SplitSelect": ["${iotda::mqtt::client_id}", "|", 2] }, "=", 1] } }, 1000] } }, "password": { "Fn::HmacSHA256": [{ "Fn::Sub": [ "clientId${clientId}deviceName${deviceName}productKey${productKey}timestamp${timestamp}", { "clientId": { "Fn::SplitSelect": [ "${iotda::mqtt::client_id}", "|", 0 ] }, "deviceName": { "Fn::SplitSelect": [ "${iotda::mqtt::username}", "&", 0 ] }, "productKey": { "Fn::SplitSelect": [ "${iotda::mqtt::username}", "&", 1 ] }, "timestamp": { "Fn::SplitSelect": [{ "Fn::SplitSelect": ["${iotda::mqtt::client_id}", "|", 2] }, "=", 1] } } ] }, "${iotda::device::secret}" ] } } } }
  • 示例3 设备ID格式为:${productId}${nodeId}。 表3 鉴权参数 参数 说明 Client ID 固定格式: ${productId}${nodeId} ${productId}:产品ID。 ${nodeId}: 设备标识码。 User Name 固定格式: ${productId}${nodeId};12010126;${connid};${expiry} ${productId}: 产品ID。 ${nodeId}: 设备标识码。 ${connid}:一个随机字符串。 ${expiry}:Unix时间戳,单位秒。 Password 固定格式: ${token};hmacsha256 ${token}:以BASE64解码后的设备密码为密钥,对User Name字段进行hmacsha256算法加密后的值。 鉴权模板: { "template_name": "template3", "description": "template3", "template_body": { "parameters": { "iotda::mqtt::client_id": { "type": "String" }, "iotda::mqtt::username": { "type": "String" }, "iotda::device::secret": { "type": "String" } }, "resources": { "device_id": { "Ref": "iotda::mqtt::client_id" }, "timestamp": { "type": "UNIX", "value": { "Fn::ParseLong": { "Fn::SplitSelect": ["${iotda::mqtt::username}", ";", 3] } } }, "password": { "Fn::Sub": [ "${token};hmacsha256", { "token": { "Fn::HmacSHA256": [ "${iotda::mqtt::username}", { "Fn::Base64Decode": "${iotda::device::secret}" } ] } } ] } } } }
  • 概述 LwM2M(Lightweight M2M,轻量级M2M),由开发移动联盟(OMA)提出,是一种轻量级的、标准通用的物联网设备管理协议,可用于快速部署客户端/服务器模式的物联网业务。LwM2M为物联网设备的管理和应用建立了一套标准,它提供了轻便小巧的安全通信接口及高效的数据模型,以实现M2M设备管理和服务支持。物联网平台支持加密与非加密两种接入设备接入方式,其中加密业务数据交互端口为5684端口,采用DTLS+CoAP协议通道接入,非加密端口为5683,接入协议为CoAP。物联网平台从安全角度考虑,强烈建议采用安全接入方式。 LwM2M的语法和接口细节,请以此标准规范为准。 物联网平台支持协议规定的plain text, opaque, Core Link ,TLV , JSON编码格式。在多字段操作时(比如写多个资源),默认用TLV格式。
  • 使用MQTT(S)协议-密钥接入的鉴权流程 图1 MQTT(S)协议-密钥接入鉴权流程图 通过调用注册接口向物联网平台发送注册请求或者在控制台上注册设备。 注册时需要填写设备标识码,通常使用MAC地址,Serial No或IMEI作为nodeId。 物联网平台向设备分配全局唯一的设备ID (deviceId)和密钥(secret)。 密钥可以在注册设备时自定义,如果没有定义,平台将自动分配密钥。 设备侧需集成预置CA证书(仅针对MQ TTS 协议接入的鉴权流程)。 设备登录时,携带设备ID(deviceId)和密钥(secret)发起接入鉴权请求。 平台验证通过后,返回成功响应,设备连接物联网平台成功。
  • 使用限制 描述 限制 支持的MQTT协议版本 3.1.1 与标准MQTT协议的区别 支持Qos 0 支持Topic自定义 支持共享订阅 不支持QoS1,QoS2 不支持will、retain msg 不支持客户端Publish MQTTS支持的安全等级 采用TCP通道基础 + TLS协议(TLSV1.2) 支持的加密套件列表: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 单账号每秒最大MQTT连接请求数 10个 单个账号支持的最大MQTT连接数 10个/接入凭证 单个MQTT连接每秒最大推送速率 1000TPS 消息最大缓存时长及大小 最大时长1天,最大消息量1GB,以最先到达的限制为准。例如,缓存时长超过1天即使没达到1GB也不会缓存。 MQTT连接心跳时间建议值 心跳时间限定为30秒至1200秒,推荐设置为120秒。 消息发布与订阅 支持共享订阅,订阅同一Topic的客户端轮询消费推送数据,客户端只能订阅流转规则中创建的Topic。 不支持消息发布。 每个订阅请求的最大订阅数 同账号的最大Topic数一致。 每个账号可订阅的Topic数(在创建规则动作时创建) 100
  • Hyperledger Fabric增强版 Hyperledger Fabric增强版的 区块链服务BCS 提供专业版、企业版和铂金版供您选择使用,每个版本均有不同的规格支持,详细请参见表3。集群规格信息请参考表4。 各版本的价格请参见:产品价格详情。 一个容器集群目前只能部署一个 区块链 实例。 表3 各版本区别 功能 专业版 企业版 铂金版 适用场景类型 满足小规模商用 满足中等规模商用 满足大规模商用(大企业金融和数字政府等) 联盟链 支持 支持 支持 交易峰值性能 不超过500 TPS 不超过2000 TPS 不超过10000 TPS 共识算法 Raft(CFT) 支持 支持 支持 FBFT 不支持 支持 支持 节点管理 最大成员组织数 2 5 10 单组织最大成员节点数 2 2 5 最大共识(Orderer)节点数 3 4 10 最大通道数 2 4 10 节点故障自动恢复 支持 支持 支持 节点弹性伸缩 支持 支持 支持 最大轻节点数 不支持 10 40 安全功能 ECDSA 支持 支持 支持 国密 不支持 支持 支持 加法同态 不支持 支持 支持 零知识证明 不支持 支持 支持 高可用 Restful接口调用智能合约 支持 支持 支持 普通部署 支持 支持 支持 高可用部署 不支持 不支持 支持 运维监控 运维日志 支持 支持 支持 节点状态监控 支持 支持 支持 状态告警 支持 支持 支持 服务支持 专属服务经理 不支持 不支持 支持 研发远程技术支持 不支持 不支持 7*24小时研发团队远程技术支持。 点对点故障处理客户现场支持 不支持 不支持 现场技术支持,每季度不超过一人天。 表4 规格信息 规格 CCE规格 E CS 节点 EIP VPC及subnet 容器网络 专业版 cce.s1.small(小规模单控制节点CCE集群,最大50节点) 单AZ 规格:4核8GB 个数:组织节点(peer)数/2+1个(orderer) 私有链:不创EIP 联盟链:每个集群节点(node)1个eip EIP带宽大小:1M 1个VPC及subnet VPC网络 企业版 cce.s2.small (小规模高可用CCE集群,最大50节点) 多AZ 规格:8核16GB 个数:组织节点(peer)数/2+orderer数 私有链:不创EIP 联盟链:每个集群节点(node)1个eip EIP带宽大小:5M 1个VPC及subnet VPC网络 铂金版 cce.s2.small (小规模高可用CCE集群,最大50节点) 多AZ 规格:8核16GB 个数:组织节点(peer)数+orderer数 私有链:不创EIP 联盟链:每个集群节点(node)1个eip EIP带宽大小:10M 1个VPC及subnet VPC网络
  • 华为云区块链引擎 华为云区块链引擎服务当前仅“华北-北京四”区域支持。 华为云区块链引擎架构版本的区块链服务 BCS 提供专业版、企业版和铂金版供您选择使用,每个版本均有不同的规格支持,详情请查看表1。 表1 各版本区别 功能 专业版 企业版 铂金版 适用场景类型 满足小规模商用 满足中等规模商用 满足大规模商用(大企业金融和数字政府等) 性能峰值(TPS) 不超过2000 TPS 不超过10000 TPS 不超过50000 TPS 共识策略 Raft 支持 支持 支持 功能和规模 最大组织个数 2 10 100 每个组织存储空间(GB) 500GB 2000GB 6000GB 富媒体存储带宽 1M/s 2M/s 5M/s 安全功能 ECDSA 支持 支持 支持 国密 不支持 支持 支持 高可用 容器高可靠 不支持 支持 支持 多AZ容灾 不支持 支持 支持 运维监控 合约日志 支持 支持 支持 容量监控 支持 支持 支持 服务支持 专属服务经理 不支持 不支持 支持 研发远程技术支持 不支持 不支持 支持 点对点故障处理客户现场支持 不支持 不支持 支持
  • Hyperledger Besu 华为云区块链引擎服务当前仅“华北-北京四”区域支持。 Hyperledger Besu架构版本的区块链服务BCS提供专业版和企业版供您选择使用,每个版本均有不同的规格支持,详情请查看表2。 表2 各版本区别 功能 专业版 企业版 适用场景类型 仅限基础开发测试使用,不保证可靠性。 满足中等规模商用。 共识策略 Raft 支持 支持 功能和规模 最大节点个数 4 10 每个节点存储空间(GB) 500GB 2000GB 安全功能 ECDSA 支持 支持 国密 不支持 支持 高可用 容器高可靠 不支持 支持 多AZ容灾 不支持 支持 运维监控 合约日志 支持 支持 容量监控 支持 支持 服务支持 专属服务经理 不支持 不支持 研发远程技术支持 不支持 不支持 点对点故障处理客户现场支持 不支持 不支持
  • 华为云区块链引擎权限 默认情况下,新建的 IAM 用户没有任何权限,您需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 BCS部署时通过物理区域划分,为项目级服务。授权时,“作用范围”需要选择“区域级项目”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设置相关权限,并且该权限仅对此项目生效;如果在“所有项目”中设置权限,则该权限在所有区域项目中都生效。访问BCS时,需要先切换至授权区域。 权限根据授权精细程度分为角色和策略: 角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。 策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对ECS服务,管理员能够控制IAM用户仅能对某一类云服务器资源进行指定的管理操作。 表2 华为云区块链引擎权限 系统权限 权限描述 权限类别 依赖关系 BCS Administrator 区块链服务的所有执行权限。 系统角色 BSS Administrator、VPCEndpoint Administrator、VPC Administrator BCS Huaweicloudchain FullAccess 华为云区块链引擎权限所有权限。 系统策略 BSS Administrator、VPCEndpoint Administrator、VPC Administrator BCS Huaweicloudchain ReadOnlyAccess 华为云区块链引擎权限只读权限。 系统策略 VPCEP Administrator BCS Huaweicloudchain FullAccess策略内容: { "Version": "1.1", "Statement": [ { "Action": [ "bcs:huaweiCloudChain*:*", "vpc:vpcs:list", "vpc:vpcs:get", "vpc:subnets:get" ], "Effect": "Allow" } ] } BCS Huaweicloudchain ReadOnlyAccess策略内容: { "Version": "1.1", "Statement": [ { "Effect": "Deny", "Action": [ "bcs:huaweiCloudChain*:delete*", "bcs:huaweiCloudChain*:update*", "bcs:huaweiCloudChain*:create*", "bcs:huaweiCloudChain*:install", "bcs:huaweiCloudChain*:download*" ] }, { "Effect": "Allow", "Action": [ "bcs:huaweiCloudChain*:get*", "bcs:huaweiCloudChain*:list*", "bcs:huaweiCloudChain*:inquire", "vpc:vpcs:list", "vpc:vpcs:get", "vpc:subnets:get" ] } ] } 相关链接: IAM产品介绍。 创建用户组、用户并授予BCS权限,请参考创建用户并授权使用BCS。 细粒度策略支持的授权项,请参考“策略及授权项说明”章节。
  • Hyperledger Fabric增强版权限 默认情况下,新建的IAM用户没有任何权限,您需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 BCS部署时通过物理区域划分,为项目级服务。授权时,“作用范围”需要选择“区域级项目”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设置相关权限,并且该权限仅对此项目生效;如果在“所有项目”中设置权限,则该权限在所有区域项目中都生效。访问BCS时,需要先切换至授权区域。 如表1所示,包括了Hyperledger Fabric增强版的所有系统权限。 表1 Hyperledger Fabric增强版系统权限 系统权限 权限描述 权限类别 依赖关系 BCS Administrator 区块链服务Hyperledger Fabric增强版的所有执行权限。 系统角色 Tenant Guest、Server Administrator、ELB Administrator、SFS Administrator、SWR Admin、 APM FullAccess、 AOM FullAccess、CCE Administrator、VPC Administrator、EVS Administrator、CCE Cluster Admin BCS Fabric FullAccess 区块链服务Hyperledger Fabric增强版的所有权限。 系统策略 无 BCS Fabric ReadOnlyAccess 区块链服务Hyperledger Fabric增强版只读权限。 系统策略 无 BCS Fabric FullAccess策略内容: { "Version": "1.1", "Statement": [ { "Action": [ "bcs:fabric*:*", "cce:*:*", "ecs:*:*", "evs:*:*", "vpc:*:*", "elb:*:*", "aom:*:*", "apm:*:*", "rds:*:*", "dms:*:*", "sfs:*:*", "sfsturbo:*:*", "cloudIDE:*:*" ], "Effect": "Allow" } ] } BCS Fabric ReadOnlyAccess策略内容: { "Version": "1.1", "Statement": [ { "Action": [ "bcs:fabric*:get*", "bcs:fabric*:list*", "cce:*:get*", "cce:*:list*", "ecs:*:get*", "ecs:*:list*", "evs:*:get*", "evs:*:list*", "vpc:*:get*", "vpc:*:list*", "elb:*:get*", "elb:*:list*", "aom:*:get*", "aom:*:list*", "apm:*:get*", "apm:*:list*", "rds:*:get*", "rds:*:list*", "dms:*:get*", "dms:*:list*", "sfs:*:get*", "sfsturbo:*:get*", "cloudIDE:*:get*", "cloudIDE:*:list*" ], "Effect": "Allow" } ] }
  • 支持的授权项 策略支持的操作与API相对应,授权项列表说明如下: 权限:允许或拒绝某项操作。 对应API接口:自定义策略实际调用的API接口。 授权项:自定义策略中支持的Action,在自定义策略中的Action中写入授权项,可以实现授权项对应的权限功能。 依赖的授权项:部分Action存在对其他Action的依赖,需要将依赖的Action同时写入授权项,才能实现对应的权限功能。 IAM项目(Project)/企业项目(Enterprise Project): 自定义策略的授权范围,包括IAM项目与企业项目。授权范围如果同时支持IAM项目和企业项目,表示此授权项对应的自定义策略,可以在IAM和企业管理两个服务中给用户组授权并生效。如果仅支持IAM项目,不支持企业项目,表示仅能在IAM中给用户组授权并生效,如果在企业管理中授权,则该自定义策略不生效。关于IAM项目与企业项目的区别,详情请参见:IAM与企业管理的区别。 如果您需要允许或者禁止某个接口的操作权限,请使用策略。使用策略时,注意事项如下: 目前只有基于已有集群创建的区块链实例支持细粒度授权功能,区块链所使用的集群需要进行权限预处理,应使用具有CCE Administrator及以上权限的账号在CCE控制台的权限管理页面为指定集群授予命名空间权限。例如为具有BCS Fabric ReadOnlyAccess权限的用户组授予view命名空间权限,为具有BCS Fabric FullAcces权限的用户组授予cluster admin命名空间权限。具体操作请参考CCE命名空间权限。 若用户想要查询委托状态,则需额外授予IAM ReadOnlyAccess。若需要授权委托,请联系具有Security Administrator角色的账号进行授权。 如果需要创建包周期区块链实例,需要额外授予BSS Operator角色。请勿将BCS Fabric ReadOnlyAccess和BSS的角色放在一起使用,以免造成意外退订。 请勿将Tenant Guest角色与BCS Fabric FullAccess策略放在一起使用,否则会造成部分功能界面隐藏。 企业项目授权时,由于依赖服务的个别接口未实现基于企业项目的权限管理,需要在IAM用户组授予对应的项目权限。例如创建实例需要同时授予VPC ReadOnlyAccess项目权限,查看监控需要同时授予AOM ReadOnlyAccess项目权限,查看合约实例需要同时授予CloudIDE ReadOnlyAccess项目权限,增加组织需要同时授予SFS Turbo ReadOnlyAccess项目权限。
  • 请求消息头 附加请求头字段,如指定的URI和HTTPS方法所要求的字段。例如定义消息体类型的请求头“Content-Type”,请求鉴权信息等。 如下公共消息头需要添加到请求中。 Content-Type:消息体的类型(格式),必选,默认取值为“application/json”,有其他取值时会在具体接口中专门说明。 X-Auth-Token:用户Token,可选,当使用Token方式认证时,必须填充该字段。用户Token也就是调用获取用户Token接口的响应值,该接口是唯一不需要认证的接口。 API同时支持使用AK/SK认证,AK/SK认证是使用SDK对请求进行签名,签名过程会自动往请求中添加Authorization(签名认证信息)和X-Sdk-Date(请求发送的时间)请求头。 AK/SK认证的详细说明请参考AK/SK认证。 对于获取IAM用户Token(使用密码)接口,由于不需要认证,所以只添加“Content-Type”即可,添加消息头后的请求如下所示。 1 2 POST https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json
  • 请求URI 请求URI由如下部分组成。 {URI-scheme} :// {Endpoint} / {resource-path} ? {query-string} 尽管请求URI包含在请求消息头中,但大多数语言或框架都要求您从请求消息中单独传递它,所以在此单独强调。 URI-scheme: 表示用于传输请求的协议,当前所有API均采用HTTPS协议。 Endpoint: 指定承载REST服务端点的服务器 域名 或IP,不同服务不同区域的Endpoint不同,您可以从地区和终端节点获取。 例如:BCS服务在“华北-北京一”区域的Endpoint为“bcs.cn-north-1.myhuaweicloud.com”。 resource-path: 资源路径,也即API访问路径。从具体API的URI模块获取,例如“获取用户Token”API的resource-path为“/v3/auth/tokens”。 query-string: 查询参数,是可选部分,并不是每个API都有查询参数。查询参数前面需要带一个“?”,形式为“参数名=参数取值”,例如“limit=10”,表示查询不超过10条数据。 例如您需要获取IAM在“华北-北京一”区域的Token,则需使用“华北-北京一”区域的Endpoint(iam.cn-north-1.myhuaweicloud.com),并在获取IAM用户Token(使用密码)的URI部分找到resource-path(/v3/auth/tokens),拼接起来如下所示。 1 https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens 图1 URI示意图 为查看方便,在每个具体API的URI部分,只给出resource-path部分,并将请求方法写在一起。这是因为URI-scheme都是HTTPS,而Endpoint在同一个区域也相同,所以简洁起见将这两部分省略。
  • 请求方法 HTTPS请求方法(也称为操作或动词),它告诉服务用户正在请求什么类型的操作。 GET:请求服务器返回指定资源。 PUT:请求服务器更新指定资源。 POST:请求服务器新增资源或执行特殊操作。 DELETE:请求服务器删除指定资源,如删除对象等。 HEAD:请求服务器资源头部。 PATCH:请求服务器更新资源的部分内容。当资源不存在的时候,PATCH可能会去创建一个新的资源。 在获取IAM用户Token(使用密码)的URI部分,您可以看到其请求方法为“POST”,则其请求为: 1 POST https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens
共100000条