华为云用户手册

  • deviceId、nodeId和IMEI有什么对应关系? 在物联网平台中,设备注册时,需要填写设备标识码(即nodeId)。设备标识码是设备的物理标识,通常使用IMEI或MAC地址。设备ID(deviceId)是物联网平台对设备的逻辑标识。 NB-IoT设备:在设备接入物联网平台时携带设备标识码(nodeId),完成设备的接入鉴权。 MQTT设备:在设备接入物联网平台时携带设备ID(deviceId)和密钥,通过一机一密的方式,完成设备的接入鉴权。 更多请参考设备注册鉴权。
  • 创建规则或者设置资源文件存储时候提示赋予Security Administrator权限 使用IAM用户访问设备接入服务,创建规则或者设置资源文件存储时提示“请联系管理员给您所在的用户组赋予Security Administrator的权限”,表明IAM用户没有授予委托管理权限,请参考以下操作配置权限。 方法1:创建一个自定义策略(包括查询、创建委托、查询角色等功能),并添加到IAM用户所在的用户组中(推荐该方法) 使用管理员账号登录IAM控制台,单击左侧导航栏的“权限管理--权限”,单击页面右上角的“创建自定义策略”。 策略名称:自定义; 策略配置方式:json视图; 策略内容:参考如下填写; { "Version": "1.1", "Statement": [ { "Action": [ "iam:agencies:createAgency", "iam:agencies:listAgencies", "iam:agencies:getAgency", "iam:permissions:listRolesForAgencyOnDomain", "iam:permissions:listRolesForAgencyOnProject", "iam:permissions:grantRoleToAgencyOnProject", "iam:permissions:revokeRoleFromAgencyOnProject", "iam:permissions:grantRoleToAgencyOnDomain", "iam:permissions:revokeRoleFromAgencyOnDomain", "iam:permissions:checkRoleForAgencyOnProject", "iam:permissions:checkRoleForAgencyOnDomain", "iam:roles:createRole", "iam:roles:listRoles", "iam:roles:getRole" ], "Effect": "Allow" } ] } 单击确定,完成自定义策略的创建 选择左侧导航栏的“用户组”,单击对应用户组进入用户组详情。 单击“授权记录“页签,单击“授权“按钮。 进入“授权--选择策略“页面,勾选步骤1中创建的策略,单击”下一步” 在”授权--设置最小授权范围”页面,选择”所有资源”,单击”确定”,完成授权。 方法2:为IAM用户所在的用户组授予Security Administrator的权限 登录IAM控制台,选择左侧导航栏的“用户组”,单击对应用户组进入用户组详情。 在“授权记录”页签下单击“授权”,搜索”Security Administrator”然后选择”Security Administrator”策略,单击”下一步”。 注:该权限具有委托、角色、用户管理等所有功能,权限范围大,请按实际需要分配。 在”授权--设置最小授权范围”页面,选择”所有资源”,单击”确定”,完成授权。 父主题: 方案咨询
  • 离线开发的插件通过了工具检测,上传到平台后,设备日志提示异常? 问题描述 离线开发的插件包已经通过了编解码插件检测工具检测后,上传平台后,设备日志提示异常。 图5 设备日志错误提示 可能原因 该异常是运行插件代码抛出的异常,一般是相关依赖没有引入或者代码逻辑有误,可根据日志中的Java异常提示进行处理。 解决方法 在离线插件关键代码处(例如decode函数入口处,出口处等)打印日志,并联系物联网平台支撑人员在后台获取日志,辅助定位问题。 图6 打印日志样例
  • 在线开发的插件部署失败如何处理? 问题描述 用户在插件开发界面开发好了编解码插件,单击部署按钮部署失败了 可能原因 如果插件下载成功,但是部署失败,则可能是网络问题导致 如果插件下载失败,则部署失败的原因如下: 同类消息的(例如:两种数据上报的消息)messageId的值设置重复或在消息中的位置不一致。 messageId的数据类型设置为非int型。 存在字段的默认值设置为非16进制数。 存在字段名字设置为java关键字,比如type、int等 解决方法 插件如果可以成功下载,但是部署失败,请检查网络状态,并重试。 如果插件下载失败,请排查插件定义是否符合规范。
  • 在线开发插件中地址域(messageId)如何使用? 当有相同类型的消息时(例如:两种数据上报的消息),需要添加地址域字段,用于区分不同的消息,且该字段在字段列表的位置必须一致。场景如下: 有两条及以上的数据上报消息或命令下发消息。 命令响应消息可看作一种数据上报消息,因此如果存在命令响应消息,则需要在数据上报消息中添加地址域。 数据上报响应消息可看作一种命令下发消息,因此如果存在数据上报响应消息,则需要在命令下发消息中添加地址域。
  • 在线开发的插件中如何实现命令下发响应? 设备在接收到命令后,可以上报两类消息:ACK和命令下发响应。ACK用于表示命令已经到达设备,命令下发响应用于表示设备执行命令的结果。如果需要设备在接到命令后,需要返回命令下发响应,则: 需要在数据上报消息和命令响应消息中均定义地址域字段(messageId),并且该字段在两种消息的字段列表中的位置必须相同,使编解码插件可以对数据上报消息和命令响应消息进行区分。 需要在命令下发消息和命令响应消息中定义响应标识字段(mid),并且该字段在两种消息的字段列表中的位置必须相同,使编解码插件可以将命令下发消息和对应的命令响应消息进行关联。
  • IAM用户访问API提示没有权限?(是否区分版本?) 2020/04/23设备接入服务上线了细粒度策略权限控制,如果未对IAM用户授予IoTDA的权限,使用IAM用户访问设备接入资源提示没有权限,返回"Operation not allowed. The user does not have the permission"报错。您可以参考如下步骤为IAM用户所在的用户组授予IoTDA FullAccess预置系统策略权限。 操作步骤: 访问统一身份认证服务IAM,单击“立即使用”进入IAM服务控制台。 单击左侧导航栏的“用户组”。在用户组列表单击该IAM用户所在的用户组右侧的“权限配置”。 单击左上方的“配置权限”按钮。 选择作用范围。 选择“区域级项目”。 根据token级别,在下拉框中选择需要授权的区域。 指定所有项目与指定区域(如北京四)的区别:因使用IAM获取token时会指定scope是domain或project级别,若您用的是domain级别的token则应该选择所有项目,反之则选择指定区域。 在下拉框分别选择“系统策略”和“设备接入IoTDA”,或者在右侧搜索框输入“IoTDA”。 勾选“IoTDA FullAccess”,单击右下角的“确认”,完成用户组授权。 父主题: 方案咨询
  • 设备发放流程中使用到的证书都有哪些,它们有何区别? 设备发放提供证书认证方式,证书认证为双向认证过程,涉及到设备发放(平台)和设备两端,过程如下图所示。 图1 设备发放流程 双向证书认证过程使用到了如下几类证书: 表1 证书类别 证书 说明 证书及其私钥持有者 签发者 服务端证书 步骤2中,设备发放设备侧将该证书返回设备。 设备发放设备侧持有 权威CA(服务端证书的CA证书)签发 服务端CA证书 步骤3中,客户端使用该服务端CA证书验证服务端证书,通常为权威CA证书,获取方式见MQTT CONNECT连接鉴权。 权威CA机构持有 权威CA机构签发 设备证书(客户端证书) 步骤4中,设备将该证书发送给设备发放设备侧。 设备 CA证书 CA证书(设备CA证书/客户端CA证书) 步骤5中,设备发放设备侧使用该CA证书验证来自设备的客户端证书。用户通过应用侧上传该证书到设备发放平台。 用户 通常为自签发 样例中各类证书常用文件名: 表2 证书常用文件名 证书 文件名 MQTT.fx中的字段名 服务端证书 - - 服务端CA证书 如下其中之一: GlobalSignRSAOVSSLCA2018.bks(android)GlobalSignRSAOVSSLCA2018.crt.pem(c或java)GlobalSignRSAOVSSLCA2018.jks(java) bsca.jks(java) bsrootcert.pem(c) CA File 设备证书(客户端证书) client.crt Client Certificate File 设备证书(客户端证书)私钥 client.key Client Key File CA证书(设备CA证书/客户端CA证书) server.crt - 双向认证,即双向证书认证,与单向认证中不同的是,不仅包含单向认证中的设备对平台的证书验证步骤,还包含了平台对设备的证书验证步骤。
  • 操作步骤 访问设备接入服务,单击“管理控制台”进入设备接入控制台。 单击左侧导航栏“产品”,单击页面左侧的“创建产品”。根据页面提示填写参数,然后单击“确定”,完成产品的创建。 基本信息 所属资源空间 下拉选择所属的资源空间。如无对应的资源空间,请先创建资源空间。 产品名称 为产品命名。产品名称在相同资源空间有唯一性。长度不超过64,只允许中文、字母、数字、以及_?'#().,&%@!-等字符的组合。 协议类型 MQTT:使用MQTT协议接入平台的设备,数据格式可以是二进制也可以是JSON格式,采用二进制时需要部署编解码插件。 LwM2M/CoAP:使用在资源受限(包括存储、功耗等)的NB-IoT设备,数据格式是二进制,需要部署编解码插件才能与物联网平台交互。 HTTPS:HTTPS是基于HTTP协议,通过SSL加密的一种安全通信协议。物联网平台支持HTTPS协议通信。 Modbus:物联网平台支持使用Modbus协议接入,使用Modbus协议的设备接入IoT边缘节点的方式为非直连。直连设备和非直连设备差异说明,请参考这里。 HTTP(TLS加密)、ONVIF、OPC-UA、OPC-DA、Other:通过边缘接入。 数据格式 JSON:平台和设备之间的通信协议采用JSON格式。 二进制码流:您需在控制台开发编解码插件,将设备上报的二进制码流数据转换为JSON格式;将平台下发的JSON格式数据解析为二进制码流格式,设备才能与平台进行通信。 所属行业 请根据实际情况选择。 设备类型 请根据实际情况选择。 高级配置 产品ID 定制ProductID,用于唯一标识一个产品。如果携带此参数,平台将产品ID设置为该参数值;如果不携带此参数,产品ID在物联网平台创建产品后由平台分配获得。 产品描述 产品描述。请根据实际情况填写。 产品创建成功后,您可以单击“删除”删除不再使用的产品。删除产品后,该产品下的产品模型、编解码插件等资源将被清空,请谨慎操作。
  • 调测“创建设备”接口 在设备接入物联网平台前,应用服务器需要调用此接口在物联网平台创建设备。在设备接入物联网平台时携带设备唯一标识,完成设备的接入认证。 应用服务器需要构造一个HTTP请求,请求示例如下: POST https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/{project_id}/devices Content-Type: application/json X-Auth-Token: ******** { "node_id" : "ABC123456789", "device_name" : "dianadevice", "product_id" : "b640f4c203b7910fc3cbd446ed437cbd", "auth_info" : { "auth_type" : "SECRET", "secure_access" : true, "fingerprint" : "dc0f1016f495157344ac5f1296335cff725ef22f", "secret" : "3b935a250c50dc2c6d481d048cefdc3c", "timeout" : 300 }, "description" : "watermeter device" } 参考API文档,调测物联网平台创建设备接口。 注:在以下步骤中,只呈现样例调测用到的参数。 配置“创建设备”接口的HTTP方法、URL和Headers。 配置“创建设备”接口的Body。 单击“Send”,在下方查看返回码和响应消息内容。 请将返回的“device_id”更新到“IoTDA”环境中的“device_id”参数中,用于后续其它接口使用。 注意:在postman中自动更新了“device_id”参数,使用时无需手动操作。
  • 调测“查询设备”接口 应用服务器需要查询在物联网平台创建的设备详情时,可以调用此接口。 应用服务器需要构造一个HTTP请求,请求示例如下: GET https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/{project_id}/devices/{device_id} Content-Type: application/json X-Auth-Token: ******** 参考API文档,调测物联网平台查询设备接口。 注:在以下步骤中,只呈现样例调测用到的参数。 配置“查询设备”接口的HTTP方法、URL和Headers。 单击“Send”,在下方查看返回码和响应消息内容。
  • 调测“查询产品”接口 应用服务器如果需要查询之前创建的产品详情,可以调用此接口。 应用服务器需要构造一个请求,请求示例如下: GET https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/{project_id}/products/{product_id} Content-Type: application/json X-Auth-Token: ******** 接下来参考API文档,调测物联网平台查询产品接口。 注:在以下步骤中,只呈现样例调测用到的参数。 配置“查询产品”接口的HTTP方法、URL和Headers。 单击“Send”,在下方查看返回码和响应消息内容。
  • 调测“创建产品”接口 在设备接入物联网平台前,应用服务器需要调用此接口创建产品,后续注册设备时需要使用这里创建的产品。 应用服务器需要构造一个请求,请求示例如下: POST https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/{project_id}/products Content-Type: application/json X-Auth-Token: ******** { "name" : "Thermometer", "device_type" : "Thermometer", "protocol_type" : "MQTT", "data_format" : "binary", "manufacturer_name" : "ABC", "industry" : "smartCity", "description" : "this is a thermometer produced by Huawei", "service_capabilities" : [ { "service_type" : "temperature", "service_id" : "temperature", "description" : "temperature", "properties" : [ { "unit" : "centigrade", "min" : "1", "method" : "R", "max" : "100", "data_type" : "decimal", "description" : "force", "step" : 0.1, "enum_list" : [ "string" ], "required" : true, "property_name" : "temperature", "max_length" : 100 } ], "commands" : [ { "command_name" : "reboot", "responses" : [ { "response_name" : "ACK", "paras" : [ { "unit" : "km/h", "min" : "1", "max" : "100", "para_name" : "force", "data_type" : "string", "description" : "force", "step" : 0.1, "enum_list" : [ "string" ], "required" : false, "max_length" : 100 } ] } ], "paras" : [ { "unit" : "km/h", "min" : "1", "max" : "100", "para_name" : "force", "data_type" : "string", "description" : "force", "step" : 0.1, "enum_list" : [ "string" ], "required" : false, "max_length" : 100 } ] } ], "option" : "Mandatory" } ], "app_id" : "jeQDJQZltU8iKgFFoW060F5SGZka" } 参考API文档,调测物联网平台创建产品接口。 注:在以下步骤中,只呈现样例调测用到的参数。 配置“创建产品”接口的HTTP方法、URL和Headers。 配置“创建产品”接口的BODY。 单击“Send”,在下方查看返回码和响应消息内容。 将返回的“product_id”更新到“IoTDA”环境中的“product_id”参数中,用于后续其它接口使用。 注:在postman中自动更新了“product_id”参数,使用时无需手动操作。
  • 调测“查询IAM用户可以访问的项目列表”接口 在访问物联网平台业务接口前,应用服务器需要调用“查询IAM用户可以访问的项目列表”接口获取用户的项目ID,用于后续访问物联网平台业务接口。 应用服务器需要构造一个HTTP请求,请求示例如下: GET https://iam.cn-north-4.myhuaweicloud.com/v3/auth/projects Content-Type: application/json X-Auth-Token: ******** 参考API文档,调测查询IAM用户可以访问的项目列表接口。 配置“查询IAM用户可以访问的项目列表”接口的HTTP方法、URL和Headers。 单击“Send”,在下方查看返回码和响应消息内容。 返回body中包含一个projects列表,查找其中“name”参数值与“IoTDA”环境中“region”参数值相同的条目,取其“id”参数值更新到“IoTDA”环境中“project_id”参数,以便于在调用其它接口时使用。 这里我们已经在postman中自动更新了“project_id”参数,使用时无需手动操作。
  • 调测“获取IAM用户Token”接口 在访问物联网平台业务接口前,应用服务器需要调用“获取IAM用户Token”接口鉴权,华为云认证通过后向应用服务器返回鉴权令牌X-Subject-Token。 应用服务器需要构造一个HTTP请求,请求示例如下: POST https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "********", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "xxxxxxxx" } } } } 参考API文档,调测获取IAM用户Token接口。 配置“获取IAM用户Token”接口的HTTP方法、URL和Headers。 配置“获取IAM用户Token”接口的Body。 单击“Send”,在下方查看返回码和响应消息内容。 请将返回头域中的的X-Subject-Token更新到“IoTDA”环境的“X-Auth-Token”参数中,以便于在调用其它接口时使用。若超过令牌有效时间,需要重新调用鉴权接口。 这里我们已经在postman中自动更新了“X-Auth-Token”参数,使用时无需手动操作。
  • 安装并配置Postman 安装Postman。 访问Postman官网,下载并安装Windows 64位Postman最新版本。 安装Postman依赖.NET Framework 4.5组件。 如需下载Windows 32位Postman最新版本,访问此处下载。 填写邮箱、用户名和密码注册Postman。 导入Postman环境变量。 单击右上角的图标,打开“MANAGE ENVIRONMENTS”窗口。 单击“Import”,在弹出的页面中,单击“选择文件”,导入IoTDA.postman_environment.json文件(下载Collection解压后获取)。 单击导入的“IoTDA”环境。 参考下表修改以下参数。 参数名 参数说明 IAMEndpoint IAM终端节点,参考IAM地区和终端节点获取。 IoTDAEndpoint 物联网平台终端节点,参考2.e。 IAMUserName IAM用户名,参考我的凭证获取。 IAMPassword 登录华为云的密码。 IAMDoaminId 账号名,参考我的凭证获取。 region 开通设备接入服务的区域,参考物联网平台终端节点获取。 IoTDAEndpoint参考 进入控制台,选择左侧导航栏“总览”,单击“实例基本信息-接入信息”,根据相应的接入类型和协议选择对应的接入地址 图1 接入信息 返回主页,选择环境变量为刚导入的“IoTDA”。 单击左上角的“Import”,单击“Choose Files”导入“应用侧API调用(V5版本).postman_collection.json”。 导入成功后,显示如下。
  • 概述 Postman是网页调试与辅助接口调用的工具,具有界面简洁清晰、操作方便快捷的特性,可以处理用户发送的HTTP请求,例如:GET,PUT、POST,DELETE等,支持用户修改HTTP请求中的参数并返回响应数据。 为充分了解接口,建议提前获取应用侧API参考查阅。我们已经写好了Postman的collection,在Collection中接口的请求结构体已经完成可以直接使用。 本文档以Postman为例,模拟应用服务器以HTTPS协议接入物联网平台,调测以下API接口: “获取IAM用户Token”接口 “查询IAM用户可以访问的项目列表”接口 “创建产品”接口 “查询产品”接口 “创建设备”接口 “查询设备”接口
  • 创建产品 创建MQTT协议产品。如果已有MQTT协议产品,可跳过此步骤。 登录管理控制台,单击左侧导航栏“产品”,单击页面左侧的“创建产品”。 根据页面提示填写参数,然后单击“创建”。 表1 创建产品信息参数 基本信息 所属资源空间 平台自动将新创建的产品归属在默认资源空间下。如需归属在其他资源空间下,下拉选择所属的资源空间。如无对应的资源空间,请先创建资源空间。 产品名称 自定义。支持字母、数字、下划线(_)、连字符(-)的字符组合。 协议类型 选择MQTT。 数据格式 选择JSON。 所属行业 请根据实际情况填写。 设备类型 请根据实际情况填写。 高级配置 产品ID 定制ProductID,用于唯一标识一个产品。如果携带此参数,平台将产品ID设置为该参数值;如果不携带此参数,产品ID在物联网平台创建产品后由平台分配获得。 图2 创建产品
  • 连接鉴权 参考连接鉴权接口文档,使用MQTT.fx工具接入物联网平台。 下载MQTT.fx(默认是64位操作系统,如果是32位操作系统,单击此处下载MQTT.fx),安装MQTT.fx工具。 安装最新版MQTT.fx工具,可单击此处下载。 MQTT.fx 1.7.0及旧版本对带有$的主题(Topic)处理存在问题,请使用最新版本进行测试。 访问这里,填写注册设备后生成的设备ID(DeviceId)和密钥(DeviceSecret),生成连接信息(ClientId、Username、Password)。 设备通过MQTT协议的connect消息进行鉴权,对于构造clientId的各个部分信息都必须包括进去,平台收到connect消息时,会判断设备的鉴权类型和密码摘要算法。 使用生成工具生成的clientId格式,默认不校验时间戳:设备ID_0_0_时间戳。 当采用“HMACSHA256”校验时间戳方式时,会先校验消息时间戳与平台时间是否一致,再判断密码是否正确。 当采用“HMACSHA256”不校验时间戳方式时,clientId也需要携带“YYYYMMDDHH”格式时间戳,用于加解密密码。 connect消息鉴权失败时,平台会返回错误,并自动断开MQTT链路。 打开MQTT.fx软件,单击设置图标。 参考下表配置鉴权参数,然后单击“Apply”。 参数名称 说明 Broker Address 填写从设备接入服务控制台获取的设备对接地址,此地址为域名信息。不能通过域名接入的设备,此处填写从2中获取的IP地址。 Broker Port 默认为1883。 Cliend ID 设备cliendID,请参考2中获取。 User Name 即设备ID,请参考2中获取。 Password 加密后的设备密钥,请参考2中获取。 注:如果您选择安全方式接入,Broker Port设置为8883,下载并获取证书,加载Java语言pem格式的证书。 单击“Connect”,设备鉴权成功后,在物联网平台“所有设备”界面可以看到设备处于在线状态。
  • 设备开发资源 物联网平台支持设备通过MQTT协议、LWM2M/CoAP协议和HTTPS协议进行接入,也可以通过IoTEdge将Modbus、OPC-UA、OPC-DA这些协议的设备接入。设备可以通过调用接口或者集成SDK的方式接入到物联网平台。 资源包名 描述 下载路径 IoT Device SDK(Java) 设备可以通过集成IoT Device SDK(Java)接入物联网平台, Demo提供了调用SDK接口的样例代码。使用指导请参考 IoT Device SDK使用指南(Java)。 IoT Device SDK(Java) IoT Device SDK(C) 设备可以通过集成IoT Device SDK(C)接入物联网平台, Demo提供了调用SDK接口的样例代码。使用指导请参考 IoT Device SDK(C)使用指南。 IoT Device SDK(C) IoT Device SDK(C#) 设备可以通过集成IoT Device SDK(C#)接入物联网平台, Demo提供了调用SDK接口的样例代码。使用指导请参考 IoT Device SDK(C#)使用指南。 IoT Device SDK(C#) IoT Device SDK(Android) 设备可以通过集成IoT Device SDK(Android)接入物联网平台, Demo提供了调用SDK接口的样例代码。使用指导请参考 IoT Device SDK(Android)使用指南。 IoT Device SDK(Android) IoT Device SDK(Go) 设备可以通过集成IoT Device SDK(Go)接入物联网平台, Demo提供了调用SDK接口的样例代码。使用指导请参考 IoT Device SDK(Go)使用指南。 IoT Device SDK(Go) IoT Device SDK(Python) 设备可以通过集成IoT Device SDK(Python)接入物联网平台, Demo提供了调用SDK接口的样例代码。使用指导请参考 IoT Device SDK(Python)使用指南。 IoT Device SDK(Python) IoT Device SDK Tiny (C) 设备可以通过集成IoT Device SDK Tiny (C)接入物联网平台, Demo提供了调用SDK接口的样例代码。使用指导请参考 IoT Device Tiny SDK(C)使用指南 IoT Device SDK Tiny (C) 原生MQTT/MQTTS协议接入示例 设备侧可以通过原生MQTT/MQTTS协议接入到物联网平台,Demo提供了SSL加密建链和TCP不加密建链、数据上报、订阅Topic的样例代码。 接入示例参考:Java版、Python版、Android版、C版、C#、NodeJS。 quickStart(Java) quickStart(Android) quickStart(Python) quickStart(C) quickStart(C#) quickStart(Node.js) 产品模型模板 产品模型模板中包含了典型场景的产品模型样例,开发者可以在模板基础进行修改,定义自己需要的产品模型。 使用指导可以参考离线开发产品模型。 产品模型开发示例 编解码插件样例 编解码插件的代码样例工程,开发者可以基于该样例工程进行二次开发。 编解码插件开发样例 编解码插件检测工具 用于检测离线开发的编解码插件的编解码能力是否正常。 编解码插件检测工具 NB-IoT设备模拟器 用于模拟以CoAP/LWM2M协议接入物联网平台的NB设备,实现数据上报和命令下发功能。 使用指导可以参考基于控制台开发产品。 NB-IoT设备模拟器 IoT Link Studio(原名为IoT Studio) IoT Link Studio是针对IoT物联网端侧开发(IoT Device SDK Tiny)的IDE环境,提供了编译、烧录、调试等一站式开发体验,支持 C、 C++、汇编等多种开发语言,让您快速、高效地进行物联网开发。 使用指导可以参考基于NB-IoT小熊派开发智慧路灯。 IoT Link Studio
  • 设备接入方式 华为物联网平台支持多种接入方式,满足各类设备和接入场景要求。请根据设备类型,选择合适的开发模式。 开发模式 特点 适用场景 难度系数 认证MCU开发模式 IoT Device SDK Tiny已经预集成在MCU(Main Control Unit)中,可以直接调用方法连接华为云IoT。 设备商用时间短,研发成本低,无需管理子设备的直连设备。 认证模组开发模式 IoT Device SDK Tiny已经预集成在模组中,通过调用AT指令连接华为云IoT。 需要节省MCU资源,无需管理子设备的直连设备。详细接入方式请参考通过华为认证模组接入。 LiteOS开发模式 设备运行在LiteOS中,通过LiteOS对MCU进行资源管理,同时liteOS内置了IoT Device SDK Tiny,可以通过调用函数连接华为云IoT。LiteOS开发模式的设备开发耗时更短,开发难度也低。 无操作系统,无需管理子设备的直连设备 常规开发模式 集成IoT Device SDK Tiny到MCU中,调用SDK中的函数连接华为云IoT,相比API接入更便捷。 设备商用时间充足,MCU的Flash与RAM资源满足IoT Device SDK Tiny集成条件的场景。 Open CPU开发模式 节省一个MCU,使用公用模组中的MCU能力,将设备的应用程序编译运行在OpenCPU上。 安全要求高,体积较小,商用时间短的设备 网关设备开发模式 IoT Device SDK预置到CPU(Central Processing Unit)或者MPU(Main Processing Unit)中,通过调用函数连接到华为云IoT。 管理子设备的网关设备。
  • JavaScript编解码插件模板 以下为JavaScript编解码插件的模板,开发者需要按照平台提供的模板,实现对应的接口。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 /** * 设备上报数据到物联网平台时调用此接口进行解码, 将设备的原始数据解码为符合产品模型定义的JSON格式数据。 * 该接口名称和入参已经定义好,开发者只需要实现具体接口即可。 * @param byte[] payload 设备上报的原始码流 * @param string topic MQTT设备上报数据时的topic,非MQTT设备上报数据时不携带该参数 * @return string json 符合产品模型定义的JSON格式字符串 */ function decode(payload, topic) { var jsonObj = {}; return JSON.stringify(jsonObj); } /** * 物联网平台下发指令时,调用此接口进行编码, 将产品模型定义的JSON格式数据编码为设备的原始码流。 * 该接口名称和入参格式已经定义好,开发者只需要实现具体接口即可。 * @param string json 符合产品模型定义的JSON格式字符串 * @return byte[] payload 编码后的原始码流 */ function encode(json) { var payload = []; return payload; }
  • 接口介绍 API分组 应用场景 产品管理 产品模型定义了该产品下所有设备具备的能力或特征,产品管理为应用服务器提供对已导入物联网平台中产品模型的操作管理功能。 设备管理 设备管理为应用服务器提供对设备的操作管理功能,包括对设备基本信息和设备数据的操作。 设备消息 设备消息为应用服务器提供向设备透传消息的功能。 设备命令 设备的产品模型中定义了物联网平台可向设备下发的命令,设备命令为应用服务器提供向设备下发命令的功能,实现对设备的控制操作。 设备属性 设备的产品模型中定义了物联网平台可向设备下发的属性,设备属性为应用服务器提供向设备下发属性的功能。 AMQP队列管理 AMQP队列管理为客户创建、删除、查看队列。AMQP队列可通过规则订阅后通过AMQP客户端接收消息数据。 接入凭证管理 接入凭证是用于AMQP、MQTTS等协议建立长链接时认证使用。 数据转发、设备联动 规则管理为应用服务器提供物联网平台的规则引擎功能,通过设置规则实现业务的联动变化或将数据转发至其他华为云服务。包含设备联动和数据转发两种类型。 设备联动:包含触发条件和执行动作两部分。当满足设置的触发条件后,触发相应动作,如“下发命令”、“发送通知”、“上报告警”、“恢复告警”。 数据转发:包含设置转发数据、设置转发目标和启动规则三部分。支持转发至“数据接入服务DIS”、“分布式消息服务 Kafka”、“对象存储服务 OBS”、“应用与数据集成平台 ROMA Connect”、“第三方应用服务(HTTP推送)”、“AMQP推送消息队列”、、、。 订阅管理 订阅管理为应用服务器提供对物联网平台资源的订阅功能,若订阅的资源发生变化,平台会通知应用服务器。 设备影子 设备影子是一个用于存储和检索设备当前状态信息的文件,设备影子为应用服务器提供对设备影子的操作管理功能。 每个设备有且只有一个设备影子,由设备ID唯一标识。 设备影子仅保存最近一次设备的上报数据和用户设置的预期数据。 无论该设备是否在线,都可以通过该影子查询和设置设备的状态。 设备组管理 设备组管理为应用服务器提供对设备组的管理操作功能,包括对设备组信息和设备组设备的操作。 标签管理 标签可用于对资源进行分类,标签管理为应用服务器提供对各类资源绑定和解绑标签功能。 当前仅设备支持标签。 资源空间管理 资源空间管理为应用服务器提供对资源空间的管理能力,包括资源空间的增删改查。 批量任务 批量任务为应用服务器提供批量处理功能,对接入物联网平台的设备进行批量操作。 目前提供批量软、固件升级,批量创建/删除/更新设备,批量冻结/解冻设备,批量创建同步/异步命令,批量创建消息和批量配置设备影子的能力。 当前单用户单一任务类型的未完成的任务最大为10,超过则无法创建新的任务。 设备CA证书管理 设备CA证书管理为应用服务器提供对设备CA证书进行操作管理功能,包括对设备CA证书进行上传、验证、查询等操作。物联网平台支持使用证书进行设备接入认证。 OTA升级包管理 OTA升级包管理为应用服务器提供对升级包进行操作管理功能,包括对升级包的创建、查询、删除等操作。 广播消息 广播消息为应用服务器向订阅了指定Topic的所有在线设备发布消息。 设备隧道管理 设备隧道可用于应用服务器与设备进行数据传输。 数据流转积压策略管理 数据流转积压策略管理为应用服务器提供了对积压策略的管理操作功能,包括对数据流转积压策略的创建,查询,修改删除等操作功能。 数据流转流控策略管理 数据流转流控策略管理为应用服务器提供了对流控策略的管理操作功能,包括对数据流转流控策略的创建,查询,修改删除等操作功能。
  • 应用开发资源 为了降低应用的开发难度、提升开发效率,物联网平台开放了应用侧API。应用通过调用物联网平台的API,实现安全接入、设备管理、数据采集、命令下发等业务场景。 资源包名 描述 下载 应用侧开发 API Java Demo 物联网平台为应用服务器提供了应用侧API,能够让开发者快速验证API开放的能力,体验业务功能,熟悉业务流程。 API Java Demo 应用侧开发 Java SDK Java SDK提供Java方法调用应用侧API与平台通信。使用指南可以参考Java SDK使用指南。 Java SDK 应用侧开发 C# SDK C# SDK提供C#方法调用应用侧API与平台通信。使用指南可以参考C# SDK使用指南。 C# SDK 应用侧开发 Python SDK Python SDK提供Python方法调用应用侧API与平台通信。使用指南可以参考Python SDK使用指南。 Python SDK 应用侧开发 Go SDK Go SDK提供Go方法调用应用侧API与平台通信。使用指南可以参考Go SDK使用指南。 Go SDK 应用侧开发 Node.js SDK Node.js SDK提供Node.js方法调用应用侧API与平台通信。使用指南可以参考Node.js SDK使用指南。 Node.js SDK 应用侧开发 PHP SDK PHP SDK提供PHP方法调用应用侧API与平台通信。使用指南可以参考PHP SDK使用指南。 PHP SDK
  • SDK接口说明: 表1 表1 泛协议SDK提供监听平台下行数据的接口说明 接口 说明 BridgeCommandListener 平台命令下发监听接口。泛协议插件可以通过该接口将平台的下行命令转发给第三方协议设备。 BridgeDeviceMessageListener 平台消息下发监听接口。泛协议插件可以通过该接口将平台的下行消息转发给第三方协议设备。 BridgeDeviceDisConnListener 平台通知网桥断开设备连接监听接口。泛协议插件可以通过该接口主动断开第三方协议设备的连接。 LoginListener 网桥等待设备登录结果的监听接口。泛协议插件可以通过该接口监听设备是否登录成功。 LogoutListener 网桥等待设备登出结果的监听接口。泛协议插件可以通过该接口监听设备是否登出成功。 表2 表2 泛协议SDK提供的相关类说明 类 说明 BridgeClientConf 泛协议SDK客户端配置类(包括泛协议SDK连接平台的地址、网桥ID、密钥等参数) BridgeBootstrap 泛协议SDK启动初始化类。 BridgeClient 泛协议SDK网桥客户端实现类,实现同平台的通信(设备登录、设备消息上报、设备属性上报、设备登出等)
  • 上报升级结果 根据PCP协议约定的交互流程,设备在执行完软件升级后,将会向物联网平台上报升级的结果。 设备发送的请求消息 根据PCP消息结构的定义可以得出,设备向物联网平台上报升级结果,各个消息字段的填写如下: 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致,为18。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段的数据类型得出数据区长度为17字节,转换为十六进制为:0011。 数据区:结果码,以上报升级成功为例,结果码为00。当前版本号:升级完成后的版本号,与物联网平台下发的软件版本一致,即v1.0,转换为十六进制为:56312E30000000000000000000000000。 字段 数据类型 描述及要求 结果码 BYTE 0X00升级成功。 0X01设备使用中。 0X04电量不足。 0X05剩余空间不足。 0X09内存不足。 0X0A安装升级包失败。 0X7F内部异常。 当前版本号 BYTE[16] 设备当前版本号。 设备向物联网平台上报升级结果的消息为:FFFE 01 18 0000 0011 0056312E30000000000000000000000000(CRC16校验前),经CRC16计算得到校验码为:C7D2。则替换校验码后设备向物联网平台上报升级结果码流为:FFFE0118C7D200110056312E30000000000000000000000000。 物联网平台发送的应答消息 物联网平台收到设备上报的升级结果消息后,将对设备进行应答,各个消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致:18。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段定义得出该数据长度为1个字节,转换为十六进制为:0001。 数据区:处理成功,则返回00,升级任务不存在80。本示例以返回00处理成功为例进行说明。 字段 数据类型 描述及要求 结果码 BYTE 0X00处理成功。 0X80升级任务不存在。 物联网平台向设备的应答消息为:FFFE 01 18 0000 0001 00 (CRC16校验前),经CRC16计算得到校验码为:AFA1。则替换校验码后物联网平台返回的应答消息为:FFFE0118AFA1000100 。 至此,设备的软件升级功能适配就完成了,赶紧动手试一试吧。
  • 下载升级包 根据PCP协议约定的交互流程,物联网平台通知设备有新的软件版本时,设备向物联网平台请求下载软件包,按照分片的序号进行下载。 设备发送的请求消息 根据PCP消息结构的定义可以得出,设备向物联网平台发送的请求软件包分片的第一条消息,各消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:查询消息码表可知请求升级包的消息码为21,转换为十六进制为:15。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段的数据类型得出数据区长度为18个字节,转换为十六进制为:0012。 数据区:目标版本号为平台下发的新版本通知版本号,即v1.0,转换为十六进制为56312E30000000000000000000000000,分片序号为第0个分片,即0000。 字段 数据类型 描述及要求 目的版本号 BYTE[16] 目的版本号,由ASCII字符组成,位数不足时,后补“0X00”。 分片序号 WORD 表示请求获取的分片序号,从0开始计算,分片的总数为软件包大小除以每个分片的大小并向上取整获得。设备可以保存已经收到的分片,下次直接从缺失的分片开始请求,达到断点续传的效果。 设备向物联网平台发送请求软件包分片的第一条消息为:FFFE 01 15 0000 0012 56312E30000000000000000000000000 0000(CRC16校验前),经CRC16计算得到校验码为:5618。则替换校验码后设备发送的第一条请求分片消息为:FFFE01155618001256312E300000000000000000000000000000。 其它分片请求的消息流只需要替换分片序号后,重新计算并替换CRC16校验码即可,此处就不再展开。 物联网平台的应答消息 物联网平台收到设备的请求软件包分片消息后,将会给设备下发分片的数据。物联网平台向设备响应的第一条请求分片的消息,各消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致:15。 校验码:CRC16计算前先用0000替代。 数据区:先讲数据区再讲数据区长度。结果码:00,分片序号:第0个分片:0000,分片数据:跟软件包定义的内容有关,我们假设软件包内容为HELLO, IoT SOTA!,经ASCII码转换为十六进制为:48454C4C4F2C20496F5420534F544121,共16字节。用户上传软件包时手动输入升级包分片大小为500byte,即最大长度为500字节。这种情况下,无需在数据的后面补充0。 字段 数据类型 描述及要求 结果码 BYTE 0X00处理成功。 0X80升级任务不存在。 0X81指定的分片不存在。 分片序号 WORD 表示返回的分片序号。 分片数据 BYTE[n] 分片的内容,n为实际的分片大小。如果结果码不为0,则不带此字段。 数据区长度:根据数据区的字段定义得出该数据长度为19,转换为十六进制为:0013。 物联网平台向设备发送的第一个软件包分片消息为:FFFE 01 15 0000 0013 00 0000 48454C4C4F2C20496F5420534F544121(CRC16校验前),经CRC16计算得到校验码为:E107。则替换校验码后物联网平台向设备发送的第一个软件包分片消息为:FFFE0115E107001300000048454C4C4F2C20496F5420534F544121。 其它软件包分片的消息流只需要替换分片序号和分片数据后,重新计算并替换CRC16校验码即可,此处就不再展开。
  • 执行软件升级 根据PCP协议约定的交互流程,物联网平台收到设备发送的软件包下载结果通知后,需要通知设备进行升级操作。 物联网平台发送的请求消息 根据PCP消息结构的定义可以得出,物联网平台向设备发送执行软件升级消息,各个消息字段的填写如下: 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致,为17。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段的数据类型得出无数据区,即为0字节,转换为十六进制为:0000。 数据区:无数据区,无需携带该字段。 字段 数据类型 描述及要求 无数据区 物联网平台向设备下发的执行软件升级的消息为:FFFE 01 17 0000 0000(CRC16校验前),经CRC16计算得到校验码为:CF90。则替换校验码后物联网平台向设备发送的消息为:FFFE0117CF900000。 设备发送的应答消息 设备收到物联网平台下发的执行升级消息后,将对收到消息后的执行动作进行应答,各消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致:17。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段定义得出该数据长度为1个字节,转换为十六进制为:0001。 数据区:处理成功,则返回00,其它处理结果请参考数据区定义。本示例以返回00处理成功为例进行说明。 字段 数据类型 描述及要求 结果码 BYTE 0X00处理成功。 0X01设备使用中。 0X04电量不足。 0X05剩余空间不足。 0X09内存不足。 设备向物联网平台应答的消息为:FFFE 01 17 0000 0001 00 (CRC16校验前),经CRC16计算得到校验码为:B725。则替换校验码后设备返回的响应消息为:FFFE0117B725000100 。
  • 上报下载结果 根据PCP协议约定的交互流程,设备接收完所有分片数据并组装完软件包后,需要向物联网平台上报软件包的下载结果。 设备发送的请求消息 根据PCP消息结构的定义可以得出,设备向物联网平台发送的上报软件包下载结果消息,各个消息字段的填写如下: 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致,为16。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段的数据类型得出数据区长度为1个字节,转换为十六进制为:0001。 数据区:上报软件包的下载结果,比如下载成功,设备侧上报00。 字段 数据类型 描述及要求 下载状态 BYTE 0X00下载成功。 0X05剩余空间不足。 0X06下载超时。 0X07升级包校验失败。 0X08升级包类型不支持。 设备向物联网平台发送升级包下载结果的消息为:FFFE 01 16 0000 0001 00(CRC16校验前),经CRC16计算得到校验码为:850E。则替换校验码后设备发送的升级包下载结果的消息为:FFFE0116850E000100。 物联网平台的应答消息 物联网平台收到设备上报的软件包下载结果后,将会向设备返回应答消息,各个消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致:16。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段定义得出该数据长度为1个字节,转换为十六进制为:0001。 数据区:处理成功,则返回00,处理失败返回80。本示例以返回00处理成功为例进行说明。 字段 数据类型 描述及要求 结果码 BYTE 0X00处理成功。 0X80升级任务不存在。 物联网平台向设备应答的消息为:FFFE 01 16 0000 0001 00 (CRC16校验前),经CRC16计算得到校验码为:850E。则替换校验码后物联网平台向设备应答的消息为:FFFE0116850E000100。
  • 下载新版本软件包通知 根据PCP协议约定的交互流程,查询完版本号后,物联网平台下发指令让设备下载新版本的软件包。 物联网平台发送消息 根据PCP消息结构的定义可以得出,物联网平台向设备下发下载新版本软件包通知时,各消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:此处为新版本通知,查询消息码表可以知道新版本通知为20,转换为十六进制为14。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的消息字段可以得出,数据区长度为22个字节,转换为十六进制为:0016。 数据区:根据数据区的定义可知。 目标版本号:由16个字节组成,假设升级的目标版本号为v1.0版本,转换为十六进制并在后面14个字节补充0后得到:56312E30000000000000000000000000。 升级包分片大小:由2个字节组成,单位为byte,用户上传软件包时可以手动输入升级包分片大小,如果不设置默认为500byte,大小为32~500之间。假设为500byte,转换为十六进制后为:01F4。 升级包分片总数:由2个字节组成,由软件包大小除以每个分片的大小并向上取整获得。假设软件包大小为500byte,则分片数量为1,转换为十六进制后为:0001。 检验码:由2个字节组成,目前已废弃,固定为:0000。 字段 数据类型 描述及要求 目的版本号 BYTE[16] 目的版本号,由ASCII字符组成,位数不足时,后补“0X00”。 升级包分片大小 WORD 每个分片的大小 升级包分片总数 WORD 升级包分片总数 升级包校验码 WORD 固定为:0000 将下载新版本软件包通知的消息流组合起来得到:FFFE 01 14 0000 0016 56312E30000000000000000000000000 01F4 0001 0000。前面说了,还要将消息流进行CRC16算法计算得到校验码为02F7。因此,物联网平台向设备通知下载新版本软件包的信息,物联网平台向设备发送的消息流为FFFE011402F7001656312E3000000000000000000000000001F400010000。 设备返回的应答消息 设备收到下载新版本软件包通知后,设备向物联网平台返回应答消息,是否允许设备进行升级,各消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致,为14。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段的数据类型得出数据区长度为1个字节,转换为十六进制为:0001。 数据区:设备根据自身的情况对平台下发的新版本通知进行响应,本示例以设备应答“允许升级”为例进行介绍,得出数据区为:00。其它应答消息请根据应答消息字段进行适配。 字段 数据类型 描述及要求 结果码 BYTE “0X00”允许升级 “0X01”设备使用中 “0X02”信号质量差 “0X03”已经是最新版本 “0X04”电量不足 “0X05”剩余空间不足 “0X09”内存不足 “0X7F”内部异常 将设备给物联网平台的应答消息流组合起来得到:FFFE 01 14 0000 0001 00。前面说了,还要将消息流进行CRC16算法计算得到校验码为D768。因此,设备向平台返回的应答消息流为FFFE0114D768000100。
共100000条