华为云用户手册

  • IOS平台App特征信息基本概念 特征信息 定义 Bundle ID Bundle ID是iOS应用程序的唯一标识符。例:com.huaweicloud.App。 公钥 公钥是加密算法中的公钥,用于保护数据的安全性。在App中,公钥通常用于验证应用程序的数字签名,以确保应用程序的完整性和真实性。 备案时,在IOS平台中填写证书中的公共密钥。 签名MD5值 签名 MD5 值是指应用程序在发布到应用商店之前,由开发者使用签名证书对应用程序进行数字签名后所得到的 MD5 值。 App 特征信息中的 MD5 值,指的是 App 证书的数字指纹值。 备案时在IOS平台中填写证书的SHA-1 值(以16进制形式填写)。
  • 鸿蒙平台App特征信息基本概念 特征信息 定义 App包名 App包名是HarmonyOS应用程序的唯一标识符,例如:com.huaweicloud.harmony 公钥 公钥是加密算法中的公钥,用于保护数据的安全性。在App中,公钥通常用于验证应用程序的数字签名,以确保应用程序的完整性和真实性。 备案时,在鸿蒙平台中填写证书中的公钥。 签名MD5值 签名 MD5 值是指应用程序在发布到应用商店之前,由开发者使用签名证书对应用程序进行数字签名后所得到的 MD5 值。 App 特征信息中的 MD5 值,指的是 App 证书的数字指纹值。 备案时在鸿蒙平台中填写证书中的指纹值。
  • 获取App特征信息(鸿蒙应用) 1. 登录AppGallery Connect网站,选择“我的项目”。 2. 选择需要查询的应用。 3. 获取包名。在“应用”信息下,页面中的“App ID”即为应用ID,“包名”即为应用包名。 图1 获取鸿蒙包名 4. 获取公钥和MD5。点击“用户与访问”,在页面左侧点击“证书管理”,下载需要备案的鸿蒙应用开发者证书; 图2 用户与访问 图3 证书管理 5. 使用文本编辑器(如,记事本)打开已下载的证书,按照图示内容删除根证书和中间证书,保留叶子证书后,点击保存; 图4 编辑证书 6. 打开已保存的证书,点击“详细信息-公钥”,获取App的公钥信息;点击“详细信息-指纹”,获取App的MD5签名信息。 图5 获取鸿蒙公钥、MD5(指纹) 7. 若您的操作系统为macOS,在证书编辑完成后需要进入“钥匙串”中打开证书,搜索对应证书后双击打开。 图6 钥匙串
  • 查询、修改、删除设备影子 查询设备影子 方法1:应用服务器调用查询设备影子数据接口。 方法2:登录管理控制台,选择您的实例,单击实例卡片进入。在左侧导航栏选择“设备”,单击具体的设备进入到设备的详情页面,在“设备影子”页签中,可以查看当前设备属性数据,包括“上报值”和“期望值”。 如果当前界面中看到“上报值”与“期望值”不一致,原因可能是设备未在线,暂时存储在设备影子中,待同步给设备,期望值会存在深色底纹。 如果当前界面看到的“上报值”与“期望值”一致,则表示设备最近一次上报的属性值与用户期望下发的属性值一致,期望值为白色底纹。 图1 设备影子-查看 修改设备影子 方法1:应用服务器调用配置设备影子预期数据接口。 方法2:登录管理控制台,选择您的实例,单击实例卡片进入。在左侧导航栏选择“设备-所有设备”,在设备列表中单击具体的设备进入到设备的详情页面,在“设备影子”页面,单击“属性配置”,在弹出窗口中输入服务属性对应的期望值,单击"确定"完成设备影子的修改。 图2 设备影子-属性配置 删除设备影子 用户删除设备影子,平台将会将设备影子中的所有数据(包含上报值和期望值)清空。 图3 删除设备影子
  • 业务流程 修改设备属性值 修改desired区属性值,如果设备在线,则设备影子直接同步设备属性值到设备,否则等待设备上线或上报数据时,再同步设备属性值到设备。 用户通过控制台或应用服务器修改设备属性值。消息样例如下: PUT https://{Endpoint}/v5/iot/{project_id}/devices/{device_id}/shadow Content-Type: application/json X-Auth-Token: ******** Instance-Id: ******** { "shadow" : [ { "desired" : { "temperature" : "60" }, "service_id" : "WaterMeter", "version" : 1 } ] } 物联网平台 修改desired区属性值。 物联网平台返回响应消息。 物联网平台判断设备上线或上报数据。 物联网平台将设备属性同步到设备。消息样例如下: Topic: $oc/devices/{device_id}/sys/properties/set/request_id={request_id} 数据格式: { "object_device_id": "{object_device_id} ", "services": [ { "service_id": "Temperature", "properties": { "value": 57, "value2": 60 } }, { "service_id": "Battery", "properties": { "level": 80, "level2": 90 } } ] } 设备返回响应消息。设备影子desired区的属性值发送给设备后,需要设备回响应表示已收到请求。消息样例如下: Topic:$oc/devices/{device_id}/sys/properties/set/response/request_id={request_id} 数据格式: { "result_code": 0, "result_desc": "success" } 7.设备上报数据,当设备进行属性上报时,平台会存储设备最新上报的设备属性值。 设备上报属性时,物联网平台修改设备影子reported区属性值为设备上报的设备属性值。消息样例如下: Topic: $oc/devices/{device_id}/sys/properties/report 数据格式: { "services": [ { "service_id": "Temperature", "properties": { "value": 57, "value2": 60 }, "event_time": "20151212T121212Z" }, { "service_id": "Battery", "properties": { "level": 80, "level2": 90 }, "event_time": "20151212T121212Z" } ] } 设备主动删除设备影子的reported区 设备主动删除reported区service下的单个属性 设备上报属性时,将属性设置为null,平台会将该属性从设备影子reported区删除,消息样例如下: Topic: $oc/devices/{device_id}/sys/properties/report { "services": [ { "service_id": "Temperature", "properties": { "value": null, "value2": 60 }, "event_time": "20151212T121212Z" } ] } 设备主动删除影子reported区的service下的全部的属性 设备上报属性时,将service对应的properties设置为{}时,平台会将reported区该service模块下所有属性从设备影子reported区删除,消息样例如下: Topic: $oc/devices/{device_id}/sys/properties/report { "services": [ { "service_id": "Temperature", "properties": {}, "event_time": "20151212T121212Z" } ] } 查询设备属性值 设备影子保存的是设备最新的设备属性值,一旦设备属性值产生变化,设备会将设备属性值同步到设备影子。用户便可以及时获取查询结果,无需关注设备是否在线。 用户通过控制台或应用服务器查询设备属性值。消息样例如下: GET https://{Endpoint}/v5/iot/{project_id}/devices/{device_id}/shadow Content-Type: application/json X-Auth-Token: ******** Instance-Id: ******** 物联网平台返回desired属性值和report属性值,即期望值和上报值。消息样例如下: Status Code: 200 OK Content-Type: application/json { "device_id" : "********", "shadow" : [ { "desired" : { "properties" : { "temperature" : "60" }, "event_time" : "20151212T121212Z" }, "service_id" : "WaterMeter", "reported" : { "properties" : { "temperature" : "60" }, "event_time" : "20151212T121212Z" }, "version" : 1 } ] }
  • 创建MySQL 登录华为云官方网站,访问云数据库 MySQL。 设备接入服务 企业版实例支持通过内网连接MySQL,标准版实例仅支持通过公网连接MySQL。 在购买的MySQ L实例 中,根据流转数据格式设计数据库表,可以通过数据过滤语句编辑流转数据。本示例使用设备属性上报通知的默认格式,将流转数据中的resource、event、notify_data、event_time分别转存至数据库表中的resource、event、content、event_time字段。 图1 创建数据库表样例
  • Fn::ToUpperCase 内部函数Fn::ToUpperCase将字符串转大写函数。 JSON { "Fn::ToUpperCase" : content } 表19 参数说明 参数名称 类型 说明 content String 待转换的字符串。 返回值 String 字符串被转为大写后的值。 示例如下: { "Fn::ToUpperCase": "abc" ] return: "ABC"
  • Ref 内部函数Ref将返回指定引用参数的值,引用参数必须在模板中有声明。 JSON { "Ref" : "paramName" } 表20 参数说明 参数名称 类型 说明 paramName String 引用的参数名称。 返回值 String 引用参数对应的值。 示例如下: { "Ref": "iotda::mqtt::username" } 当参数iotda::mqtt::username="device_123" return: "device_123"
  • Fn::ToLowerCase 内部函数Fn::ToLowerCase将指定字符串转的所有字符转化成小写。 JSON { "Fn::ToLowerCase" : content } 表18 参数说明 参数名称 类型 说明 content String 待转换的字符串。 返回值 String 字符串被转为小写后的值。 示例如下: { "Fn::ToLowerCase": "ABC" ] return: "abc"
  • Fn::SubStringAfter 内部函数Fn::SubStringAfter截取字符串指定分隔符后的子字符串。 JSON { "Fn::SubStringAfter" : ["content", "separator"] } 表16 参数说明 参数名称 类型 说明 content String 待截取的字符串。 separator String 分隔符。 返回值 String 字符串被指定分隔符分割后的子字符串。 示例如下: { "Fn::SubStringAfter": ["content:123456", ":"] ] return: "123456"
  • Fn::Base64Encode 内部函数Fn::Base64Encode将一个字符串按BASE64编码。 JSON {"Fn::Base64Encode": "content"} 表3 参数说明 参数名称 类型 说明 content String 待编码的字符串。 返回值 String base64编码后的字符串。 示例如下: { "Fn::Base64Encode": "testvalue" } return: "dGVzdHZhbHVl"
  • Fn::GetBytes 内部函数Fn::GetBytes返回一个字符串UTF-8编码的字节数组。 JSON {"Fn::GetBytes": "content"} 表4 参数说明 参数名称 类型 说明 content String 待编码的字符串。 返回值 byte[] 字符串UTF-8编码后的字节数组。 示例如下: { "Fn::GetBytes": "testvalue" } return: "7465737476616c7565" //为了方便展示,此处转化为16进制字符串
  • Fn::Join 内部函数Fn::Join可将多个字符串(数量最大值为10)拼接成一个字符串。 JSON {"Fn::Join": ["element", "element"...]} 表6 参数说明 参数名称 类型 说明 element String 需拼接的字符串。 返回值 String 子字符串拼接在一起后的字符串。 示例如下: { "Fn::Join": ["123", "456", "789"] } return: "123456789"
  • Fn::Sub 内部函数Fn::Sub将输入字符串中的变量替换为指定的值。在模板中您可以使用此函数来构造一个动态的字符串。 JSON { "Fn::Sub" : [ "String", { "Var1Name": Var1Value, "Var2Name": Var2Value } ] } 表15 参数说明 参数名称 类型 说明 String String 一个包含变量的字符串,变量使用“${}”占位符定义。 VarName String 变量名称,必须在参数“String”中定义。 VarValue String 变量的取值,支持函数嵌套。 返回值 String 返回原始“String”参数字符串变量替换后的值。 示例如下: { "Fn::Sub": ["${token};hmacsha256", { "token": { "Fn::HmacSHA256": ["${iotda::mqtt::username}", { "Fn::Base64Decode": "${iotda::mqtt::client_id}" }] } }] } 当变量 ${iotda::mqtt::username}="test_device_username" ${iotda::device::client_id}="OozqTPlCWTTJjEH/5s+T6w==" return:"0773c4fd6c92902a1b2f4a45fdcdec416b6fc2bc6585200b496e460e2ef31c3d"
  • Fn::SubStringBefore 内部函数Fn::SubStringBefore截取字符串指定分隔符前的子字符串。 JSON { "Fn::SubStringBefore" : ["content", "separator"] } 表17 参数说明 参数名称 类型 说明 content String 待截取的字符串。 separator String 分隔符。 返回值 String 字符串被指定分隔符分割前的子字符串。 示例如下: { "Fn::SubStringBefore": ["content:123456", ":"] ] return: "content"
  • Fn::Split 内部函数Fn::Split将一个字符串按指定的分隔符分割成字符串数组。 JSON { "Fn::Split" : ["String", "Separator"] } 表13 参数说明 参数名称 类型 说明 String String 被分割的字符串。 Separator String 分隔符。 返回值 String[] 原始参数String被分隔符Separator拆分后的字符串数组。 示例如下: { "Fn::Split": ["a|b|c", "|"] } return: ["a", "b", "c"]
  • Fn::Base64Decode 内部函数Fn::Base64Decode将一个字符串按BASE64解码成一个字节数组。 JSON { "Fn::Base64Decode" : "content" } 表2 参数说明 参数名称 类型 说明 content String 待解码的字符串。 返回值 byte[] base64解码后的字节数组。 示例如下: { "Fn::Base64Decode": "123456"] } return: d76df8e7 //为了方便展示,此处转化为16进制字符串
  • Fn::HmacSHA256 内部函数Fn::HmacSHA256将一个字符串按给定密钥进行HmacSHA256算法加密。 JSON {"Fn::HmacSHA256": ["content", "secret"]} 表5 参数说明 参数名称 类型 说明 content String 待加密的字符串。 secret String 或 byte[] 加密密钥,可以是字符串或者字节数组类型 返回值 String 使用HmacSHA256算法加密后的值。 示例如下: { "Fn::HmacSHA256": ["testvalue", "123456"] } return: "0f9fb47bd47449b6ffac1be951a5c18a7eff694940b1a075b973ff9054a08be3"
  • Fn::MathDiv 内部函数Fn::MathDiv将两个整数进行数学除法运算。 JSON {"Fn::MathDiv": [X, Y]} 表8 参数说明 参数名称 类型 说明 X long 被除数。 Y long 除数。 返回值 long X 除Y后的值。 示例如下: { "Fn::MathDiv": [10, 2] } return: 5 { "Fn::MathDiv": [10, 3] } return: 3
  • Fn::SplitSelect 内部函数Fn::SplitSelect将一个字符串按指定的分隔符分割成字符串数组,然后返回数组指定索引的元素。 JSON { "Fn::SplitSelect" : ["String", "Separator", index] } 表14 参数说明 参数名称 类型 说明 String String 被分割的字符串。 Separator String 分隔符。 index int 返回元素在数组中的索引值,从0开始。 返回值 String 字符串按特定分隔符分割后指定索引的子字符串。 示例如下: { "Fn::SplitSelect": ["a|b|c", "|", 1] } return: "b"
  • 使用说明 华为云IoTDA提供了多个内部函数供用户在模板中使用,使用时请认真阅读每个函数的功能定义,包括入参类型,参数长度,返回值类型等。 整个函数必须是合法的Json格式。 函数中可使用${}变量占位符或者"Ref"函数引用入参定义的参数值。 函数所使用的参数必须在模板参数中声明。 单一入参的函数后面直接跟参数,比如:"Fn::Base64Decode": "${iotda::mqtt::username}"。 多个入参的函数后面接数组格式,比如:"Fn::HmacSHA256": ["${iotda::mqtt::username}", "${iotda::device::secret}"]。 函数可以嵌套使用,即一个函数的参数可以是另一个函数,注意嵌套函数的返回值必须跟当前函数参数类型一致,比如:{"Fn::HmacSHA256": ["${iotda::mqtt::username}", {"Fn::Base64Encode": "${iotda::device::secret}"}]}。 整个鉴权模板中hash函数(Fn::HmacSHA256)最多出现两次。 整个鉴权模板中BASE64函数(Fn::Base64Decode Fn::Base64Encode)个数的和不能超过2个。 鉴权模板中密码进行HmacSHA256Function之后的结果不允许 在进行Fn::Split(字符串拆分函数)Fn::SplitSelect(字符串拆分选取函数)Fn::SubStringAfter(字符串拆分函数,截取分隔符后面字符) Fn::SubStringBefor(字符串拆分函数,截取分隔符前面字符)操作。
  • 策略通配符 策略中具有不同的通配符,使用前需注意。在策略中,“*”表示字符的任意组合,问号“? ”表示任何单个字符,而通配符“+”和“#”被视为没有特殊含义的字符。 表1 策略通配符 通配符 是MQTT通配符 策略配置是否适用 MQTT中主题示例 适用于MQTT主题示例的策略示例 # 是 否 test/# 不适用,“#”被视为没有特殊含义的字符。 + 是 否 test/+/some 不适用,“+”被视为没有特殊含义的字符。 * 否 是 不适用,“*”被视为没有特殊含义的字符。 test/* test/*/some ? 否 是 不适用,“?”被视为没有特殊含义的字符。 test/????/some test/set?????/some 表2 定义策略通配符示例 发布/订阅的Topic 策略Topic定义 解释 假设设备需要订阅/发布以下Topic: “test/topic1/some” “test/topic2/some” “test/topic3/some” “topic:test/topic?/some” 在发布、订阅的Topic中可以发现有共同点:“test/topic”+ 某一字符 + “/some”,而在策略定义中“?”代表某一字符。所以策略Topic可以定义为“topic:test/topic?/some” 假设设备需要订阅/发布以下Topic: “test/topic1/pub/some” “test/topic2/sub/some” “test/topic3/some” “topic:test/topic*/some” 在发布、订阅的Topic中可以发现有共同点:“test/topic”+ 一个或多个字符 + “/some”,而在策略定义中“*”代表多个或一个字符。所以策略Topic可以定义为“topic:test/topic*/some”
  • 策略变量 在策略中定义resource时,如果不知道对设备资源或条件键的精确值,可以使用策略变量作为占位符,进行发布/订阅主题筛选。策略变量在校验MQTT的主题时,会把变量变为接入设备对应的ID值,再进行匹配。 变量使用前缀“$”标记,后面跟一对大括号“{ }”,其中包含请求中值的变量名称。如下表,假设MQTT设备是在客户端ID为test_clientId,产品ID为test_productId,设备ID为test_deviceId。 表3 策略变量 策略变量 描述 MQTT中主题示例 适用于MQTT主题示例的策略示例 ${devices.deviceId} 设备ID test/test_deviceId/topic test/${devices.deviceId}/topic ${devices.clientId} 客户端ID test/test_clientId/topic test/${devices.clientId}/topic ${devices.productId} 产品ID test/test_productId/topic test/${devices.productId}/topic 表4 定义策略变量示例 场景 策略Topic定义示例 描述 想通过topic区分不同设备的自定义上报时。 “test/${devices.deviceId}/topic” 允许Topic为“test/${本设备ID}/topic”的主题订阅或发布。有利于设备间数据隔离。 想通过topic区分不同设备的自定义上报、区分同一设备不同时间段上报的数据时。 “test/${devices.clientId}/topic” 允许Topic为“test/${本设备的clientId}/topic”的主题订阅或发布。与deviceId不同的是,clientId携带时间戳。可用主题来区分时间段。
  • 概述 设备策略主要用于对发布/订阅的非$oc开头自定义topic中的数据进行传输限制。通过灵活访问的控制模型,提供了基于用户角色的访问控制,能够管理客户端发布/订阅主题的授权。借助策略功能,可以用于管理一个或多个设备/产品/群组发布、订阅的权限,以保证非$oc开头的自定义Topic的通信安全。设备Topic策略用于发布、订阅机制的协议,比如说设备侧的MQTT、MQ TTS 协议。 对于使用IOTDA的用户,新增的资源空间会默认加入策略“system_default_policy”,system_default_policy策略会允许该资源空间下所有设备的非$oc开头的自定义Topic的订阅与发布。当业务场景不适用时,可以删除该策略。 图1 策略概念图
  • 连接配置说明 MQTT客户端接入物联网平台的连接地址和连接认证参数说明如下: MQTT接入 域名 每个账号会自动生成,请前往控制台-接入信息页面获取。 图1 接入信息-应用侧MQTT接入地址 端口:8883 客户端身份认证参数 clientId:全局唯一即可,建议使用“username”。 username =“accessKey=${accessKey}|timestamp=${timestamp}|instanceId=${instanceId}” password =“${accessCode}” 参数 是否必须 说明 ${accessKey} 是 接入凭证键值,单个键值最多允许10个客户端同时进行建链。 首次建链时候,请参考这里进行预置。 ${timestamp} 是 表示当前时间,13位毫秒值时间戳。服务端校验客户端的时间戳,且时间戳相差5分钟。 instanceId 否 实例Id,同一Region购买多个标准版实例时需要填设置该参数,实例Id参考这里这里获取。 ${accessCode} 是 接入凭证密钥,长度不超过256个。
  • 修改企业版实例信息 IoTDA企业版实例创建成功后,您可以根据自己的业务情况对IoTDA企业版实例的部分参数进行调整,包括实例名称、描述等信息。 访问设备接入服务,单击“管理控制台”进入设备接入控制台。 选择左侧导航栏“IoTDA实例”,单击企业版实例对应的“详情”进入实例详情页面。 修改实例参数。 单击实例名称后的,修改实例名称。 实例名称支持中文汉字、英文字母、数字、下划线(_)、中划线(-)。长度不能超过64个字符,一个中文汉字计一个字符。 图1 实例管理-修改实例名称
  • 接入信息配置 IoTDA企业版实例创建成功后,您可以根据自己的业务情况配置接入域名和对应的服务器证书。 访问设备接入服务设备接入服务,单击“管理控制台”进入设备接入控制台。 选择左侧导航栏“IoTDA实例”,单击企业版实例对应的“详情”进入实例详情页面。 配置接入域名,单击接入域名下方的“未配置”,配置应用和设备接入平台的域名信息。您需要在域名提供商如华为云 域名注册服务 配置DNS,添加域名到公网接入地址的解析记录。 按照工信部要求,您配置的自定义域名需要提前完成ICP备案。 图3 实例管理-配置接入域名 您可以根据业务情况单击进入更新证书页面,配置自定义的服务器证书。自签名证书存在安全隐患,建议使用 云证书管理服务 购买证书、或购买其他权威机构颁发的证书。证书更新后可以通过浏览器访问公网地址或第三方工具校验证书是否更新成功。 图4 实例管理-更新证书 在支持国密的企业版实例中,MQTTS设备接入协议还允许配置支持国密算法的自定义签名证书和加密证书,签名证书和加密证书的CA必须一致。 图5 IoTDA实例-上传国密证书 更新证书后,可能导致证书校验异常,原有设备或应用无法接入物联网平台,请谨慎操作。
  • 设置企业版实例公网访问 为了助力企业快速迁移上云,物联网平台提供通过公网、私网、专线等接入形式。 当您需要通过公网地址访问设备接入实例时,可配置实例的公网访问功能。公网访问带宽默认是50Mb/s,无需额外付费。如果您需要扩大带宽,请提交工单说明您的需求。 访问设备接入服务,单击“管理控制台”进入设备接入控制台。 选择左侧导航栏“IoTDA实例”,单击企业版实例对应的“详情”进入实例详情页面。 单击“配置公网接入”,为应用或设备配置公网接入地址,单击“确定”后平台会自动生成公网IP。 图2 实例管理-配置公网接入
  • 激励金额如何计算? 核算过程: 激励总金额 = ∑人力基线 * 100% * 3*地域系数 激励规则: 激励人员类型 人力基线(元/月) 国家/地区 服务专家 50,000 北京、广州、深圳、上海、南京、杭州、成都、福州、济南、长沙、重庆、武汉、西安、郑州系数为1.2; 其他省会城市系数为1; 非省会城市系数0.9。 高级服务工程师 30,000 高级顾问 80,000 父主题: 服务伙伴-专家服务专职人员激励
  • 伙伴可以先举办完活动,后面再补使用申请、兑付申请吗? 不能。先审批后执行,严格验收活动。 MDF管理责任人对MDF使用进行管理,并监控活动的开展。合作伙伴提交使用申请,建议至少在活动前10个工作日提交。未经事前审批、未按照验收要求进行申付的MDF活动一律不予支付或核销。如活动时间、地点、对象、形式等关键信息发生变化,需在活动发生前重新提交活动申请。 使用申请需列清费用项,实际核销金额不得超过使用申请预算,超出部分由合作伙伴自行承担。 父主题: 市场发展基金(MDF)
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全