华为云用户手册

  • 函数列表 规则引擎提供多种函数,您可以在编写SQL时使用这些函数,实现多样化数据处理。 表2 函数列表 函数名称 携带参数 用途 返回值类型 限制 GET_TAG String tagKey 获取指定tag_key对应的tag_value。 GET_TAG('testTagName') 字符串 - CONTAINS_TAG String tagKey 判断是否包含指定tag_key。 CONTAINS_TAG('testTagName') 布尔值 - GET_SERVICE String serviceId,boolean fuzzy 获取service,若fuzzy为false或者不填,则获取指定service_id的service,若fuzzy为true,则通过模糊匹配查询service,如果您在一个消息体里有多个service_id相同的service,结果目前不保证。 GET_SERVICE('Battery',true) Json结构体格式 只能在属性上报时使用 GET_SERVI CES String serviceId,boolean fuzzy 获取services,若fuzzy为false或者不填,获取指定service_id的services,若fuzzy为true,则通过模糊匹配查询services。查询结果将汇合为一个数组。 GET_SERVICES('Battery',true) JSON数组格式 只能在属性上报时使用 CONTAINS_SERVICES String serviceId,boolean fuzzy 若fuzzy为false或者不填,则判断是否存在指定service_id。若fuzzy为true,则使用模糊匹配的方式判断属性中的service_id是否包含指定参数。 CONTAINS_SERVICES('Battery',true) 布尔值 只能在属性上报时使用 GET_SERVICE_PROPERTIES String serviceId 获取指定service_id的service中的properties字段。 GET_SERVICE_PROPERTIES('Battery') Json结构体格式 只能在属性上报时使用 GET_SERVICE_PROPERTY String serviceId, String propertyKey 获取指定service_id的service中的properties中指定属性的值。 示例: GET_SERVICE_PROPERTY('Battery','batteryLevel') 字符串 限制只能在属性上报时使用 STARTS_WITH String input, String prefix 判断input的值是否以prefix开头。 STARTS_WITH('abcd','abc') STARTS_WITH(notify_data.header.device_id,'abc') STARTS_WITH(notify_data.header.device_id,notify_data.header.product_id) 布尔值 - ENDS_WITH String input, String suffix 判断input的值是否以suffix结尾。 ENDS_WITH('abcd','bcd') ENDS_WITH(notify_data.header.device_id,'abc') ENDS_WITH(notify_data.header.device_id,notify_data.header.node_id) 布尔值 - CONCAT String input1, String input2 用于连接字符串,返回连接后的字符串。 CONCAT('ab','cd') CONCAT(notify_data.header.device_id,'abc') CONCAT(notify_data.header.product_id,notify_data.header.node_id) 字符串 - REPLACE String input, String target, String replacement 对字符串某部分值进行替换。即用replacement替换input中的target。 REPLACE(notify_data.header.node_id,'nodeId','IMEI') - - SUBSTRING String input, int beginIndex, int endIndex(required=false) 获取字符串的子串,即返回input从beginIndex(包含)到endIndex(不包含)的子字符串。 说明:endIndex非必填。 SUBSTRING(notify_data.header.device_id,3) SUBSTRING(notify_data.header.device_id,3,12) - - LOWER String input 将input中的值全部转换成小写 LOWER(notify_data.header.app_id) - - UPPER String input 将input中的值全部转换成大写 UPPER(notify_data.header.app_id) - -
  • 业务流程 设备远程配置流程详细说明: 用户在 设备接入服务 的控制台上创建远程配置任务。一个应用下最多同时运行10个远程配置任务,每个任务最多支持对10万个设备下发配置。如果一个设备已经在一个已有的远程配置任务中,并且该设备远程配置还未完成,新建的远程配置任务如果包含该设备,则该设备的新远程配置將直接失败。 平台感知设备是否在线,当设备在线时立即下发配置给设备。当设备不在线时,等待设备上线订阅远程配置Topic,平台感知设备上线后下发配置。在创建远程配置任务时可以选择配置超时时间(1-30天),默认30天。 设备完成配置更新后,调用远程配置响应接口向 物联网平台 反馈配置更新结果。
  • 操作步骤 配置访问授权后,在左侧导航栏,选择“IoTDA实例”,单击“购买实例”,选择企业版。 在页面中填写实例配置信息,系统会根据您选择的“实例规格”和“购买时长”自动计算费用。 参数名称 参数说明 计费模式 选择实例的计费模式,当前仅支持“包年/包月”。 区域 设备接入服务部署的区域,当前支持“华北-北京四”、“华东-上海一”、“华南-广州”。 说明: 不同区域之间的云服务产品内网互不相通,请就近选择靠近您业务的区域,可降低网络时延,提高访问速度。 网络 选择虚拟私有云和子网。 如果需要创建新的虚拟私有云,请创建虚拟私有云。 安全组 选择实例所关联的安全组,请提前创建安全组。 公网接入 提供设备接入公网接入能力,请根据需要配置,避免不必要的浪费。 私网接入 勾选:购买实例时会自动购买 VPC终端节点 ,并自动分配接入地址 未勾选:仍然需要私网接入,可以自行购买VPC终端节点对接。 接入端口 支持接入端口可配置,并提供了默认端口,支持可配置的端口如下: 应用接入:HTTPS(443)、AMQPS(5671) 设备接入:CoAP(5683)、CoAPS(5684)、MQTT(1883)、MQ TTS (8883)、HTTPS(8943) 实例版本 企业版。 企业项目 该参数仅对开通企业项目的企业客户账号显示。企业项目是一种云资源管理方式,企业项目管理服务提供统一的云资源按项目管理,以及项目内的资源管理、成员管理。了解更多企业项目相关信息,请查看企业管理。 标签 标签以键值对的形式表示,用于标识实例,便于对实例进行分类和搜索。此处的标签仅用于实例的过滤和管理。详情可参考实例标签管理。 实例名称 设备接入实例的名字,方便根据名字管理实例。支持中文汉字、大小写字母、数字、下划线(_)和中划线(-),最大长度不超过64。 密码算法 通用加密算法(支持RSA,SHA256等国际通用的密码算法),支持SM系列商密算法(支持SM2,SM3,SM4等国密算法) 实例描述 企业版实例的描述,可根据实例用户、实例的用途进行简单的描述。 购买时长 按月购买。 购买时可勾选自动续费,勾选后在实例到期时会自动对实例续费。 单击“立即购买”,进入实例规格确认页面。 规格确认无误后,单击“去支付”。 在支付页面选择支付方式后,单击“确认付款”完成购买。
  • 购买标准实例 标准实例提供灵活可配置的实例规格,适用于各类企业客户场景,可根据业务模型选购更经济的平台实例。 开通之前,请浏览整体开通流程,以便提高操作效率。 操作步骤 在侧导航栏,选择“IoTDA实例”,单击“购买实例”,选择标准版。 在页面中填写实例配置信息,系统会根据您选择的“实例规格”和“购买时长”自动计算费用。 参数名称 参数说明 计费模式 选择实例的计费模式,当前支持“包年/包月”和“按需计费”。 区域 设备接入服务部署的区域,当前支持“华北-北京四”、“华东-上海一”、“华南-广州”、“华南-广州-友好用户环境”、“亚太-曼谷”、“亚太-新加坡”、“非洲-约翰内斯堡”和“中国-香港”。 说明: 不同区域之间的云服务产品内网互不相通,请就近选择靠近您业务的区域,可降低网络时延,提高访问速度。 规格配置 支持免费单元S0、微频单元ST、低频单元S1、中频单元S2和高频单元S3五种规格。新增规格测算功能,可根据自身业务的在线设备数和上下行TPS获取推荐的实例规格。 说明: IoTDA标准版实例的规格=实例包含的单元数量*每个单元的规格; 一个标准版实例可以包含多个相同类型的单元,单个实例的单元数量上限为100个,单个实例的消息上下行TPS峰值最高到10万TPS(比如实例包含100个S3,但峰值TPS最高只能到10万TPS); 支持对实例的单元数进行在线升配,如一个标准实例从3个S2变更为5个S2。 同一个实例不支持混合叠加多个版本类型的单元,比如M个S2+N个S3。 企业项目 该参数仅对开通企业项目的企业客户账号显示。企业项目是一种云资源管理方式,企业项目管理服务提供统一的云资源按项目管理,以及项目内的资源管理、成员管理。了解更多企业项目相关信息,请查看企业管理。 标签 标签以键值对的形式表示,用于标识实例,便于对实例进行分类和搜索。此处的标签仅用于实例的过滤和管理。详情可参考实例标签管理。 实例名称 标准实例的名称,方便根据名称管理实例。支持中文汉字、大小写字母、数字、下划线(_)和中划线(-),最大长度不超过64。 实例描述 标准实例的描述,可根据实例用户、实例的用途进行简单的描述。 购买时长 按月购买。购买时可勾选自动续费,勾选后在实例到期时会自动对实例续费。 若您选择包年/包月模式,单击右下角“提交”;若您选择按需计费模式,单击右下角“立即购买”。进入实例规格确认页面。 规格确认无误后,若您选择包年/包月模式,单击“去支付”;若您选择按需计费模式,单击“提交”。 在支付页面选择支付方式后,单击“确认付款”完成购买。
  • 离线分析 当设备发生离线事件时,需要对离线原因进行分析。根据离线发生的时间、设备的离线原因来统计离线设备的特征,帮助您全面了解、分析设备离线的原因。 离线原因 说明 设备侧主动离线 设备主动向物联网平台发送MQTT协议的DISCONNECT报文,进行离线。 设备侧长时间不发送心跳导致设备离线 设备侧未按照MQTT协议规定,在设置的心跳周期 * 1.5 时间范围内物联网平台发送MQTT协议层的心跳报文,导致物联网平台认为该设备链路已失效,按照协议要求,断开设备链接。 (注:心跳周期是设备侧在与物联网平台进行建链时指定的) 设备侧跟云端之间TCP链路断开,导致设备离线 物联网平台收到设备侧发送的TCP拆链报文,导致设备侧与物联网平台之间的TCP链路断开。 删除设备导致链路断开,设备离线 租户在物联网平台上对该设备进行删除,物联网平台对该设备进行断链。 冻结设备导致链路断开,设备离线 租户在物联网平台上对该设备进行冻结,物联网平台对该设备进行断链。 平台主动断开设备链路,导致设备离线 物联网平台升级期间,会主动断开设备链路。 设备与平台建立多条链路,导致老链路被断链 设备侧与物联网平台主动建立了多条链路,物联网平台将该设备侧的老链路断开,保留新建立的链路。 重置设备密钥,导致设备离线 租户在物联网平台上对该设备进行密钥重置并设置强制断链时,物联网平台对该设备进行断链。
  • 安全检测 物联网平台提供安全检测能力,可持续检测设备的安全威胁。本文介绍具体的安全检测项,及如何查看并处理检测出的安全风险。 检测项说明 检测项 说明 设备侧使用非加密方式接入 设备与物联网平台之间,未使用加密协议建立安全连接,可能导致中间人劫持、重放攻击,会对业务造成影响。 使用不安全的TLS版本协议 不安全的TLS协议版本(TLS v1.0、v1.1)存在可被利用的安全漏洞,可能会造成设备数据泄露等安全风险。 使用不安全的加密算法套件 当前主要检测包含以下几种不安全的加密算法套件: TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA, TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA, TLS_PSK_WITH_AES_128_CBC_SHA, TLS_PSK_WITH_AES_256_CBC_SHA 不安全的加密算法套件存在可被利用的安全漏洞,可能会造成设备数据泄露等安全风险。 设备侧单位时间内多次建链 设备侧在1秒内与物联网平台进行多次建链,存在设备被暴力破解,导致身份信息泄露的可能,会造成正常设备被迫下线、业务数据被窃取等安全风险。 设备鉴权失败 设备身份认证信息错误,导致设备无法上线,可能会对业务造成影响。 上述通用异常检测功能检测项开关默认开启,同时设备异常检测包括一些非公共检测项,用户可以根据需求进行检测项的开关等配置。 表1 检测项说明 检测项 说明 内存泄漏检测 检测端侧设备是否存在内存泄漏。 异常端口检测 检测端侧设备是否开启了异常端口。 CPU使用率检测 检测端侧设备CPU使用率是否过高。 磁盘空间检测 检测端侧设备磁盘空间是否不足。 电池电量检测 检测端侧设备电池电量是否过低。 恶意IP检测 检测与设备通信的IP地址是否为恶意IP地址。 本地登录检测 检测设备是否被通过非SSH等网络方式登录。 暴力破解登录检测 检测设备是否被尝试通过暴力破解账号密码进行登录。 文件篡改检测 检测设备指定目录下的文件是否被篡改。
  • 软固件升级失败原因 物联网平台上报的失败原因: 失败原因 原因解释 处理建议 Device Abnormal is not online 设备异常未在线 请检查设备侧。 Task Conflict 任务冲突 请检查当前设备是否有软件升级、固件升级、日志收集或设备重启的任务正在进行。 Waiting for the device online timeout 等待设备上线超时 请检查设备侧。 Wait for the device to report upgrade result timeout 等待设备上报升级结果超时 请检查设备侧。 Waiting for report device firmware version timeout 等待上报设备固件版本超时 请检查设备侧。 Waiting for report cellId timeout 等待上报cellId超时 请检查设备侧。 Updating timeout and query device version for check timeout 等待升级结果超时,且等待设备版本信息超时 请检查设备侧。 Waiting for device downloaded package timeout 等待设备完成下载固件包超时 请检查设备侧。 Waiting for device start to update timeout 等待设备启动更新超时 请检查设备侧。 Waiting for device start download package timeout 等到设备开始下载固件包超时 请检查设备侧。 设备上报的失败原因: 失败原因 原因解释 处理建议 Not enough storage for the new firmware package 下载的固件包存储空间不足 请检查设备存储。 Out of memory during downloading process 下载过程中内存不足 请检查设备内存。 Connection lost during downloading process 下载过程中连接断开 请检查设备连接状态。 Integrity check failure for new downloaded package 下载的固件包完整性校验失败 请检查设备下载的固件包是否完整。 Unsupported package type 固件包类型不支持 请检查设备状态和厂商提供的固件包是否正确。 Invalid URI URI不可用 检查设备侧的固件包下载地址是否正确。 Firmware update failed 固件更新失败 请检查设备侧。
  • 上传软固件包 创建批量设备软件、固件升级任务前需要上传软件升级包,平台支持两种方式上传软件、固件包: 应用服务器通过调用“创建OTA升级包”API接口,创建OTA升级包,详情请参考创建OTA升级包。 通过控制台,在软固件升级页面上传软件、固件升级包,详情请参考软固件包上传。 通过API接口创建的OTA升级包,只支持MQTT协议设备升级。 升级包为OBS对象时,无论OBS桶是否配置了CDN 域名 加速功能,下发的升级包链接都为OBS链接地址。
  • 概述 软件(Software)一般分为系统软件和应用软件,系统软件实现设备最基本的功能,比如编译工具、系统文件管理等;应用软件可以根据设备的特点,提供不同的功能,比如采集数据、数据分析处理等。软件升级又称为SOTA(SoftWare Over The Air),是指用户可以通过OTA的方式支持对LwM2M协议和MQTT协议的设备进行软件升级。 基于LwM2M协议的产品模型,软件升级遵循的协议为PCP协议(PCP协议介绍),设备侧需要遵循PCP协议进行软件升级的适配开发,适配方法请参考设备侧适配开发指导。 基于MQTT协议的产品模型,不校验软件升级协议类型。 固件(Firmware)一般是指设备硬件的底层“驱动程序”,承担着一个系统最基础最底层工作的软件,比如计算机主板上的基本输入/输出系统BIOS(Basic Input/output System)。固件升级又称为FOTA(Firmware Over The Air),华为云用户可以通过OTA的方式对支持LwM2M协议和MQTT协议的设备进行固件升级。
  • 操作步骤 以下示例主要针对MQTT设备的订阅及发布。在设备接入控制台中可以进行策略的配置及策略目标的绑定。 进入策略页面。访问设备接入服务,单击“管理控制台”进入设备接入控制台。选择您的实例,单击实例卡片进入。在左侧导航栏“设备”中单击“策略”,可到策略界面。 图2 设备策略-进入界面 创建策略。在策略界面单击“创建策略”,按照业务具体填写策略参数,填写完成后单击生成策略。参数值可参考下图。 图3 设备策略-创建策略 表1 参数说明 参数说明 所属资源空间 下拉选择所属的资源空间。如无对应的资源空间,请先创建资源空间。 策略名称 自定义,如PolicyTest。长度不超过128,只允许字母、数字、下划线(_)、连接符(-)的组合。 资源 在MQTT主题发布与订阅中,需要以“topic:”作为参数前缀。比如说:禁止订阅/test/v1,则该参数填写 topic:/test/v1。 操作 值为发布或订阅。发布代表MQTT设备端Publish请求,订阅代表MQTT设备端Subscribe请求。 权限 值为允许或拒绝。用于允许或拒绝某topic的发布或订阅。 绑定策略目标。策略可以从“资源空间”、“产品”、“设备”这3个范围进行绑定,被绑定的设备将遵循策略的要求允许或拒绝某Topic的发布或订阅。 图4 设备策略-绑定设备 表2 参数说明 参数说明 设备目标类型 下拉选择设备目标类型。类型有“资源空间”、“产品”、“设备”三种。这三种类型并不是互斥的,可以同时存在,比如说:绑定产品A与设备C(C是产品B下的设备)。 资源空间:实现多业务应用的分域管理,绑定后所选资源空间下的所有设备都将匹配该策略。可选择多个资源空间绑定。 产品:一个产品下一般有多个设备,绑定后所选产品下的所有设备都将匹配该策略,比起资源空间,绑定范围更小。可绑定一个或多个不同资源空间下的产品。 设备:绑定策略目标的最小单位,可绑定一个或多个不同资源空间、不同产品的设备。 策略目标 选择对应的“策略目标类型”后,在“策略目标”的参数中会显示可选的数据,勾选需要绑定的即可。
  • 操作步骤 以下示例主要针对平台中创建流转规则配置。通过修改流转规则可以实现不同场景的应用。 访问设备接入服务,单击“管理控制台”进入设备接入控制台。选择您的实例,单击实例卡片进入。在左侧导航栏“规则”中单击“数据转发”,可到数据转发界面。 图2 数据转发-列表 单击“创建规则”按照业务具体填写需要转发的数据参数,填写完成后单击“创建规则”。参数值可参考下图。 图3 新建流转规则-M2M 表1 创建数据转发规则-参数说明 参数说明 规则名称 自定义,如test。长度不超过256,只允许中文、字母、数字、以及_?'#().,&%@!-等字符的组合。 规则描述 自定义,对该规则的描述。 数据来源 转发规则的数据来源,下拉可选择多种数据来源。在使用M2M时,请选择“设备消息”。 触发事件 不同的数据来源有不同的触发事件,若使用M2M,请选择“设备消息上报”。 资源空间 下拉选择所属的资源空间。可以选择所有资源空间,如无对应的资源空间,请先创建资源空间。 数据过滤语句 使用SQL语句可以进行数据筛选,详情可见:SQL语句。图片中在WHERE中填入notify_data.body.topic IN ('/test/M2M'),代表只有Topic为“/test/M2M”的数据进行数据转发。 在创建数据转发规则的第二步,可以添加转发到的目标,包括设置转发后的Topic、缓存时间等。若使用M2M,请将转发目标设置为“设备”,按照业务具体填写参数后单击“确定”。 图4 新建转发目标-转发至设备 表2 设置转发目标-参数说明 参数说明 转发目标 下拉选择转发目标,在设备间消息通信中,请选择为“设备”。 Topic 自定义,长度不超过128个字符,可以以$和/开头,不可以$和/符号结尾;不允许有a-zA-Z0-9() ',-.:=@;_!*'%?+\以外的符号。 ttl 数据缓存时间。当设备不在线时,数据会进行缓存(当ttl为0时不缓存),当设备上线时再进行下发。输入值范围在0~1440(一天)分钟,且值为5的倍数。 启动规则。在创建数据转发规则的第三步,单击页面中央的“启动规则”,完成规则设置。 图5 启动规则-转发至设备
  • 使用流程 以下流程主要以设备间一对一为例: 图1 M2M使用流程 创建流转规则,设置转发Topic:在控制台界面创建M2M流转规则并设置转发Topic。 策略配置:在控制台界面进行策略配置。通过策略配置允许发送、接收数据的设备进行发布及订阅。 设备A、B鉴权:设备发起连接鉴权(MQTT设备),鉴权参数填写请参考:设备连接鉴权。 设备B订阅Topic:设备对云服务端进行主题订阅。设备B订阅的Topic为创建流转规则中设置的Topic。若订阅成功,平台返回订阅成功ACK。 设备A数据上报:设备对云服务端进行主题发布。若发布成功,平台返回发布成功ACK。 设备B收到数据:若转发成功,设备B将收到设备A发送的数据。
  • 连接配置说明 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个。
  • 认证凭证更新 设备的接入凭证可能在特定场景需要更新,如设备的X.509证书即将过期,需要将设备证书进行更新。平台提供了密钥/指纹的重置功能,您可以调用接口重置设备指纹/重置设备密钥进行设备凭证的重置。为避免认证凭据切换过程中,用户未在平台及时重置认证凭据导致设备鉴权失败,出现业务中断,平台推出支持双指纹/双密钥的功能。如在证书认证的场景下,将新证书的指纹设置到设备的备用指纹中,此时如果设备没及时更新证书,仍然可以通过旧的证书接入平台,当设备更新证书后,无需在应用侧进行重置操作,即可立即使用新证书接入平台,实现无损切换认证凭证。
  • 清空积压消息 当规则引擎将消息转发至第三方应用服务器时,若该服务器故障导致消息无法及时处理,IoT物联网平台将会积压数据。考虑到用户对数据实时性的要求,我们支持清理积压在转发通道中的数据,以确保数据的及时处理和传输。 例如:当定时上报用户使用量的水表将数据发送至目标服务器时,由于服务器出现故障导致数据积压,为保证数据的实时性,我们可以使用"清空积压消息"能力丢弃积压数据,优先处理新上报的数据。 在特定的转发目标详情中单击“清空积压消息”,对应的规则转发目标还没完成流转的数据将被全部清空,请评估好业务影响后谨慎操作。
  • 概述 在使用数据转发能力时,可以根据数据转发通道的使用情况,推断出转发目标(如第三方应用服务器等)的性能是否满足业务需求。例如,物联网平台的流转数据因为转发目标(第三方应用服务器)性能等问题无法快速处理时,这些数据会被积压(缓存)在IoT物联网平台中。此时,通过观察数据转发通道的详细信息,我们可以发现消息生产速率一直高于消息推送速率,同时消息积压量不断增加。这表明转发目标(第三方应用服务器)的性能无法满足当前业务需求,需要进行扩容处理。此外,IoT物联网平台还提供了数据转发通道积压数据清理的能力。
  • 转发通道详情查看 访问设备接入服务,单击“管理控制台”进入设备接入控制台。选择您的实例,单击实例卡片进入。 单击“规则”,选择“数据转发” ,找到对应规则单击“详情”进入数据转发规则详情界面。 图1 规则详情-数据转发规则 选择“设置转发目标”,找到数据转发通道单击“详情”,在弹窗中可查看推送详情。 图2 数据转发规则详情-数据转发规则 图3 推送详情-数据转发规则 表1 参数说明 参数名称 描述 消息推送速率 物联网平台每秒往转发目标推送消息数量。 消息生产速率 设备侧每秒往物联网平台生产的消息数量。 消息积压量 当生产速率大于推送速率时,积压在物联网的消息数量。物联网平台默认配置单个转发规则流转数据的最大积压(缓存)大小为1GB,最大积压(缓存)时间为24小时,如需修改可参考数据转发积压策略配置。
  • 代码示例 在本地计算机创建一个JavaScript文件(例:HwIotAmqpClient.js),保存以下示例代码到文件中。参考AMQP客户端接入说明修改相关连接参数。 const container = require('rhea'); //获取当前时间戳 var timestamp = Math.round(new Date()); //建立连接。 var connection = container.connect({ //接入域名,请参考这里。 'host': '${UUCID}.iot-amqps.cn-north-4.myhuaweicloud.com', 'port': 5671, 'transport': 'tls', 'reconnect': true, 'idle_time_out': 8000, //userName组装方法,请参考这里。 'username': 'accessKey=${yourAccessKey}|timestamp=' + timestamp + '|instanceId=${instanceId}', //accessCode,请参考这里。 'password': '${yourAccessCode}', 'saslMechannisms': 'PLAIN', 'rejectUnauthorized': false, 'hostname': 'default', }); //创建Receiver连接。 队列名,可以使用默认队列DefaultQueue var receiver = connection.open_receiver('${yourQueue}'); //接收云端推送消息的回调函数。 container.on('message', function (context) { var msg = context.message; var content = msg.body; console.log(content); //发送ACK,注意不要在回调函数有耗时逻辑。 context.delivery.accept(); }); 进入上一步创建的文件(HwIotAmqpClient.js)所在目录,执行以下命令安装rhea库。 npm install rhea 安装完成后,项目文件如下图所示。 通过命令启动AMQP客户端,命令如下。 node HwIotAmqpClient.js 运行结果示例 订阅成功: 显示如下日志代表AMQP客户端订阅成功,并成功获取到物联网平台数据。 订阅失败 以下日志代表AMQP客户端在物联网平台鉴权失败,请确认接入码是否正确,时间戳与标准时间的差异是否大于5分钟。
  • 购买RocketMQ 登录华为云,访问分布式消息服务RocketMQ版, 进入分布式消息服务管理控制台。 单击右上角“购买RocketMQ实例”,按照需求选择RocketMQ规格,单击“立即购买”。 图1 购买RocketMQ 单击进入购买的RocketMQ实例,开启ACL访问控制后,单击“用户管理”添加用户,可参考创建用户。 图2 添加用户 单击左侧导航栏“topic管理”,单击“创建topic”创建RocketMQ的topic。
  • 操作步骤 访问设备接入服务,单击“管理控制台 ”进入设备接入控制台。 单击“规则” ,选择“数据转发” ,选择 “策略配置” ,进入流控策略配置界面。 图1 数据转发-策略配置 在弹出的界面中填写相关信息后,单击“确定”即可完成流控策略创建。 图2 数据转发-创建流控策略 表2 参数说明 参数名称 描述 策略名称 长度为4-256,只允许中文、字母、数字以及_?'#().,&%@!-等字符的组合。 描述 关于该策略的描述,长度为4-256,只允许中文、字母、数字以及_?'#().,&%@!-等字符的组合。 流控大小 取值范围为1-1000。 流控策略类型 包括实例级别流控、转发通道流控、转发规则流控、转发动作流控四种流控策略类型。 转发目标 当流控策略类型为转发通道流控时生效,对应当前实例支持的转发通道类型。 绑定规则 当流控策略类型为转发规则流控时生效,对应IoT物联网平台上的数据转发规则。 绑定动作 当流控策略类型为转发动作流控时生效,对应IoT物联网平台上的数据转发动作。
  • 流控策略维度 表1 流控策略类型 流控策略类型 描述 实例级别流控 使用此策略类型时,流控的范围为当前实例中所有数据转发的流量,超出流控的数据会被丢弃。 转发通道流控 使用此策略类型时,流控的范围为当前实例中所有转发至指定目标的流量。 转发规则流控 使用此策略类型时,流控的范围为当前实例中所有触发指定转发规则的流量,超出流控的数据会被丢弃。 转发动作流控 使用此策略类型时,流控的范围为当前实例中所有转发至指定动作的流量。 流控策略创建成功后,不支持修改流控策略类型。 超出实例和转发规则级别流控的数据会被丢弃,请慎重考虑后再使用。 同时创建多个不同类型的流控策略,以最先达到流控阈值的策略为准。例如配置了转发规则A的流控大小为50tps,转发规则A下转发动作B的流控大小为100tps,触发转发规则A的流转数据流量为80tps,则触发了转发规则A的流控。
  • 与标准MQTT协议的兼容说明 华为云IoTDA服务支持设备基于MQTT 5.0、MQTT 3.1.1和 MQTT 3.1规范的接入,但同这些MQTT协议规范有一些差异, IoTDA服务不是简单的MQTT Broker,而是在支持设备使用MQTT协议接入的基础上集成消息通信、设备管理、规则引擎、数据流转等能力。与MQTT标准规范的的区别如下: 支持设备与IoTDA服务之间使用MQTT规范中的CONNECT、CONNACK、PUBLISH、PUBACK、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK、PINGREQ、PINGRESP、DISCONNECT等报文进行通信。 支持MQTT的服务质量等级为QoS 0、QoS 1,不支持QoS 2。 支持MQTT协议规范中的clean session。 不支持MQTT协议规范中的will。 IoTDA提供设备状态推送的能力,设备离线后支持根据流转规则将设备状态推送到客户应用或者云服务。 不支持MQTT协议规范中retain msg。IoTDA提供消息缓存的能力消息上报和消息下发时支持对消息进行缓存。
  • 支持的MQTT 5.0特性说明 MQTT5.0相关特性仅在企业版支持。 IoTDA服务支持的MQTT 5.0的部分新增特性如下: 支持Topic Alias。将消息通信Topic缩小为整型数值,来减小MQTT报文,节约网络带宽资源。 支持ResponseTopic 和CorrelationData。消息上报和下发时支持携带这两个参数,实现类似云HTTP的请求和响应。 支持设置UserProperty属性列表。每个属性由Key和Value组成,用于在非payload区传输属性数据。 支持Content-Type属性。消息上报的报文可以携带Content-Type属性,标识报文类型。 支持在CONNACK和PUBACK报文中返回码,便于设备快速定位请求状态及问题。
  • 业务流程 采用MQTT协议接入物联网平台的设备,设备与物联网平台之间的通信过程,数据没有加密,建议使用MQTTS协议。 若选择MQTTS协议接入平台,建议通过使用IoT Device SDK接入。 设备接入前,需创建产品(可通过控制台创建或者使用应用侧API创建产品)。 产品创建完毕后,需注册设备(可通过控制台注册单个设备或者使用应用侧API注册设备创建)。 设备注册完毕后,可以按照图中流程实现消息/属性上报、接收命令/属性/消息、OTA升级、自定义Topic等功能。关于平台预置Topic可参考Topic定义 您可以通过mqtt.fx进行原生协议接入调测,可以参考快速体验mqtt接入。
  • 使用限制 描述 限制 单个MQTT直连设备在同一时间的连接数 1 单账户设备侧每秒最大建链请求数量 基础版100 标准版请参考标准版规格 企业版请参考企业版规格 单账号设备侧每秒最大上行的请求数量(单消息payload平均为512字节) 基础版500 标准版请参考标准版规格 企业版请参考企业版规格 单个MQTT连接每秒最大上行消息数量 50/s 单个MQTT连接最大带宽(上行消息) 1MB(默认) MQTT单条发布消息最大长度。超过此大小的发布请求将被直接拒绝。 1MB MQTT协议规范 MQTT v5.0、MQTT v3.1.1、MQTT v3.1 与标准MQTT协议的区别 不支持QoS2 不支持will、retain msg MQTT协议支持的安全等级 采用TCP通道基础 + TLS协议(TLSv1、 TLSv1.1、TLSv1.2和TLSv1.3版本) MQTT连接心跳时间建议值 心跳时间限定为30至1200秒,推荐设置为120秒 MQTT协议消息发布与订阅 设备只能对自己的Topic进行消息发布与订阅 单个MQTT连接的最大订阅数量。 100个 MQTT自定义Topic支持的最大长度 128字节 MQTT自定义Topic支持每个产品添加的最大个数 10个/产品 单账号支持上传设备侧CA证书个数 100个
  • MQTT的TLS支持 平台推荐使用TLS来保护设备和平台的传输安全。 平台目前支持TLS1.3、1.2 、1.1版本以及GMTLS。其中TLS 1.1 计划后续不再支持,建议使用 TLS 1.3作为首选 TLS 版本。GMTLS版本仅在国密算法的企业版才支持。 基础版,标准版以及支持通用加密算法的企业版使用TLS连接时,平台支持如下加密套件: TLS_AES_256_GCM_SHA384 TLS_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 支持国密算法的企业版使用TLS连接时平台支持如下加密套件: ECC_SM4_GCM_SM3 ECC_SM4_CBC_SM3 ECDHE_SM4_GCM_SM3 ECDHE_SM4_CBC_SM3 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 带CBC的加密套件存在安全风险,请谨慎使用。
  • 概述 MQTT消息由固定报头(Fixed header)、可变报头(Variable header)和有效载荷(Payload)三部分组成。 其中固定报头(Fixed header)和可变报头(Variable header)格式的填写请参考MQTT标准规范,有效载荷(Payload)的格式(须使用UTF-8编码格式)由应用定义,即由设备和物联网平台之间定义。 MQTT的语法和接口细节,请以MQTT标准规范为准。 常见MQTT消息类型主要有CONNECT、SUBSCRIBE、PUBLISH。 CONNECT:指客户端发起与服务端的连接请求。有效载荷(Payload)的主要参数,参考设备连接鉴权填写。 SUBSCRIBE:指客户端发起订阅的请求。有效载荷(Payload)中的主要参数“Topic name”,参考Topic定义中订阅者为设备的Topic。 PUBLISH:平台发布消息。 可变报头(Variable header)中的主要参数“Topic name”,指当设备上报到物联网平台,发布者为设备时所对应的Topic。详细请参考Topic定义。 有效载荷(Payload)中的主要参数为完整的数据上报和命令下发的消息内容,目前是一个JSON对象。
  • 在标签管理页面添加标签 此方法适用于为多个资源统一添加拥有同样标签键的标签。 访问设备接入服务,单击“管理控制台 ”进入设备接入控制台。 在右上角的用户名下选择“标签管理”,进入标签管理服务页面。 图2 标签管理 在“资源标签”页面,勾选资源所在的区域,“资源类型”请选择“IoTDA-Instance”,单击“搜索”。系统列出所选区域下的所有IoTDA实例资源。 在“搜索结果”区域,单击“创建标签键”,输入键(例如:项目),单击“确定”。创建完成后,该标签键会添加至资源标签列表(如图3)。如果列表中没有显示该标签,单击,在下拉列表中勾选创建的标签键。默认该标签键的值为“无标签”,您还需要为每一个资源对应的标签值赋值,完成标签与资源的关联,继续下一步。 图3 实例标签-标签管理服务 单击“编辑”,切换资源标签列表为可编辑状态。 选择设备接入实例资源所在行,输入标签“值”(例如:A)。确认为标签键赋值后,“标签数量”将加1。按照同样方法依次为其他实例添加标签值。 图4 实例标签-输入标签值
  • 使用说明 配置自定义域名。 选择左侧导航栏“总览”页签,在选择的实例基本信息中,单击“接入信息”。 图1 总览-获取接入信息 单击“接入信息”页面中的“自定义域名”列中的“详情”,进入配置自定义域名的界面。 图2 接入信息-自定义域名详情 在自定义域名界面,单击“添加域名”,根据参数说明配置自定义域名后单击“确定”。 图3 自定义域名-配置自定义域名 创建DNS记录;配置自定义域名后需要联系购买域名的厂商添加域名解析,以便自定义域名指向华为云IoTDA的接入点。您可以参考平台对接信息获取设备的接入点。
  • 代码示例 您可以单击这里获取Java SDK接入示例,Demo中涉及的参数说明,请参考AMQP客户端接入说明。 所有示例代码已经包含与服务端断线重连的逻辑。 示例代码中用到的AmqpClient.java、AmqpClientOptions.java、AmqpConstants.java可以从这里获取。 1、创建AmqpClient。 // 以下参数请修改为自己的参数值 AmqpClientOptions options = AmqpClientOptions.builder() .host(AmqpConstants.HOST) .port(AmqpConstants.PORT) .accessKey(AmqpConstants.ACCESS_KEY) .accessCode(AmqpConstants.ACCESS_CODE) .queuePrefetch(1000) // sdk会在内存中分配该参数大小的队列,用来接收消息,客户端内存较小的情况可以调小该参数。 .build(); AmqpClient amqpClient = new AmqpClient(options); amqpClient.initialize();
共100000条