华为云用户手册

  • 设备管理 对象 描述 限制 开发中心设备数量 使用开发中心在调测阶段单个应用允许接入的最大设备数量 20 产品模型 产品模型文件包大小限制 4 MB 设备配置更新配置文件 设备配置更新配置文件大小限制(仅支持Json格式) 200 KB 批量设备配置更新 单次批量设备配置更新最多的设备数量 10000 批量命令下发 单次批量命令下发最多的设备数量 10000 软固件升级 – 无限制 软固件升级数 单次批量软固件升级的设备数量 30000 固件升级包 固件升级包大小限制 200 MB 软件升级包 软件升级包大小限制 200 MB 群组 单个应用最多可创建的群组数量 10 单个群组最大层级数量 10 单个设备最多可被添加至群组的数量 1 标签 单个应用最多可添加的设备标签数量 2000 设备历史数据 设备历史数据最长存储时长 如果您有更长时间额数据存储需要,可以使用 对象存储服务 OBS。 7 天 报表统计 报表统计数据最长存储时长 180 天 应用侧API 单账号每秒应用服务器订阅最大消息数 不建议高于10 TPS,高于10 TPS的订阅,建议使用数据转发规则。 设备访问授权 单个应用授权最多可以授权给多少个应用 20 单个应用最多可以被多少个应用授权 200 设备影子 - 无限制
  • 设备接入 对象 描述 限制 设备数量 单个账号最多可添加的设备数量 1000万 单个网关设备下最多可添加的子设备数量 1000 连接和请求 单个MQTT设备支持的连接数 1 单账号每秒最大MQTT连接请求数 500 单账号设备侧每秒最大上行消息数量 20000 单个MQTT连接每秒最大上行消息数量 50 单个MQTT连接最大带宽(上行消息) 1MB/S MQTT单条发布消息最大长度。超过此大小的发布请求将被直接拒绝。 1MB MQTT协议规范 MQTT v3.1.1标准协议 与标准MQTT协议的区别 支持Qos 0和Qos 1 不支持QoS2 不支持will、retain msg 不支持Topic自定义 MQTT协议支持的安全等级 采用TCP通道基础 + TLS协议(TLSV1、 TLSV1.1和TLSV1.2 版本) MQTT连接心跳时间建议值 心跳时间限定为30至1200秒,推荐设置为120秒 MQTT协议消息发布与订阅 设备只能对自己的Topic进行消息发布与订阅 MQTT协议每个订阅请求的最大订阅数 无限制 支持的LWM2M协议版本 1.0.2版本 LWM2M/CoAP单个发布消息最大长度。超过此大小的发布请求将被直接拒绝。 1KB 应用 单个账号最多可创建的应用数量 1 单个应用最多可添加的设备数量 1000万 产品模型 单个应用最多可创建的产品模型数量 20 批量设备注册 单次批量注册最多的设备数量 30000 规则引擎 单个应用最多可创建的规则数量,包含数据转发规则和设备联动规则 50 设备日志收集 - 仅支持基于华为NB-IoT芯片和LWM2M协议的设备 审计日志 管理门户日志最长存储时长 90 天 应用侧API 单个账号调用API的每秒最大次数 100 命令缓存下发 单个应用允许缓存下发的最大命令条数 20
  • 产品优势(联通用户专用) 非联通用户请查看 设备接入服务 。 物联网普及的速度在加快,很多企业在物联网转型过程中往往面临着接入碎片化、设备管理复杂、安全难保证、平台容量小等难题。针对以上物联网痛点,华为云 物联网平台 提供了一系列解决措施。 传统平台 华为云物联网平台 设备通信 需要跨地域采购物理SIM卡,生产地无法测试目的地网络状态。 全球拓展难:需与全球多家运营商谈判、对接,集成工作挑战大。 漫游资费高:企业迫切希望使用设备所在国的本地资费,降低成本。 通过 全球SIM联接 服务购买物联网卡,快速实现设备上云,并实现全球设备的联接。目前华为全球SIM联接服务覆盖全球200+国家和地区,全球合作运营商30+,并实现一个国家内多运营商覆盖,提供最好的网络和最优的资费。 设备接入 硬件开发平台、接入协议、接入网络碎片化严重 多厂家多终端类型,上层应用伙伴集成兼容难度高 支持多网络、多协议、多语言SDK支持,屏蔽物联网碎片化,实现设备快速接入。 安全和数据保护 需要额外开发、部署各种安全措施,端到端保证设备、传输和数据安全难度大 提供多种安全防护措施,确保设备安全和信息传输安全;满足欧盟GDPR数据隐私保护要求,确保数据得到有效保护。 性能和稳定性 自主实现架构,平台难以保证海量设备接入和并发数 微服务电信级架构,提供亿级海量连接和百万级并发的能力,业务可靠性达到99.9%。 可扩展性 额外购买或开发存储、大数据分析、 消息通知 等产品,投入的人力物力成本高 基于规则引擎与华为云其他产品对接,例如DIS、DMS、OBS、 MRS SMN 、ROMA Connect等,可以方便快捷的实现海量设备数据的存储、计算以及智能分析。
  • 设备管理 设备管理在设备接入基础上,提供了更丰富完备的设备管理能力,简化海量设备管理复杂性,节省人工操作,提升管理效率。 功能 简介 产品模型定义 用于定义一款接入设备所具备的属性(如颜色、大小、采集的数据、可识别的指令或者设备上报的事件等信息),然后通过厂家、设备类型和设备型号,唯一标识一款设备,便于平台识别。产品模型可通过开发中心进行无码化开发。详细请参见产品模型。 设备访问授权 支持将设备的管理权限授权给其他应用,便于同一个用户管理多个应用的设备。详情请参见授权访问。 数据持久化存储 提供设备上报数据的存储,可按照时、天等维度查看设备上报的历史数据。历史数据最多存储7天。详情请参见数据上报。 设备联动规则 设备联动规则是规则引擎的一种,通过设置一个规则的触发条件(如温度阈值、时间等),在满足触发条件时,物联网平台会触发一个指令来使设备执行一个操作(如上报信息、打开设备开关、上报告警等)。详细请参见规则引擎。 告警管理 支持管理通过规则引擎里定义触发的设备告警,包括查看告警详情和恢复告警。详细请参见设备监控。 设备分组及标签 支持对设备进行群组和标签管理,通过有效分组和批量管理,减轻设备管理成本。详细请参见群组与标签。 设备批操作 支持对设备的批量操作,包括:批量设备注册,批量配置更新、批量命令下发、批量固件升级、批量软件升级。 设备远程诊断 支持远程进行设备的运行日志收集、重启模组操作。详细请参见远程诊断。 设备配置更新 支持通过应用服务器或控制台以下发命令的方式,对设备的属性值进行更新。详细请参见设备配置更新。 设备OTA升级 支持通过OTA(Over the Air)的方式,对终端设备进行软件、硬件的升级操作,并通过软固件升级策略管理(群组、升级时间、并发数控制等),有效提升升级灵活性。详细请参见固件升级、软件升级。 报表统计 在控制台上提供了丰富的报表功能,方便用户查看应用和设备的使用情况。详细请参见设备监控。 当用户在开通设备管理服务时,系统默认一起开通设备接入服务,即用户在使用设备管理服务时,包含设备接入服务的能力。设备接入和设备管理的详细功能对比如下表所示: 功能 设备接入 设备管理 差异说明 多网络接入 √ √ - 原生协议接入 √ √ - 系列化Agent接入 √ √ 设备接入的Agent Lite SDK和设备管理的Agent Lite SDK是两套不同的SDK。 设备双向通信 √ √ - 应用对接 √ √ 设备接入服务使用的应用侧API接口和设备管理服务不是同一套,具体请参见API参考。 设备接入服务没有订阅推送功能,用户只能将设备上报数据转发到华为云其他云服务进行存储和处理。 设备影子 √ √ - 数据转发规则 √ √ 设备接入服务:将JSON格式的数据转发到华为云其他云服务 设备管理服务:设备上报的数据透传到华为云其他云服务。如果设备上报的数据是二进制数据,则进行码流base64封装为JSON格式后再转发到其他云服务。 设备实时状态监控 √ √ - 审计日志 √ √ - 产品模型定义 - √ 设备接入服务:仅透传数据,不解析和存储数据,不需要开发Profile及编解码插件。 设备管理服务:需要开发profile及编解码插件。 设备访问授权 - √ - 数据持久化存储 - √ 设备接入服务:对设备上报的数据不存储。 设备管理服务:对设备上报的数据进行存储,历史数据最多存储7天。 设备联动规则 - √ - 告警管理 - √ - 设备分组及标签 - √ - 设备批操作 - √ - 设备远程诊断 - √ - 设备配置更新 - √ - 设备OTA升级 - √ - 报表统计 - √ -
  • 设备发放 通过设备发放服务,您可以轻松管理跨多区域海量设备的发放工作,实现单点发放管理,设备全球上线。 功能 简介 设备启动引导 通过Bootstrap流程,引导物联网设备在初次上电时获得正确的目标物联网平台地址,继而完成设备与平台的建链过程。 设备身份信息鉴权 支持多种设备身份鉴权能力,如PSK(LWM2M协议),密钥(MQTT协议),X.509(规划中)等,设备发放服务完成对设备上线的身份认证鉴权。 多种智能发放策略 支持多种智能发放策略,比如关键字模糊匹配,设备就近选择物联网平台。 设备迁移能力 设备迁移能力,根据业务迁移需要,帮助企业重置设备发放信息,实现更改对端物联网平台的目的。 业务统计 提供关键发放业务相关统计,包括:发放区域,发放设备数。
  • 全球SIM联接 可实现设备在全球范围,通过定量流量、空中写卡和远程设备发放技术,实现就近华为公有云站点可靠接入,并享受当地资费套餐,详情请参考全球SIM联接。 功能 简介 连接服务管理 记录连接服务和其关联的设备信息,并支持对服务进行机卡关联、服务导出、服务订购/退订、停用/启用、网络切换等操作。 订购管理 提供连接服务的购买和订单的查询功能。 空中写卡 SIM卡功能和数据全部由软件实现,可以远程将SIM卡功能和数据写入设备。
  • 设备接入 物联网平台支持终端设备直接接入,也可以通过工业网关或者家庭网关接入;支持多网络接入、多协议接入、系列化Agent接入,解决设备接入复杂多样化和碎片化难题;提供基础的设备管理功能,实现设备的快速接入。 功能 简介 多网络接入 支持有线和无线的接入方式,如固定宽带、2G/3G/4G/5G、NB-IoT、Z-Wave、ZigBee、eLTE等。详细请参见设备集成引导。 多协议接入 支持设备通过LWM2M、CoAP、MQTT(S)、LoRa、Modbus等协议接入。详细请参见设备集成引导。 系列化Agent接入 支持Agent Lite和Agent Tiny,覆盖的语言包括C、Java、Android。Agent与海思、高通主流芯片、模组预集成,缩短TTM。详细请参见设备集成引导。 设备双向通信 物联网平台提供设备数据采集功能,例如设备业务数据、设备告警,同时支持应用对设备数据的订阅。详细请参见订阅推送。 支持通过应用服务器或控制台以下发命令的方式,将命令下发到设备,达到平台对设备远程控制的效果。详细请参见命令下发。 应用对接 物联网平台开放了海量的API接口和SDK,帮助开发者快速孵化行业应用。详细查看应用对接指引。 设备影子 设备影子是一个JSON文档,用于存储设备的状态、设备最近一次上报的设备属性、应用服务器期望下发的配置。每个设备有且只有一个设备影子,设备可以获取和设置设备影子以此来同步状态,这个同步可以是影子同步给设备,也可以是设备同步给影子。详细请参见设备影子。 数据转发规则 数据转发规则是规则引擎的一种,用于将物联网平台接收的设备数据,转发到华为公有云的其它服务进行数据分析、存储等。详细请参见规则引擎。 设备实时状态监控 物联网平台实时监控设备的状态,包括在线、离线、未激活,实时获取状态变更通知。详细请参见设备监控。 审计日志 控制台对所有物联网平台的使用人员的操作日志、安全日志(登录、登出、密码修改等)进行记录,便于 日志分析 和故障定位。详细请参见设备监控。
  • 数组及可变长数组数据类型 如果该烟感设备需要支持描述信息上报功能,描述信息描述信息支持数组和可变长度数组两种类型,则按照以下步骤创建消息。 产品模型定义 在烟感产品的开发空间完成产品模型定义。 图40 模型定义-smokedetector携带other_info 编解码插件开发 在烟感产品的开发空间,选择“插件开发”,单击“图形化开发”。 单击“新增消息”,新增消息“other_info”,上报数组类型的描述信息。配置此步骤的主要目的是,将设备上传的数组二进制码流消息解码成JSON格式,以便物联网平台理解。配置示例如下: 消息名:other_info 消息类型:数据上报 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会下发用户设置的响应数据到设备。 响应数据:AAAA0000(默认) 图41 插件开发-新增消息other_info 单击“添加字段”,添加messageId字段,表示消息种类。在本场景中,0x0用于标识上报火灾等级和温度的消息,0x1用于标识只上报温度的消息,0x2用于标识上报描述信息(数组类型)的消息。messageId、数据类型、长度、默认值、偏移值的说明可参考1。 图42 插件开发-添加字段messageId(0x2) 添加other_info字段,“数据类型”选择“array”,表示数组类型的描述信息。在本场景中,“长度”配置为5个字节。字段名、默认值、偏移值的说明可参考2。 图43 插件开发-添加字段other_info为array 单击“新增消息”,新增“other_info2”消息,上报可变长度数组类型的描述信息。配置此步骤的主要目的是,将设备上传的可变长度数组二进制码流消息解码成JSON格式,以便物联网平台理解。配置示例如下: 消息名:other_info2 消息类型:数据上报 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会下发用户设置的响应数据到设备。 响应数据:AAAA0000(默认) 图44 插件开发-新增消息other_info2 单击“添加字段”,添加messageId字段,表示消息种类。在本场景中,0x0用于标识上报火灾等级和温度的消息,0x1用于标识只上报温度的消息,0x3用于标识上报描述信息(可变长度数组类型)的消息。messageId、数据类型、长度、默认值、偏移值的说明可参考1。 图45 插件开发-添加字段messageId(0x3) 添加length字段,表示数组长度。“数据类型”根据可变长度数组的长度进行配置,长度在255以内,配置为“int8u”。长度、默认值、偏移值的说明可参考2。 图46 插件开发-添加字段length 添加other_info字段,数据类型选择“variant”,表示可变长度数组类型的描述信息。“长度关联字段”选择“length”,表示当前可变长数组的长度由上报的length的值决定。“掩码”默认为“0xff”,用来计算该数组实际生效的长度,例如:“长度关联字段”length的值为5,其对应的二进制为:00000101,此时若掩码为0xff,对应的二进制为:11111111,那么两者进行“与“运算之后的结果为00000101,即十进制的5,那么该数组实际生效的长度为5。如上报数据为03051234567890,表示当前上报的数据对应的是messageId为03的的message,可变长数组长度为5,可变长参数other_info对应的码流为1234567890。 图47 插件开发-添加字段other_info为variant 拖动右侧“设备模型”区域的属性字段,与数据上报消息的相应字段建立映射关系。 图48 插件开发-数据上报字段映射关系other_info为varint 单击“保存”,并在插件保存成功后单击“部署”,将编解码插件部署到物联网平台。 图49 插件开发-部署插件 调测编解码插件 在烟感产品的开发空间,选择“在线调试”,并单击“新增测试设备”。 用户可根据自己的业务场景,选择使用真实设备或者虚拟设备进行调测。具体调测步骤请参考在线调试。本文以虚拟设备为例,调测编解码插件。 在弹出的“新增测试设备”窗口,选择“虚拟设备”,单击“确定”,创建一个虚拟设备。虚拟设备名称包含 “DeviceSimulator”字样,每款产品下只能创建一个虚拟设备。 图50 在线调试-创建虚拟设备 单击“调试”,进入调试界面。 图51 在线调试-进入调试 使用设备模拟器上报数组类型的描述信息。 十六进制码流示例:0211223344。02表示messageId,此消息上报数组类型的描述信息;11223344表示描述信息,长度为4个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=null}。描述信息不足5个字节,编解码插件无法解析。 图52 在线调试-模拟数据上报other_info数组1 十六进制码流示例:021122334455。02表示messageId,此消息上报数组类型的描述信息;1122334455表示描述信息,长度为5个字节。 在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data: {"other_info":"ESIzRFU="}}。描述信息长度为5个字节,编解码插件解析成功。 图53 在线调试-模拟数据上报other_info数组2 十六进制码流示例:02112233445566。02表示messageId,此消息上报数组类型的描述信息;112233445566表示描述信息,长度为6个字节。 在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data: {"other_info":"ESIzRFU="}}。描述信息长度超过5个字节,编解码插件截取前5个字节进行解析。 图54 在线调试-模拟数据上报other_info数组3 使用设备模拟器上报可变长度数组类型的描述信息。 十六进制码流示例:030101。03表示messageId,此消息上报可变长度数组类型的描述信息;01表示描述信息长度(1个字节),长度为1个字节;01表示描述信息,长度为1个字节。 在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data: {"other_info":"AQ=="}}。AQ==是01经过base64编码后的值。 图55 在线调试-模拟数据上报other_info可变长数组1 十六进制码流示例:03020102。03表示messageId,此消息上报可变长度数组类型的描述信息;02表示描述信息长度(2个字节),长度为1个字节;0102表示描述信息,长度为2个字节。 在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data: {"other_info":"AQI="}}。AQI=是01经过base64编码后的值。 图56 在线调试-模拟数据上报other_info可变长数组2 十六进制码流示例:03030102。03表示messageId,此消息上报可变长度数组类型的描述信息;03表示描述信息长度(3个字节),长度为1个字节;0102表示描述信息,长度为2个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=null}。描述信息长度不足3个字节,编解码插件解析失败。 图57 在线调试-模拟数据上报other_info可变长数组3 十六进制码流示例:0303010203。03表示messageId,此消息上报可变长度数组类型的描述信息;03表示描述信息长度(3个字节),长度为1个字节;010203表示描述信息,长度为3个字节。 在“应用模拟器”区域查看数据上报的结果:{serviceId: smokedetector, data: {"other_info":"AQID"}}。AQID是010203经过base64编码后的值。 图58 在线调试-模拟数据上报other_info可变长数组4 十六进制码流示例:030301020304。03表示messageId,此消息上报可变长度数组类型的描述信息;03表示描述信息长度(3个字节),长度为1个字节;01020304表示描述信息,长度为4个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=AQID}。描述信息长度超过3个字节,编解码插件截取前3个字节进行解析,AQID是010203经过base64编码后的值。 图59 在线调试-模拟数据上报other_info可变长数组5 base64编码方式说明 base64编码方式会把3个8位字节(3*8=24)转化为4个6位字节(4*6=24),并在每个6位字节前补两个0,构成4个8位字节的形式。如果要进行编码的码流不足3个字节,则在码流后用0填充,使用0填充的字节经编码输出的字符为“=”。 base64可以将16进制码流当做字符或者数值进行编码,两种方式获得的编码结果不同。以16进制码流01为例进行说明: 把01当作字符,不足3个字符,补1个0,得到010。通过查询ASCII码表,将字符转换为8位二进制数,即:0转换为00110000、1转换为00110001,因此010可以转换为001100000011000100110000(3*8=24)。再转换为4个6位字节:001100、000011、000100、110000,并在每个6位字节前补两个0,得到:00001100、00000011、00000100、00110000。这4个8位字节对应的10进制数分别为12、3、4、48,通过查询base64编码表,获得M(12)、D(3)、E(4),由于3个字符中,最后一个字符通过补0获得,因此第4个8位字节使用“=”表示。最终,把01当做字符,通过base64编码得到MDE=。 把01当作数值(即1),不足3个字符,补两个0,得到100。将数值转换为8位2进制数,即:0转换为00000000、1转换为00000001,因此100可以转换为000000010000000000000000(3*8=24)。在转换为4个6位字节:000000、010000、000000、000000,并在每个6位字节前补两个0,得到:00000000、00010000、00000000、00000000。这4个8位字节对应的10进制数分别为:0、16、0、0,通过查询base64编码表,获得A(0)、Q(16),由于3个数值中,最后两个数值通过补0获得,因此第3、4个8位字节使用“=”表示。最终,把01当作数值,通过base64编码得到AQ==。 总结 当数据类型为数组或可变长度数组时,插件是按照base64进行编解码的:上报数据时,将16进制码流进行base64编码,比如:01编码为“AQ==”;命令下发时,将字符进行base64解码,比如:“AQ==”解码为01。 当某字段的数据类型为可变长度数组时,该字段需要关联长度字段,长度字段的数据类型必须为int。 针对可变长度数组,命令下发和数据上报的编解码插件开发方式相同。 图形化开发的编解码插件使用base64进行编码时,是将16进制码流当做数值进行编码。
  • 字符串及可变长字符串的编解码插件 如果该烟感设备需要支持描述信息上报功能,描述信息支持字符串和可变长度字符串两种类型,则按照以下步骤创建消息。 产品模型定义 重新创建一个烟感产品,并在烟感产品的开发空间完成产品模型定义。 图20 模型定义-smokedetector携带other_info 编解码插件开发 在烟感产品的开发空间,选择“插件开发”,单击“图形化开发”。 单击“新增消息”,新增消息“other_info”,上报字符串类型的描述信息。配置此步骤的主要目的是,将设备上传的字符串二进制码流消息解码成JSON格式,以便物联网平台理解。配置示例如下: 消息名:other_info 消息类型:数据上报 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会下发用户设置的响应数据到设备。 响应数据:AAAA0000(默认) 图21 插件开发-新增消息other_info 单击“添加字段”,添加messageId字段,表示消息种类。在本场景中,0x0用于标识上报火灾等级和温度的消息,0x1用于标识只上报温度的消息,0x2用于标识上报描述信息(字符串类型)的消息。messageId、数据类型、长度、默认值、偏移值的说明可参考1。 图22 插件开发-添加字段messageId(0x2) 添加other_info字段,表示字符串类型的描述信息。在本场景中,字符串类型的字段数据类型选择“string”,“长度”配置 6个字节。字段名、默认值、偏移值的说明可参考2。 图23 插件开发-添加字段other_info 单击“新增消息”,新增“other_info2”消息名,配置数据上报消息,上报可变长度字符串类型的描述信息。配置此步骤的主要目的是,将设备上传的可变长度字符串二进制码流消息解码成JSON格式,以便物联网平台理解。配置示例如下: 消息名:other_info2 消息类型:数据上报 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会下发用户设置的响应数据到设备。 响应数据:AAAA0000(默认) 图24 插件开发-新增消息other_info2 添加messageId字段,表示消息种类。在本场景中,0x0用于标识上报火灾等级和温度的消息,0x1用于标识只上报温度的消息,0x3用于标识上报描述信息(可变长度字符串类型)的消息。messageId、数据类型、长度、默认值、偏移值的说明可参考1。 图25 插件开发-添加字段messageId(0x3) 添加length字段,表示可变字符串长度。“数据类型”根据可变长度字符串的长度进行配置,此场景可变字符串长度在255以内,配置为“int8u”。长度、默认值、偏移值的说明可参考2。 图26 插件开发-添加字段length 添加other_info字段,数据类型选择“varstring”,表示可变长度字符串类型的描述信息。“长度关联字段”选择“length”,表示当前可变长字符串的长度由上报的length的值决定。“掩码”默认为“0xff”,用来计算该字段实际生效的长度,例如:“长度关联字段”length的值为5,其对应的二进制为:00000101,此时若掩码为0xff,对应的二进制为:11111111,那么两者进行“与“运算之后的结果为00000101,即十进制的5,那么该字段实际生效的长度为5个字节。如上报数据为03051234567890,表示当前上报的数据对应的是messageId为03的的message,可变长字符串长度为5个字节,可变长参数other_info对应的码流为1234567890。 图27 插件开发-添加字段other_info为varstring 拖动右侧“设备模型”区域的属性字段,与数据上报消息的相应字段建立映射关系。 图28 插件开发-数据上报字段映射关系 单击“保存”,并在插件保存成功后单击“部署”,将编解码插件部署到物联网平台。 图29 插件开发-部署插件 调测编解码插件 在烟感产品的开发空间,选择“在线调试”,并单击“新增测试设备”。 用户可根据自己的业务场景,选择使用真实设备或者虚拟设备进行调测。具体调测步骤请参考在线调试。本文以虚拟设备为例,调测编解码插件。 在弹出的“新增测试设备”窗口,选择“虚拟设备”,单击“确定”,创建一个虚拟设备。虚拟设备名称包含 “DeviceSimulator”字样,每款产品下只能创建一个虚拟设备。 图30 在线调试-创建虚拟设备 单击“调试”,进入调试界面。 图31 在线调试-进入调试 使用设备模拟器上报字符串类型的描述信息。 十六进制码流示例:0231。02表示messageId,此消息上报字符串类型的描述信息;31表示描述信息,长度为1个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=null}。描述信息不足6个字节,编解码插件无法解析。 图32 在线调试-模拟数据上报other_info长度不足 十六进制码流示例:02313233343536。02表示messageId,此消息上报字符串类型的描述信息;313233343536表示描述信息,长度为6个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=123456}。描述信息长度为6个字节,编解码插件解析成功。 图33 在线调试-模拟数据上报other_info长度合适 十六进制码流示例:023132333435363738。02表示messageId,此消息上报字符串类型的描述信息;3132333435363738表示描述信息,长度为8个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=123456}。描述信息长度超过6个字节,编解码插件截取前6个字节进行解析。 图34 在线调试-模拟数据上报other_info长度过长 十六进制码流示例:02013132333435。02表示messageId,此消息上报字符串类型的描述信息;013132333435表示描述信息,长度为6个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=\u000112345}。01在ASCII码表里表示“标题开始”,无法用具体字符表示,因此编解码插件解析为\u0001。 图35 在线调试-模拟数据上报other_info ASCII码 使用设备模拟器上报可变长度字符串类型的描述信息。 十六进制码流示例:030141。03表示messageId,此消息上报可变长度字符串类型的描述信息;01表示描述信息长度;41表示描述信息,长度为1个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=A}。41是A的十六进制ASCII码。 图36 在线调试-模拟数据上报other_info可变长字符串1 十六进制码流示例:03024142。03表示messageId,此消息上报可变长度字符串类型的描述信息;02表示描述信息的长度;4142表示描述信息,长度为2个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=AB}。4142是AB的十六进制ASCII码。 图37 在线调试-模拟数据上报other_info可变长字符串2 十六进制码流示例:030341424344。03表示messageId,此消息上报可变长度字符串类型的描述信息;03表示描述信息长度;41424344表示描述信息,长度为4个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=ABC}。描述信息长度超过3个字节,编解码插件截取前3个字节进行解析,414243是ABC的十六进制ASCII码。 图38 在线调试-模拟数据上报other_info可变长字符串3 十六进制码流示例:0304414243。03表示messageId,此消息上报可变长度字符串类型的描述信息;04表示字符串长度;414243表示描述信息,长度为4个字节。 在“应用模拟器”区域查看数据上报的结果:{other_info=null}。描述信息长度不足4个字节,编解码插件解析失败。 图39 在线调试-模拟数据上报other_info可变长字符串4 总结 当数据类型为字符串或可变长度字符串时,插件是按照ASCII码进行编解码的:上报数据时,将16进制码流解码为对应字符串,比如:21解析为“!”、31解析为“1”、41解析为“A”;下发命令时,将字符串编码对应的16进制码流,比如:“!”编码为21,“1”编码为31,“A”编码为41。 当某字段的数据类型为可变长度字符串时,该字段需要关联长度字段,长度字段的数据类型必须为int。 针对可变长度字符串,命令下发和数据上报的编解码插件开发方式相同。 图形化开发的编解码插件使用ASCII码16进制的标准表对字符串和可变长度字符串进行编解码。解码时(数据上报),如果解析结果无法使用具体字符表示,如:标题开始、正文开始、正文结束等,则使用\u+2字节码流值表示(例如:01解析为\u0001,02解析为\u0002);如果解析结果可以使用具体字符表示,则使用具体字符。
  • 数据上报和命令下发 场景说明 有一款烟感设备,具有如下特征: 具有烟雾报警功能(火灾等级)和温度上报功能。 支持远程控制命令,可远程打开报警功能。比如火灾现场温度,远程打开烟雾报警,提醒住户疏散。 支持上报命令执行结果。 产品模型定义 在烟感产品的开发空间,完成产品模型定义。 level:火灾级别,用于表示火灾的严重程度。 temperature:温度,用于表示火灾现场温度。 SET_ALARM:打开或关闭告警命令,value=0表示关闭,value=1表示打开。 图1 模型定义-smokedetector 编解码插件开发 在烟感产品的开发空间,选择“插件开发”,单击“图形化开发”。 单击“新增消息”,新增“smokerinfo”消息。配置此步骤的主要目的是,将设备上传的二进制码流消息解码成JSON格式,以便物联网平台理解。配置示例如下: 消息名:smokerinfo 消息类型:数据上报。 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会下发用户设置的响应数据到设备。 响应数据:AAAA0000(默认) 图2 插件开发-新增消息smokerinfo 单击“添加字段”,勾选“标记为地址域”,添加messageId字段,表示消息类型。在本场景中,上报火灾等级和温度的消息类型是0x0。设备上报消息时,每条消息首个字段就是messageId。如设备上报消息为0001013A,第一个字段00就是表示此条消息是上报火灾级别和温度的消息。后续字段01和013A分别代表火灾级别和温度。如果只有一条数据上报消息和一条命令下发消息,可以不添加messageId字段。 “数据类型”根据数据上报消息种类的数量进行配置。messageId字段默认的数据类型为int8u。 “偏移值”是根据字段位置和字段的字节数的配置自动填充的。messageId为此消息的第一个字段,起始位置为0,字节长度为1,终点位置为1。所以偏移值为0-1。 “长度”是根据“数据类型”的配置自动填充的。 “默认值”可以修改,但必须为十六进制格式,且设备数据上报消息的对应字段必须和此处的默认值保持一致。 图3 插件开发-添加字段messageId 添加level字段,表示火灾级别。 “字段名”只能输入包含字母、数字、_和$,且不能以数字开头的字符。 “数据类型”根据设备上报数据的实际情况进行配置,需要和产品模型相应字段的定义相匹配。产品模型中定义的火灾级别level属性的数据类型为int,最大值为9。所以选择的数据类型为int8u。 “偏移值”是根据字段位置和字段的字节数的配置自动填充的。“level”字段的起始位置就是前一字段的终点,前一字段“messageId”的终点位置为1,所以“level”字段的起始位置为1。“level”字段长度为1个字节,终点为2。所以“偏移值”为1-2。 “长度”根据“数据类型”的配置自动填充。 “默认值”不填。此处火灾级别level不固定,无默认值。 图4 插件开发-添加字段level 添加temperature字段,表示温度。 “数据类型”,在产品模型中,temperature属性的“数据类型”为int,最大值1000,因此在插件中定义temperature字段的“数据类型”为“int16u”,以满足temperature属性的取值范围。 “偏移值”是根据与首字段的间隔的字符数自动配置的。“temperature”字段的起始位置就是前一字段的终点,前一字段“level”的终点位置为2,所以“temperature”字段的起始位置为2。“temperature”字段长度为2个字节,终点为4。所以“偏移值”为2-4。 “长度”根据数据类型的配置自动填充。 “默认值”不填,此处温度temperature的值不固定,无默认值。 图5 插件开发-添加字段temperature 单击“新增消息”,新增“SET_ALARM”消息,设置火灾告警的温度阈值。例如超过60摄氏度,设备上报告警。配置此步骤的主要目的是,将平台下发的JSON格式命令消息编码成二进制数据,以便烟感设备理解。配置示例如下: 消息名:SET_ALARM 消息类型:命令下发 添加响应字段:是。添加响应字段后,设备在接收命令后,可以上报命令执行结果。您可以根据自己的需求,选择是否添加响应字段。 图6 插件开发-新增消息SET_ALARM 单击“添加字段”,添加messageId字段,表示消息类型。例如,设置火灾告警阈值的消息类型为0x3。messageId、数据类型、长度、默认值、偏移值的说明可参考1。 图7 插件开发-添加命令字段messageId(0x3) 添加mid字段。这里的mid字段是由平台生成和下发的,用于将下发的命令和命令下发响应消息关联。mid字段的数据类型默认为int16u。长度、默认值、偏移值的说明可参考2。 图8 插件开发-添加命令字段mid 添加value字段,表示下发命令的参数值。例如,下发火灾告警的温度阈值。数据类型、长度、默认值、偏移值的说明可以参考2。 图9 插件开发-添加命令字段value 单击“添加响应字段”,添加“messageId”字段,表示消息类型。命令下发响应消息为上行消息,需要通过messageId和数据上报消息进行区分。上报火灾告警温度阈值的消息类型为0x4。messageId、数据类型、长度、默认值、偏移值的说明可参考1。 图10 插件开发-添加响应字段messageId(0x4) 添加mid字段。这里的mid字段需要跟平台下发的命令里的mid字段保持一致,用于将下发的命令和命令执行结果进行关联。mid字段的数据类型默认为int16u。长度、默认值、偏移值的说明可参考2。 图11 插件开发-添加响应字段mid 添加errcode字段,用于表示命令执行状态:00表示成功,01表示失败,如果未携带该字段,则默认命令执行成功。errcode字段的数据类型默认为int8u。长度、默认值、偏移值的说明可参考2。 图12 插件开发-添加响应字段errcode 添加result字段,用于表示命令执行结果。例如,设备向平台返回当前的告警阈值。 图13 插件开发-添加响应字段result 拖动右侧“设备模型”区域的属性字段和命令字段,数据上报消息和命令下发消息的相应字段建立映射关系。 图14 插件开发-在线开发插件smokerdetector 单击“保存”,并在插件保存成功后单击“部署”,将编解码插件部署到物联网平台。 图15 插件开发-部署插件 调测编解码插件 在烟感产品的开发空间,选择“在线调试”,并单击“新增测试设备”。 用户可根据自己的业务场景,选择使用真实设备或者虚拟设备进行调测。具体调测步骤请参考在线调试。本文以虚拟设备为例,调测编解码插件。 在弹出的“新增测试设备”窗口,选择“虚拟设备”,单击“确定”,创建一个虚拟设备。虚拟设备名称包含 “DeviceSimulator”字样,每款产品下只能创建一个虚拟设备。 图16 在线调试-创建虚拟设备 单击“调试”,进入调试界面。 图17 在线调试-进入调试 使用设备模拟器进行数据上报。十六进制码流示例:0008016B。00为地址域messageId,08表示火灾级别level,长度为1个字节;016B表示温度,长度为2个字节。 在“应用模拟器”区域查看数据上报的结果:{level=8, temperature=363}。8为十六进制数08转换为十进制的数值;363为十六进制数016B转换为十进制的数值。 在设备模拟器区域看到平台下发的响应数据AAAA0000。 图18 在线调试-模拟数据上报smokerdetector 使用应用模拟器进行命令下发,输入value值为1,可看到应用模拟下发命令{ "serviceId": "Smokeinfo", "method": "SET_ALARM", "paras": "{\"value\":1}" }。 在“设备模拟器”区域查看命令接收的结果:03000101。03为地址域messageId,0001为mid字段,01为十进制数1转换为十六进制的数值。 图19 在线调试-模拟命令下发smokerdetector 使用CoAP的虚拟设备在线调试时,若下发命令后设备模拟器未接收到对应的命令,可以先上报一次属性后,再下发。 总结 如果插件需要对命令执行结果进行解析,则必须在命令和命令响应中定义mid字段。 命令下发的mid是2个字节,对于每个设备来说,mid从1递增到65535,对应码流为0001到FFFF。 设备执行完命令,命令执行结果上报中的mid要与收到命令中的mid保持一致,这样平台才能刷新对应命令的状态。
  • 使用真实设备调测产品 当设备侧开发已经完成,但应用侧开发还未完成时,您可以创建真实设备,使用应用模拟器对设备、产品模型、插件等进行调测。真实设备调测界面结构为三个部分: 左侧应用模拟器展示区域:呈现应用服务器接收到的属性数据和下发的命令。 右侧应用模拟器区域:模拟应用下发命令。 下方消息跟踪区域:呈现设备接入,属性上报和命令下发时,平台的处理日志,帮助开发者进行问题的定界和定位。 图6 在线调试-真实设备结构 在烟感产品的开发空间,选择“在线调试”,并单击“新增测试设备”。 在弹出的“新增测试设备”窗口,选择“真实设备”,输入测试设备的参数,单击“确定”。 图7 在线调试-新增测试设备 注:如果使用DTLS传输层安全协议接入时,请妥善保存密钥。 新添加的设备处于未激活状态,此时不能进行在线调试,可参考连接鉴权,待设备接入平台后,进行调试。 单击“调试”,进入调试界面。 图8 在线调试-进入调试 模拟远程下发控制命令场景,在应用模拟器中,选择服务:StreetLight,命令:SWITCH_LIGHT,命令取值为:ON,单击“发送”,我们可以看到路灯被点亮。
  • 使用虚拟设备调测产品 当设备侧开发和应用侧开发均未完成时,开发者可以创建虚拟设备,使用应用模拟器和设备模拟器对产品模型、插件等进行调测。模拟设备调测界面分为四个部分 1. 左侧应用模拟器展示区域:呈现应用服务器接收到的属性数据和下发的命令。 2. 左侧设备模拟器展示区域:呈现设备上报的属性和接收到的命令。 3. 右侧应用模拟器和设备模拟器区域:模拟应用下发命令或设备上报属性。 4. 下方消息跟踪区域:呈现设备接入,属性上报和命令下发时,平台的处理日志,帮助开发者进行问题的定界和定位。 图1 在线调试-虚拟设备结构 在产品开发空间,选择“在线调测”,并单击“新增测试设备”。 在弹出的“新增测试设备”窗口,选择“虚拟设备”,单击“确定”,创建一个虚拟设备。虚拟设备名称包含 “DeviceSimulator”字样,每款产品下只能创建一个虚拟设备。 在设备列表中,选择新创建的虚拟设备, 图2 在线调试-创建虚拟设备 单击右侧的“调试”,进入调试界面。 图3 在线调试-进入调试 在“设备模拟器”区域,输入十六进制码流或者JSON数据(以十六进制码流为例),单击“发送”,在“应用模拟器”区域查看数据上报的结果,在“消息跟踪”区域查看物联网平台处理日志。 图4 在线调试-模拟数据上报smokeInfo 在“应用模拟器”区域进行命令下发,在“设备模拟器”区域查看接收到的命令(以十六进制码流为例),在“消息跟踪”区域查看物联网平台处理日志。 图5 在线调试-命令下发介绍
  • 创建产品 产品是设备的合集,您可以将相同能力或特征的设备归属在同一个产品下。 登录管理控制台,单击左侧导航栏“产品”,单击页面左侧的“创建产品”。 根据页面提示填写参数,然后单击“立即创建”。 图5 创建产品-MQTT 表1 创建产品基本信息 基本信息 所属资源空间 平台自动将新创建的产品归属在默认资源空间下。如需归属在其他资源空间下,下拉选择所属的资源空间。如无对应的资源空间,请先创建资源空间。 产品名称 自定义,如StudentCard。支持字母、数字、下划线(_)、连字符(-)的字符组合。 协议类型 选择MQTT。 数据格式 选择JSON。 设备类型选择 选择自定义类型。 设备类型 根据实际填写,例如StudentCard。
  • 开发产品模型 在产品详情“基本信息”页面,单击“自定义模型”,配置产品的服务。 图6 自定义模型-MQTT 新增服务类型“Location”。 在“新增服务”页面,填写“服务ID”、“服务类型”和“服务描述”,单击“确定”。 图7 添加服务-Location “服务ID”:Location “服务类型”:建议和服务ID保持一致 “服务描述”:设备上报的位置数据 在“Location”的下拉菜单下单击“添加属性”,填写相关信息后,单击“确定”。 图8 新增属性-longitude 图9 新增属性-latitude 单击添加命令,输入命令名称“FREQUENCY_LOCATION_SET”。 图10 新增命令-FREQUENCY_LOCATION_SET 在“新增命令”页面,单击“新增输入参数”,填写相关信息后,单击“确定”。 图11 新增命令参数-period
  • 获取网桥接入信息 代码调试时,需要获取对应的网桥接入信息,并配置到对应的环境变量中。网桥接入信息,环境变量配置参考: 图1 环境变量配置参考 NET_BRIDGE_ID与NET_BRIDGE_SECRET在标准版和企业版支持在界面配置和获取,获取方式如下: 进入泛协议接入页面:登录管理控制台,单击左侧导航栏“IoTDA实例”,选择对应实例,点击右侧“详情”进入实例,选择“泛协议接入”页签后,单击“新增网关”。 图2 泛协议-新增云网关(非托管) 输入网关名,单击“确定”,会弹出网桥创建成功界面,单击“保存并关闭”,获得NET_BRIDGE_SECRET值。 图3 泛协议-创建网桥成功 在界面中可以获取到NET_BRIDGE_ID。 图4 泛协议-获取网桥ID
  • 使用流程&操作步骤 图1 非$oc开头自定义topic通信 为了适配新老客户的使用,策略默认放通所有“非$oc开头的自定义Topic通信”。新增的资源空间会默认加入策略“system_default_policy”,system_default_policy策略会允许所有Topic的订阅与发布。当业务场景不适用时,可以删除该策略。 值得注意的是,策略只会限制“非$oc开头的自定义Topic通信”。“$oc开头的自定义Topic”权限由产品下的设定决定。 目前广州、北京四、上海局点不支持策略,可跳过策略(步骤2、3)、直接使用。
  • 可用区管理 权限 对应的API接口 授权项(Action) 依赖的授权项 IAM 项目 (Project) 企业项目 (Enterprise Project) 实例授权 标签授权 查询可用区列表(OpenStack原生)(废弃) GET /v2.1/{project_id}/os-availability-zone ecs:availabilityZones:list - √ × × × 父主题: 权限和授权项
  • 请求示例 批量删除指定云服务器的2组标签。 POST https://{endpoint}/v1/{project_id}/cloudservers/{server_id}/tags/action { "action": "delete", "tags": [ { "key": "key1", "value": "value1" }, { "key": "key2", "value": "value3" } ] }
  • 请求消息 请求参数如表2所示。 表2 请求参数 参数 是否必选 参数类型 描述 tags 是 Array of objects 标签列表,详情参见表3 action 是 String 操作标识(仅支持小写):delete(删除) 表3 tags 字段数据结构说明 参数 是否必选 参数类型 描述 key 是 String 键。 不能为空。 同一资源的key值不能重复。 value 否 String 值。 可以为空字符串。
  • 响应(任务类) 正常响应要素说明 名称 参数类型 说明 job_id String 提交任务成功后返回的任务ID,用户可以使用该ID对任务执行情况进行查询。如何根据job_id来查询Job的执行状态,请参考查询Job状态。 异常响应要素说明 名称 参数类型 说明 error Object 提交任务异常时返回的异常信息,详情请参见表1。 表1 error数据结构 名称 参数类型 说明 message String 任务异常错误信息描述。 code String 任务异常错误信息编码。 details Array of objects 任务异常时错误详情。 该信息主要包含任务异常时的细化错误编码和错误描述信息,便于使用本服务API的客户端应用代码处理错误。 该字段属于非必选字段。 表2 details数据结构 名称 参数类型 说明 message String 任务异常错误信息描述。 该字段属于非必选字段。 code String 任务异常错误信息编码。 该字段属于非必选字段。 响应示例 正常响应: { "job_id": "ff80808288d41e1b018990260955686a" } 异常响应: { "error": {"message": "", "code": XXX,""} } 包含错误详情的异常响应: { "error": { "message": "xxxx", "code": "xxxx", "details": [ { "code": "xxxx", "message": "xxxx" } ] } } 父主题: 提交任务类请求结果
  • 付费方式 创建包年/包月的云服务器时(chargingMode为prePaid),通过extendparam.isAutoPay字段控制订单的支付方式。 取值为true在订单创建完成后自动支付。 取值为false订单需要用户手动支付。手动支付可以填写优惠券和折扣券等信息。 手动支付需要调用支付包年/包月产品订单接口进行支付,以下示例是使用一张优惠券,优惠券类型为代金券的请求示例。 POST https://bss.myhuaweicloud.com/v2/orders/customer-orders/pay { "coupon_infos": [ { "id": "CP2005270256xxxxxx", "type": 301 } ], "order_id": " CS 190401192xxxxxx" }
  • 查询资源价格 使用查询按需产品价格和查询包年/包月产品价格,根据云服务类型、资源类型、云服务区和资源规格四个条件来查询产品价格。 例如查询华东上海二可用区、通用计算型、Linux操作系统、s6.small.1规格的包月,一个月的价格。 POST https://bss.myhuaweicloud.com/v2/bills/ratings/period-resources/subscribe-rate { "product_infos": [ { "id": "1", "cloud_service_type": "hws.service.type.ec2", "resource_type": "hws.resource.type.vm", "resource_spec": "s6.small.1.linux", "region": "cn-east-2", "available_zone": "cn-east-2a", "period_type": 2, "period_num": 1, "subscription_num": 1 } ], "project_id": "05041fea8a8025662f4ac00927982f3e" } 响应信息如下所示,其中official_website_amount字段的取值即为包年/包月产品价格。 { -"official_website_rating_result": { "official_website_amount": 32.2, "measure_id": 1, -"product_rating_results": [-{ "id": "1", "product_id": "00301-233164-0--0", "official_website_amount": 32.2, "measure_id": 1 }] }, "optional_discount_rating_results": [], "currency": "CNY" }
  • 查询资源的可用配额 如需查询当前账号的资源配额信息,包括已使用的配额,可以通过调用查询租户配额接口。 GET https://ecs.cn-east-2.myhuaweicloud.com/v1/05041fea8a8025662f4ac00927982f3e/cloudservers/limits 响应信息如下,例如通过maxTotalInstances可以查看云服务器的最大申请数量,通过totalInstancesUsed可以查看当前云服务器使用个数。 { -"absolute": { "maxServerMeta": 128, "maxPersonality": 5, "maxImageMeta": 128, "maxPersonalitySize": 10240, "maxSecurityGroupRules": 20, "maxTotalKeypairs": 1000, "total RAM Used": 22528, "totalInstancesUsed": 4, "maxSecurityGroups": 10, "totalFloatingIpsUsed": 0, "maxTotalCores": 8000, "totalSecurityGroupsUsed": 1, "maxTotalFloatingIps": 10, "maxTotalInstances": 1000, "totalCoresUsed": 11, "maxTotalRAMSize": 16384000, "maxServerGroups": 32, "maxServerGroupMembers": 16, "totalServerGroupsUsed": 0, "maxTotalSpotInstances": 20, "maxTotalSpotCores": 320, "maxTotalSpotRAMSize": 655360, "totalSpotInstancesUsed": 0, "totalSpotCoresUsed": 0, "totalSpotRAMUsed": 0, "maxFaultDomainMembers": 200, "limit_by_flavor": [] } }
  • 查询规格资源是否可购买/资源是否售罄 如需查询某一具体的云服务器规格在某可用区是否资源充足,可以通过调用查询规格详情和规格扩展信息列表查看该规格的详细信息。并通过响应信息中的cond:operation:status和cond:operation:az字段的取值判断在区域和可用区的取值。 例如查询华东上海二可用区一的资源情况,请求URI如下。 GET https://ecs.cn-east-2.myhuaweicloud.com/v1/05041fea8a8025662f4ac00927982f3e/cloudservers/flavors?availability_zone=cn-east-2a 响应信息 { "id": "c3.3xlarge.2", "name": "c3.3xlarge.2", ... "os_extra_specs": { "cond:spot_block:operation:az": "cn-east-2a(sellout),cn-east-2b(normal),cn-east-2c(normal),cn-east-2d(normal)", "cond:operation:az": "cn-east-2d(sellout),cn-east-2a(normal),cn-east-2b(normal)" ... "cond:operation:status": "abandon", "cond:spot_block:operation:interrupt_policy": "cn-east-2d(immediate),cn-east-2a(immediate),cn-east-2b(immediate),cn-east-2c(immediate)", "resource_type": "IOoptimizedC3_2" } } 响应信息中通过cond:operation:status和cond:operation:az字段的取值判断资源是否可用。 优先查看cond:operation:az的取值,如果某个可用区没有在cond:operation:az参数中配置时默认使用cond:operation:status的取值。 例如本例中,c3.3xlarge.2在华东上海二的可用区一、可用区二正常商用,可用区四售罄,可用区三在在cond:operation:az中无配置信息,则以cond:operation:status的取值为准,即c3.3xlarge.2在华东上海二的可用区三下线。
  • 操作场景 本节内容介绍了使用 API购买 ECS过程中的一些高频场景。 表1 使用API创建ECS的高频场景 场景 说明 购买包年/包月ECS 为您介绍购买包年/包月资源的参数设置。 删除包年/包月ECS/退订包年/包月ECS 包年/包月资源需要通过退订的方式才可以被删除。 查询可用的公共镜像 购买ECS时候前查询公共镜像信息可以通过在GET请求后通过‘?’和‘&’添加不同的查询条件组合。 包年/包月资源续费 包年/包月资源即将到期时,可进行包年/包月资源的续订。指定资源ID,续费方式,续费时间,订单支付方式。 创建订单后资源未开通 创建完成后查不到资源信息可能是订单尚未支付,查看订单的状态并完成订单支付。 查询规格资源是否可购买/资源是否售罄 查询某一具体的云服务器规格在某可用区是否资源充足,通过响应信息中的cond:operation:status和cond:operation:az字段的取值判断在区域和可用区的取值。 付费方式 创建包年/包月的云服务器时(chargingMode为prePaid),通过extendparam.isAutoPay字段控制订单的支付方式。 查询资源的可用配额 调用查询租户配额接口,通过maxTotalInstances可以查看云服务器的最大申请数量,通过totalInstancesUsed可以查看当前云服务器使用个数。 查询资源价格 使用查询按需产品价格和查询包年/包月产品价格,根据云服务类型、资源类型、云服务区和资源规格四个条件来查询产品价格。
  • 创建订单后资源未开通 订单创建后未查询到服务器信息,可能是由于指定了自动支付:请求体中extendparam.isAutoPay取值为false或续费时isAutoPay取值为0。 通常服务器创建后会返回一个order_id,即订单ID。 { "job_id": "ff808082739334d80173943ec9b42130", "order_id": "CS2007281506xxxxx", "serverIds": [ "fe0528f0-5b1c-4c8c-9adf-e5d5047b8c17" ] } 通过调用查询订单详情接口查看订单的状态 请求示例 GET https://bss.myhuaweicloud.com/v2/orders/customer-orders/details/CS2007281506xxxxx 响应示例 { "total_count": 1, "order_info": { "order_id": "CS2007281506xxxxx", "customer_id": "982f05775ec94da390c3f174xxxxxxxx", "service_type_code": "hws.service.type.ecs", "source_type": 1, "status": 6, …… } 响应示例中"status": 6说明订单状态为待付款。此时需要手动支付该订单 手动支付可以填写优惠券和折扣券等信息。 手动支付需要调用支付包年/包月产品订单支付,以下示例是使用一张优惠券,优惠券类型为代金券的请求示例。 POST https://bss.myhuaweicloud.com/v2/orders/customer-orders/pay { "coupon_infos": [ { "id": "CP2005270256xxxxxx", "type": 301 } ], "order_id": "CS2007281506xxxxx" }
  • 查询可用的公共镜像 使用 镜像服务 的查询镜像列表的API可以根据不同条件查询镜像列表信息,在GET请求后通过‘?’和‘&’添加不同的查询条件组合。 如需查询公共镜像列表。 GET /v2/cloudimages?__imagetype=gold&visibility=public&protected=true 请注意调用镜像服务接口注意替换镜像服务的Endpoint信息。 查询镜像列表时,建议使用分页查询才能返回全部的镜像列表。通过指定marker和limit实现镜像列表的分页查询。 marker表示从哪个镜像开始查询,取值为镜像ID。limit表示查询几条镜像记录,取值为整数,默认取值为500。 GET /v2/cloudimages?__imagetype=gold&visibility=public&protected=true&marker=af92bb51-ec9d-4b02-912f-da0b3f0f7635&limit=5 如需查询其他的镜像类型 公共镜像列表查询 GET /v2/cloudimages?__imagetype=gold&visibility=public&protected=true 私有镜像列表查询 GET /v2/cloudimages?owner={project_id} 可以使用的共享镜像列表 GET /v2/cloudimages?member_status=accepted&visibility=shared&__imagetype=shared 被拒绝的共享镜像列表 GET /v2/cloudimages?member_status=rejected&visibility=shared&__imagetype=shared 未接受的共享镜像列表 GET /v2/cloudimages?member_status=pending&visibility=shared&__imagetype=shared 裸金属服务器某规格支持的公共镜像列表 GET /v2/cloudimages?__imagetype=gold&__support_xxx=true&virtual_env_type=Ironic 如果未指定镜像类型,那么可以通过响应信息中的__imagetype字段判断镜像类型。
  • 购买包年/包月ECS 购买包年/包月ECS可以使用创建弹性云服务接口,相对于创建按需的ECS,只需要在请求body中指定extendparam.chargingMode参数值为“prePaid”,即包年包月,指定订购的周期等。extendparam的详细参数解释请参见创建云服务器的extendparam字段数据结构说明。 如下所示,在cn-north-1区域购买一台包年/包月ECS,时长为一个月,且下单后自动支付,自动续订。 { "server": { "name": "newserver", "availability_zone": "cn-north-1a", "flavorRef": "s3.small.1", "imageRef": "8da46d6d-6079-4e31-ad6d-a7167efff892", "root_volume": { "volumetype": "SATA" }, "vpcid": "7e1a7e70-3f3e-4581-955e-26a4848d8f31", "nics": [ { "subnet_id": "04548cde-4067-48b0-9323-5c7b67ac13fc" } ], "data_volumes": [ { "volumetype": "SSD", "size": 50 } ], "publicip": { "id": "publicip_123", "eip": { "iptype": "5_bgp", "bandwidth": { "size": 10, "sharetype": "PER" } } }, "extendparam": { "chargingMode": "prePaid", "periodType": "month", "periodNum": 1, "isAutoRenew": "true", "isAutoPay": "true", "regionID": "cn-north-1" } } } 包年/包月ECS创建后会返回一个order_id,即订单ID。 { "job_id": "ff808082739334d80173943ec9b42130", "order_id": "CS2007281506xxxxx", "serverIds": [ "fe0528f0-5b1c-4c8c-9adf-e5d5047b8c17" ] } 上面请求体中extendparam.isAutoPay取值为true,表示自动支付,如果不填该字段或取值为false,则需要手动去支付,手动支付可以填写优惠券和折扣券等信息。手动支付需要调用支付包年/包月产品订单支付,示例如下。 POST https://bss.myhuaweicloud.com/v2/orders/customer-orders/pay { "order_id": "CS20052715001E4CR" }
  • 删除包年/包月ECS/退订包年/包月ECS 包年/包月ECS无法直接调用ECS接口删除,需要调用退订包年/包月资源接口进行退订。 POST https://bss.myhuaweicloud.com/v2/orders/subscriptions/resources/unsubscribe { "resource_ids": [ "21e09f37c5c9420c8746ad5c71fb3aab" ], "unsubscribe_type": 1 } 其中resource_ids表示资源ID,对退订ECS来说,就是购买包年/包月ECS时返回的serverIds。
  • 包年/包月资源续费 包年/包月资源即将到期时,可进行包年/包月资源的续订。通过调用续订包年/包月资源接口进行续费。 如下所示,指定资源ID,按月续费,续费1个月,到期后转按需,并自动支付订单。 POST https://bss.myhuaweicloud.com/v2/orders/subscriptions/resources/renew { "resource_ids": [ "96308d5efd7841b9a4dac673d84d0e14" ], "period_type": 2, "period_num": 1, "expire_policy": 1, "is_auto_pay": 1 } 续费成功后会返回一个order_id,即订单ID。 { "order_ids": [ "CS190401192xxxxxx" ] } 上面请求体中isAutoPay取值为1,表示自动支付,如果不填该字段或取值为0,则需要手动去支付,手动支付可以填写优惠券和折扣券等信息。手动支付需要调用支付包年/包月产品订单支付,以下示例是使用一张优惠券,优惠券类型为代金券的请求示例。 POST https://bss.myhuaweicloud.com/v2/orders/customer-orders/pay { "coupon_infos": [ { "id": "CP2005270256xxxxxx", "type": 301 } ], "order_id": "CS190401192xxxxxx" }
共100000条