华为云用户手册

  • HTTPS设备与物联网平台通信 设备使用HTTPS协议接入平台时,平台和设备通过https接口调用通信。通过这些接口,平台和设备可以实现设备鉴权、消息上报及属性上报。 消息类型 说明 设备鉴权 用于设备获取鉴权信息access_token。 设备属性上报 用于设备按产品模型中定义的格式将属性数据上报给平台。 设备消息上报 用于设备将自定义数据上报给平台,平台将设备上报的消息转发给应用服务器或华为云其他云服务上进行存储和处理。 网关批量属性上报 用于网关设备将多个子设备的属性数据一次性上报给平台。
  • HTTP接口介绍 物联网平台的接口如下表所示: 接口分类 API 接口 说明 设备鉴权相关接口 设备鉴权接口说明 /v5/device-auth 设备鉴权接口,鉴权通过后建立设备与平台间才能处理业务连接。鉴权成功后平台返回access_token。调用属性上报、消息上报等其他接口时,都需要携带access_token信息。如果access_token超期,需要重新认证设备获取access_token。如果access_token未超期重复获取access_token,老的access_token在未超期前保留30s,30s之后失效。 设备消息相关接口 设备消息上报接口说明 /v5/devices/{device_id}/sys/messages/up 用于设备将自定义数据上报给平台,平台将设备上报的消息转发给应用服务器或华为云其他云服务上进行存储和处理。 设备属性相关接口 设备属性上报接口说明 /v5/devices/{device_id}/sys/properties/report 用于设备按产品模型中定义的格式将属性数据上报给平台。 网关上报子设备属性接口说明 /v5/devices/{device_id}/sys/gateway/sub-devices/properties/report 用于批量设备上报属性数据给平台。网关设备可以用此接口同时上报最多50个子设备的属性数据。
  • 业务流程 设备接入前,需创建产品(可通过控制台创建或者使用应用侧API创建产品)。 产品创建完毕后,需注册设备(可通过控制台注册单个设备或者使用应用侧API注册设备创建)。 设备注册完毕后,通过设备鉴权接口获取设备的access_token。 图1 获取设备access_token 获取到access_token之后,可以消息/属性上报等功能。其中access_token放于消息头中,下面示例为上报属性: 图2 上报属性 图3 上报属性
  • 方案架构 方案总体架构框图如下: 图1 总体架构图 各种不同协议类型的设备,通过泛协议插件,最终以MQTT协议和华为云物联网平台进行链接。泛协议插件是各种不同协议类型设备和华为云物联网平台之间的中间层,用以屏蔽各种不同协议之间的差异。泛协议插件由三部分组成: “泛协议设备接入层”:用于以特定网络协议与泛协议设备建链。 “协议桥接适配层”:负责完成第三方协议数据和平台格式数据的互相转换。 上行:把第三方协议数据转成平台格式数据,并调用泛协议SDK接口进行上报。 下行:收到平台下行数据时,将平台格式数据转换为第三方协议数据转发给第三方协议设备。 “泛协议SDK”:即平台提供的泛协议接入接入SDK,提供了网桥的通用功能实现。
  • 功能介绍 物联网平台将设备拓扑与数据转发能力解耦,对于数据转发能力支持通过一种设备代理策略来进行描述。即在台注册设备时已经固定拓扑关系,但是可以通过其他网关进行数据转发。这种设备代理策略需要在平台进行定义,和管理。代理授权主要分为两个部分: 时间维度:可为代理设备的转发权限设定一定的时限,一旦过期该设备便不再具备代理能力。 空间维度:只有加入该设备代理的设备才能转发彼此的数据(设备代理内的网关可共同转发子设备数据)。 在同一时刻,子设备只能存在一个确定的网关,且只能通过这个网关进行数据转发,因此在对子设备进行数据转发前需要提前确定代理关系。子设备代理网关的切换必须通过网关上报子设备状态来实现,当上报子设备状态为在线时,平台会根据用户在平台定义好的代理策略进行校验,校验通过后平台就会在该子设备与当前网关之间建立代理关系,之后才会允许通过该代理网关进行数据转发。当上报子设备状态为离线后,会清除代理关系,禁止通过该网关进行数据转发。
  • LwM2M协议设备固件升级流程 LwM2M协议FOTA升级流程的详细说明: 1~2. 用户在设备接入服务的控制台上传固件包,并在控制台或者应用服务器上创建固件升级任务。 3. LwM2M设备上报数据,平台感知设备上线,触发升级协商流程。(超时时间为24小时) 4~5. 物联网平台向设备下发查询设备固件版本的命令,查询成功后,物联网平台根据升级的目标版本判断设备是否需要升级。(第4步等待设备上报固件版本,超时时间为3分钟) 如果返回的固件版本信息与升级的目标版本信息相同,则升级流程结束,不做升级处理。 如果返回的固件版本信息与升级的目标版本信息不同,则继续进行下一步的升级处理。 6~7. 物联网平台查询终端设备所在的无线信号覆盖情况,获取小区ID、RSRP(Reference Signal Received Power,参考信号接收功率)和SINR(Signal to Interference Plus Noise Ratio,信号干扰噪声比)信息。(等待上报无线覆盖等级和小区ID,超时时间为3分钟左右) 查询成功:则根据如下方式计算可同时升级的并发数计算,并按照步骤9进行处理。 如下图所示,如果设备的RSRP强度和SINR强度均落在等级“0”中,则同时可以对该小区的50个相同信号覆盖区间的设备进行同时升级。 如果设备的RSRP强度和SINR强度分别落在等级“0”和“1”中,则以信号较弱的等级“1”为准,则只能同时对该小区的10个设备进行升级。 如果设备的RSRP强度和SINR强度分别落在等级“1”和“2”中,则以信号较弱的等级“2”为准,则只能同时对该小区的1个设备进行升级。 如果设备的RSRP强度和SINR强度不在该3个等级范围内,且均可以查询到,则按照信号最弱覆盖等级“2”处理,则只能同时对1个设备进行升级。 如果用户在固件升级中发现同时进行升级的设备数较少,则可以联系当地运营商检查和优化设备所在小区的无线覆盖情况。 查询失败:则按照流程步骤8进行处理。 8. 物联网平台继续下发查询小区ID信息的命令,获取终端设备所在的小区ID信息。 如果查询成功:物联网平台支持同时对该小区的10个相同情况的设备进行固件升级。 如果查询失败:则升级失败。 9. 物联网平台向设备订阅固件升级的状态。 10~11. 物联网平台向设备下发下载固件包的URL地址,通知设备下载固件包。终端设备根据该URL地址下载固件包,固件包的下载支持分片下载,下载完成后,设备知会物联网平台固件包已下载完毕。(第11步超时时间为60分钟) 12~13. 物联网平台向设备下发升级的命令,终端设备进行升级操作,升级完成后终端设备向物联网平台反馈升级结束。(等待设备上报升级结果和升级状态,超时时间为30分钟) 14~16. 物联网平台下发命令查询固件升级的结果,获取升级结果后,向终端设备取消订阅升级状态通知,并向控制台应用服务器通知升级的结果。 在下载包中断的情况下,平台支持断点续传功能。
  • 固件升级失败原因 物联网平台上报的失败原因: 失败原因 原因解释 处理建议 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 固件更新失败 请检查设备侧。
  • LwM2M协议设备软件升级流程 LwM2M协议SOTA升级流程的详细说明: 1~2. 用户在设备管理服务的控制台上传软件包,并在控制台或者应用服务器上创建软件升级任务。 3. LwM2M设备上报数据,平台感知设备上线,触发升级协商流程。(超时时间为24小时) 4~5. 物联网平台向设备下发查询设备软件版本的命令,查询成功后,物联网平台根据升级的目标版本判断设备是否需要升级。(第4步等待设备上报软件版本,超时时间为3分钟) 如果返回的软件版本信息与升级的目标版本信息相同,则升级流程结束,不做升级处理。 如果返回的软件版本信息与升级的目标版本信息不同,则继续进行下一步的升级处理。 6. 物联网平台向设备订阅软件升级的状态。 7~8. 物联网平台查询终端设备所在的无线信号覆盖情况,获取小区ID、RSRP(Reference Signal Received Power,参考信号接收功率)和SINR(Signal to Interference Plus Noise Ratio,信号干扰噪声比)信息。(等待上报无线覆盖等级和小区ID,超时时间为3分钟左右) 查询成功:则根据如下方式计算可同时升级的并发数计算,并按照步骤10进行处理。 如下图所示,如果设备的RSRP强度和SINR强度均落在等级“0”中,则同时可以对该小区的50个相同信号覆盖区间的设备进行同时升级。 如果设备的RSRP强度和SINR强度分别落在等级“0”和“1”中,则以信号较弱的等级“1”为准,则只能同时对该小区的10个设备进行升级。 如果设备的RSRP强度和SINR强度分别落在等级“1”和“2”中,则以信号较弱的等级“2”为准,则只能同时对该小区的1个设备进行升级。 如果设备的RSRP强度和SINR强度不在该3个等级范围内,且均可以查询到,则按照信号最弱覆盖等级“2”处理,则只能同时对1个设备进行升级。 如果用户在软件升级中发现同时进行升级的设备数较少,则可以联系当地运营商检查和优化设备所在小区的无线覆盖情况。 查询失败:则按照流程9进行处理。 9. 物联网平台继续下发查询小区ID信息的命令,获取终端设备所在的小区ID信息。 如果查询成功:物联网平台支持同时对该小区的10个相同情况的设备进行软件升级。 如果查询失败:则升级失败。 10~12. 物联网平台通知设备有新的软件包版本,设备启动软件包的下载。软件包的下载按照分片的方式进行下载,支持断点续传功能,通过软件包分片中携带的“versionCheckCode”确定是否属于同一个软件包。下载完成后,设备知会物联网平台软件包已下载完毕。(第11步超时时间为60分钟) 13~14. 物联网平台向设备下发升级的命令,终端设备进行升级操作,升级完成后终端设备向物联网平台反馈升级的结果。(等待设备上报升级结果和升级状态,超时时间为30分钟) 15. 物联网平台向控制台/应用服务器通知升级的结果。
  • 验证 使用设备间消息通信功能时,具体步骤如下: 访问设备接入服务,单击“管理控制台”进入设备接入控制台。 创建产品,产品的“协议类型”选择“MQTT”。 图9 创建产品 在步骤1中创建的产品下分别注册设备A(test111)和设备B(test222),详细步骤可参考注册单个设备。 图10 注册设备 您可以根据自己的业务场景来实现设备间消息通信。下面以MQTT.fx为例说明如何进行设备间消息通信: 打开两个MQTT.fx,分别模拟设备A(test111)、B(test222)。如何使用MQTT.fx可参考使用Mqtt.fx调测使用Mqtt.fx调测。 设备B在Subscribe页面中输入Topic“ /test/M2M/#”后,单击“Subscribe”订阅。 图11 设备B(test222)在Subscribe页面中输入topic 设备A(test111)向设备B(test222)发送消息,在设备A(test111)的MQTT.fx的“Publish”页面中,输入topic“/test/M2M/${任意单词}”(其中“${任意单词}”替换成任意单词) ,在内容输入框中输入要发送的消息(如:hello)单击“Publish”即可发送。 图12 设备A Publish页面输入消息 在设备B的Subscribe页面可以看到接收的消息如下: 图13 设备B Subscribe页面展示
  • 查看设备详情 在设备列表中,单击具体的设备进入到设备详情页面。 图2 设备-设备详情 页签名 说明 设备信息 查看设备信息:查看设备基本信息,包括设备标识码(nodeId)、设备ID(deviceId),节点类型、设备软固件版本信息等。用户也可通过调用修改设备接口修改设备的基本信息。 设备标识码(nodeId),设备唯一物理标识,如IMEI、MAC地址等,用于设备在接入物联网平台时携带该标识信息完成注册鉴权。 设备ID(deviceId),用于唯一标识一个设备,在注册设备时由物联网平台分配获得,是设备在IoT平台上的内部标识,用于设备接入时鉴权,及后续在网络中通过deviceId进行消息传递。 重置密钥:密钥用于设备采用原生MQTT、NB-IoT设备、集成SDK的设备接入物联网平台的鉴权认证。重置密钥后,需要将新的密钥信息更新到设备中,设备重新发起注册时,携带新的密钥进行认证。 物模型数据:查看最近一次设备上报到平台的数据。 云端运行日志 物联网平台支持记录平台与应用侧及平台与设备侧之间的消息交互情况,您可以在控制台查看这些信息,详细操作请参考查看运行日志。 云端下发 您可以在控制台上创建单个设备的命令下发及消息下发(仅MQTT设备支持)任务。详细操作请参考云端数据下发。 设备影子 物联网平台提供设备影子功能,用于缓存设备状态。设备在线时,可以直接获取下发的命令;设备离线时,上线后可以主动获取下发的命令。详细操作请参考设备影子。 消息跟踪 物联网平台支持通过消息跟踪功能进行快速的故障定位和原因分析。详细操作请参考设备消息跟踪。 设备监控 设备运行日志:物联网平台支持接收设备上传的日志,您若打开设备日志开关,可将本地日志流转到云日志服务(LTS)(注:此功能仅适用于MQTT设备)。 设备异常检测:物联网平台提供设备异常检测功能。详细操作参考设备异常检测 子设备 物联网平台支持设备直连,也支持设备挂载在网关上,作为网关的子设备,由网关直连。详细操作参考网关与子设备。 标签 物联网平台支持定义不同的标签,并对设备打标签。详细操作请参考标签。 群组 物联网平台支持将设备添加到不同群组中,以便处理对海量设备的批量操作。详细操作请参考群组。
  • 设备状态含义 在控制台上可以查看设备当前状态,如在线、离线、未激活、异常、冻结。用户也可以通过订阅方式获取设备的状态信息。设备状态定义如下: 状态类型 状态 短连接设备(如NB-IoT设备) 长连接设备(MQTT) 连接状态 在线 如果在25小时内设备有上报过数据,设备的状态为“在线”;如果在25小时内未上报过数据,设备的状态会变为“异常”。 设备与平台之间一直连接,无断开。 离线 设备接入平台后,设备在超过49小时未上报数据,平台会将设备置为“离线”状态。 设备与平台之间的连接断开1分钟后(数据自动刷新周期为1分钟),置为“离线”状态。 如果在界面上手动刷新状态,则直接显示“离线”。 异常 设备接入平台后,设备在超过25小时未上报数据,平台会将设备置为“异常”状态。 无此状态。 未激活 已在平台上完成设备注册但真实设备还未接入平台。请根据设备初始化操作完成设备的接入。 已在平台上完成设备注册但真实设备还未接入平台。请根据设备初始化操作完成设备的接入。 管理状态 冻结 用户主动将设备状态置于冻结状态,设备冻结后不能再连接上线,当前仅支持冻结与平台直连的设备。
  • 业务流程 修改设备属性值 修改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" : "40fe3542-f4cc-4b6a-98c3-61a49ba1acd4", "shadow" : [ { "desired" : { "properties" : { "temperature" : "60" }, "event_time" : "20151212T121212Z" }, "service_id" : "WaterMeter", "reported" : { "properties" : { "temperature" : "60" }, "event_time" : "20151212T121212Z" }, "version" : 1 } ] }
  • 查询和修改设备影子 查询设备影子 方法1:应用服务器调用查询设备影子数据接口。 方法2:登录管理控制台,在左侧导航栏选择“设备”,单击具体的设备进入到设备的详情页面,在“设备影子”页签中,可以查看当前设备属性数据,包括“上报值”和“期望值”。 如果当前界面中看到“上报值”与“期望值”不一致,原因可能是设备未在线,暂时存储在设备影子中,待同步给设备,期望值会存在深色底纹。 如果当前界面看到的“上报值”与“期望值”一致,则表示设备最近一次上报的属性值与用户期望下发的属性值一致,期望值为白色底纹。 图1 设备影子-查看 修改设备影子 方法1:应用服务器调用配置设备影子预期数据接口。 方法2:登录管理控制台,在左侧导航栏选择“设备-所有设备”,在设备列表中单击具体的设备进入到设备的详情页面,在“设备影子”页面,单击“属性配置”,在弹出窗口中输入服务属性对应的期望值,单击"确定"完成设备影子的修改。 图2 设备影子-属性配置
  • 获取AMQP接入凭证 若应用使用AMQP协议接入物联网平台进行数据流转,请先预置接入凭证。您可以通过调用生成接入凭证接口预置,也可以前往控制台页面进行预置,详细方法请参考如下操作: 选择“IoTDA实例 ”,进入您所选择的实例版本,单击“详情”进入实例详情页面。 单击“预置接入凭证”预置接入凭证密钥(accessCode)和接入凭证键值(accessKey)。 如果您之前预置过接入凭证,重新预置之后,之前的接入凭证密钥将不能再使用。
  • 连接配置说明 AMQP客户端接入物联网平台的连接地址和连接认证参数说明如下: AMQP接入域名:amqps://${UUCID}.iot-amqps.cn-north-4.myhuaweicloud.com。 连接字符串:amqps://${UUCID}.iot-amqps.cn-north-4.myhuaweicloud.com :5671?amqp.vhost=default&amqp.idleTimeout=8000&amqp.saslMechanisms=PLAIN 参数 说明 UUCID 独立域名ID(Unique User Connect ID),每个账号会自动生成,请前往管理控制台-总览页面-实例基本信息-接入信息获取。 amqp.vhost 当前amqp使用是默认的host,只支持default。 amqp.saslMechanisms 连接认证方式当前支持PLAIN-SASL。 amqp.idleTimeout 心跳时间单位为毫秒。如果超过心跳时间,Connection上没有任何帧通信,物联网平台将关闭连接。 端口:5671 客户端身份认证参数 username =“accessKey=${accessKey}|timestamp=${timestamp}|instanceId=${instanceId}” password =“${accessCode}” 参数 是否必须 说明 accessKey 是 接入凭证键值,当前单个键值最多能和32个客户端同时进行建链。 首次建链时候,请参考这里进行预置。 timestamp 是 表示当前时间,13位毫秒值时间戳。 服务端校验客户端的时间戳,且时间戳相差5分钟。 instanceId 否 实例Id,同一Region购买多个标准版实例时需要填设置该参数,实例Id参考这里这里获取。 accessCode 是 接入凭证密钥,长度不超过256个。 首次建链时候,请参考这里进行预置。若密钥丢失,可通过调用接入凭证接口进行重置,也可以参考这里进行重置。
  • 建链认证过程 AMQP客户端与物联网平台建立TCP连接,然后进行TLS握手校验。 为了保障安全,接收方必须使用TLS加密,且使用TLS1.2及以上版本,不支持非加密的TCP传输。客户端的时间不能与标准时间差5min及以上,否则接入不进来。 客户端请求建立连接。 客户端向物联网平台发起请求,建立Receiver Link(即平台向客户端推送数据的单向通道)。客户端建立Connection成功后,需在15秒内完成Receiver Link的建立,否则物联网平台会关闭连接。建立Receiver Link后,客户端成功接入物联网平台。 一个Connection上最多能够创建十个Receiver Link,不支持创建Sender Link,即只能由平台向客户端推送消息,客户端不能向平台发送消息。
  • 购买DIS接入通道(以数据流转到DIS转存储至OBS为例) 登录华为云,访问对象存储服务OBS,进入对象存储服务管理控制台。 单击“创建桶”,按照需求选择桶规格,单击“立即创建”。 单击“桶列表”,单击进入刚刚创建的桶,单击“新建文件夹”,完成OBS桶创建。 登录华为云官方网站,访问数据接入服务DIS。 单击“管理控制台”进入数据接入服务管理控制台。 单击右上角“购买接入通道”,根据需求选择通道规格,单击“立即购买”。 图1 购买接入通道 单击左侧导航栏“通道管理”按钮,单击选择已购买的通道,选择“转储任务”, 单击“添加转储任务”,转储类型选择OBS,数据存储地址选择步骤2中创建的桶,转存储目录选择步骤3中创建的文件夹,单击“立即创建”。 图2 选择通道 图3 选择转存储任务 图4 修改转存储任务
  • 场景说明 通过IoTDA规则流转能力实现自动调用合约将数据流转到BCS区块链服务实现数据可信上链,助力客户构建可信多方协作平台,使用区块链可减少人为纠纷,提高交易效率;区块链的不可篡改性降低了欺诈和网络错误的发生;共享的账本、流程、记录增进参与方之间的可信度;审计机构可随时对不可篡改的账本进行审计。IoTDA企业版实例支持将数据流转到BCS华为云区块链引擎实例(推荐)和Hyperledger Fabric增强版。 本示例分为两部分,将设备上报的数据转发到华为云区块链引擎实例(推荐)和Hyperledger Fabric增强版上链。 Hyperledger Fabric增强版由于开源内核限制,不支持高tps场景使用。建议使用性能更好的华为云区块链引擎实例。
  • 相关推荐 相关文档 相关产品 设备数据上报 使用HTTP/HTTPS转发 使用AMQP转发 查看运行日志(旧版) 消息通知服务SMN 数据接入服务DIS 分布式消息服务Kafka 对象存储服务OBS 应用与数据集成平台ROMA Connect 云日志服务(LTS) 函数工作流FunctionGraph 分布式消息服务(RocketMQ) 云数据库 GeminiDB Influx MapReduce服务(MRS Kafka) 云数据库MySQL 区块链服务 BCS
  • 概述 数据转发功能用于提供IoTDA与其他第三方以及华为云服务的连接通道,从而实现将设备数据平滑流转至消息中间件、存储、数据分析、业务应用。各转发方式在各规格的支持情况,详见产品规格说明中 基础版、标准版与企业版实例功能差异。当前物联网平台支持如下转发方式: 表1 数据转发概述 分类 转发目标 说明 操作指导 第三方服务 第三方应用服务(HTTP推送) 将数据转发至客户的HTTP服务器,客户可以在数据转发界面创建流转规则,并指定推送的URL,将订阅的数据源信息推送到指定URL的服务器。 使用HTTP/HTTPS转发 AMQP推送消息队列 客户可以通过数据转发界面,订阅指定的AMQP通道,将订阅的数据源信息推送到指定AMQP通道,用户可通过AMQP的客户端与IoT平台建立链接,接收数据。 使用AMQP转发 MQTT推送消息队列 客户可以通过数据转发界面,订阅指定的MQTT Topic,将订阅的数据源信息推送到指定MQTT Topic,用户可通过Mqtt的客户端与IoT平台建立链接,接收数据。 使用MQTT转发 设备间通信 物联网平台支持基于MQTT协议实现设备间的消息通信,客户可以通过数据转发界面,订阅指定的Topic,平台会将设备上报的消息推送到指定的Topic,其他设备可以通过订阅该Topic来接收不同设备的消息。 设备间通信 数据分析 数据接入服务 DIS 将数据流转到华为云DIS云服务。目前DIS支持数据转存储至对象存储服务 OBS、MapReduce服务 MRS、数据湖探索 DLI、数据仓库服务 DWS、表格存储服务 CloudTable。具体DIS支持的转存储任务已实际购买的实例为准。 应用场景:数据接入服务主要解决云服务外的数据实时传输到云服务内的问题。 规格参考:通道规格理论1个分区1M/秒接入,2M/秒读取。 数据转发至DIS 分布式消息服务Kafka版 将数据流转到华为云DMS Kafka云服务,适用于构建实时数据管道、流式数据处理、第三方解耦、流量削峰去谷等场景,具有大规模、高可靠、高并发访问、可扩展且完全托管的特点。 应用场景:在日志收集、流式数据传输、在线/离线系统分析、实时监控等领域有广泛的应用。 规格参考:Kafka实例规格。 数据转发至Kafka存储 应用与数据集成平台ROMAConnect 将数据流转到华为云ROMA Connect, 可以实现无缝联接应用、消息、数据、API、设备,帮助企业快速、简单的打通并管理遗留系统与云原生应用,ROMA Connect是一个全栈式的应用与数据集成平台,源自华为数字化转型集成实践,聚焦应用和数据连接,适配多种企业常见的使用场景。 规格参考:ROMA实例规格。 - 分布式消息服务RocketMQ版 将数据流转到华为云RocketMQ云服务,兼容开源RocketMQ客户端。提供顺序、延迟、定时、重投、死信、事务消息等功能。提供消息追踪、消息溯源、链路诊断、死信导出、监控告警等能力,帮助您全方面的了解服务状况,保证业务正常运行。 应用场景:适用于电商、金融等多样的业务场景。 规格参考:RocketMQ实例规格。 数据转发至RokcetMQ 云日志服务 LTS 将数据流转到华为云LTS云服务,实现一站式日志采集、秒级搜索、海量存储、结构化处理、转储和可视化图表等功能。 应用场景:适用于应用运维、网络日志可视化分析、等保合规和运营分析等应用场景。 规格参考:日志流规格。 查看运行日志 函数工作流 FunctionGraph 将数据流转到华为云FunctionGraph云服务,客户只需要在FunctionGraph中编写业务函数代码并设置运行的条件,无需配置和管理服务器等基础设施,函数以弹性、免运维、高可靠的方式运行。此外,按函数实际执行资源计费,不执行不产生费用。 数据转发转发至FunctionGraph函数工作流 MapReduce服务 MRS 将数据转发到华为云MRS Kafka云服务,它的Kafka集群是一个分布式的、分区的、多副本的消息发布-订阅系统,它提供了类似于JMS的特性,Mysql性能规格但在设计上完全不同,它具有消息持久化、高吞吐、分布式、多客户端支持、实时等特性,适用于离线和在线的消息消费,如常规的消息收集、网站活性跟踪、聚合统计系统运营数据(监控数据)、日志收集等大量数据的互联网服务的数据收集场景。 - 区块链服务 BCS 将数据转发到华为云BCS云服务,作为面向企业及开发者提供的区块链技术服务平台,可以帮助客户快速部署、管理、维护区块链网络,降低客户使用区块链的门槛,让客户可以更专注于自身业务的开发与创新,实现业务快速上链。 规格参考:BCS产品规格。 数据转发至BCS可信上链 数据存储 云数据库 GeminiDB Influx 将数据流转到华为云GeminiDB Influx,兼容InfluxDB生态的云原生时序数据库。提供高性能读写、高压缩率、冷热分层存储以及弹性扩容、监控告警等服务能力,可以实现大并发的时序数据读写,压缩存储和类SQL查询等功能,支持多维聚合计算和数据可视化分析能力。 应用场景:广泛应用于资源监控、业务监控分析、物联网设备实时监控、工业生产监控、生产质量评估和故障回溯等。提供了高吞吐量和并发性,可以通过快速的响应时间来支持大量的连接,非常适合要求苛刻的物联网应用。 规格参考:InfluxDB规格。 数据转发至GeminiDB Influx 云数据库 RDS for MySQL 将数据流转到华为云RDS MySQL,相比自建数据库,RDS价格便宜、 即开即用,便捷运维,支持弹性伸缩并具备实例管理、实例监控、备份恢复、日志管理、参数管理等功能,支持单机和主备部署。 应用场景:网站业务、移动应用、游戏业务、电商业务、金融业务以及企业应用等。 规格参考:Mysql性能规格。 数据转发至MySQL 对象存储服务 OBS 将数据流转至华为云OBS云服务,OBS为客户提供海量、安全、高可靠、低成本的数据存储能力,使用时无需考虑容量限制,并且提供多种存储类型供选择,满足客户各类业务场景诉求,OBS也支持对接实时计算CS云服务,实时分析数据流,分析结果对接到其他云服务或者第三方应用进行数据可视化等。 应用场景:适用于海量大数据存储分析的场景。 规格参考:OBS存储规格。 数据转发至OBS长期存储 文档数据库服务DDS功能 将数据流转至华为云文档数据库服务DDS,DDS完全兼容MongoDB协议,具备安全审计,多账号管理,时间点备份恢复能力,支持集群和副本集部署架构。10倍备份恢复能力,分钟级横向扩容,轻松承载海量数据的高并发写入。 应用场景:游戏业务,物联网业务,电商、考勤系统等有典型高并发场景,对数据库性能要求较高。 规格参考:DDS性能规格 数据转发至MongoDB存储 通过公网进行数据转发流量限制不超过1M/s,超过后消息会直接丢弃。如果要使用更大的流量进行数据转发,推荐使用企业版,企业版支持私网进行数据转发,无此限制。
  • 安全检测 物联网平台提供安全检测能力,可持续检测设备的安全威胁。本文介绍具体的安全检测项,及如何查看并处理检测出的安全风险。 检测项说明 检测项 说明 设备侧使用非加密方式接入 设备与物联网平台之间,未使用加密协议建立安全连接,可能导致中间人劫持、重放攻击,会对业务造成影响。 使用不安全的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等网络方式登录。 暴力破解登录检测 检测设备是否被尝试通过暴力破解账号密码进行登录。 文件篡改检测 检测设备指定目录下的文件是否被篡改。
  • 离线分析 当设备发生离线事件时,需要对离线原因进行分析。根据离线发生的时间、设备的离线原因来统计离线设备的特征,帮助您全面了解、分析设备离线的原因。 离线原因 说明 设备侧主动离线 设备主动向物联网平台发送MQTT协议的DISCONNECT报文,进行离线。 设备侧长时间不发送心跳导致设备离线 设备侧未按照MQTT协议规定,在设置的心跳周期 * 1.5 时间范围内物联网平台发送MQTT协议层的心跳报文,导致物联网平台认为该设备链路已失效,按照协议要求,断开设备链接。 (注:心跳周期是设备侧在与物联网平台进行建链时指定的) 设备侧跟云端之间TCP链路断开,导致设备离线 物联网平台收到设备侧发送的TCP拆链报文,导致设备侧与物联网平台之间的TCP链路断开。 删除设备导致链路断开,设备离线 租户在物联网平台上对该设备进行删除,物联网平台对该设备进行断链。 冻结设备导致链路断开,设备离线 租户在物联网平台上对该设备进行冻结,物联网平台对该设备进行断链。 平台主动断开设备链路,导致设备离线 物联网平台升级期间,会主动断开设备链路。 设备与平台建立多条链路,导致老链路被断链 设备侧与物联网平台主动建立了多条链路,物联网平台将该设备侧的老链路断开,保留新建立的链路。 重置设备密钥,导致设备离线 租户在物联网平台上对该设备进行密钥重置并设置强制断链时,物联网平台对该设备进行断链。
  • 制作设备CA调测证书 本文以Windows环境为例,介绍通过Openssl工具制作调测证书的方法,生成的证书为PEM编码格式的证书。 在浏览器中访问这里,下载并进行安装OpenSSL工具。 以管理员身份运行cmd命令行窗口。 执行cd c:\openssl\bin(请替换为openssl实际安装路径),进入openssl命令视图。 执行以下命令生成生成密钥对。 openssl genrsa -out rootCA.key 2048 执行以下命令,使用密钥对中的私有密钥生成 CA 证书。 openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem 系统提示您输入如下信息,所有参数可以自定义。 Country Name (2 letter code) [AU]:国家,如CN。 State or Province Name (full name) []: 省份,如GD。 Locality Name (for example, city) []:城市,如SZ。 Organization Name (for example, company) []:组织,如Huawei。 Organizational Unit Name (for example, section) []:组织单位,如IoT。 Common Name (e.g. server FQDN or YOUR name) []: 名称,如zhangsan。 Email Address []:邮箱地址,如1234567@163.com。 在openssl安装目录的bin文件夹下,获取生成的CA证书(rootCA.pem)。
  • 使用限制 设备发放服务具有以下使用限制。 表1 设备发放服务使用限制列表 对象 类别/描述 限制 设备 集成Agent Lite的设备(MQTT) 不支持 原生MQTT协议设备 支持,设备需要开发设备引导接口,具备设备发放能力。 集成LiteOS的设备(LwM2M) 支持 证书 数字证书保证系统内各服务及系统与外部通信的安全性,防止通信数据在传输过程被篡改造成安全风险。 100 策略 自定义策略最多可添加的实例数 10 静态策略最多可添加的实例数 20 证书策略最多可添加的实例数 20 父主题: 产品介绍
  • 动态群组场景示例 通过设备名称模糊匹配规则(其他条件可以根据实际场景选择)创建动态群组,选择该动态群组执行OTA升级任务。 动态群组中的设备会动态根据设备名称匹配情况进行调整,并且该动态群组关联的OTA升级任务详情状态也会随之动态变化。 具体参考批量设备固件升级和动态群组的相关步骤进行操作。 创建动态群组,群组名称为“HuaweiDeviceGroup”,群组规则为 “device_name like 'HuaweiDevice%'”。 图5 动态群组详情 创建设备固件升级任务,选择动态群组“HuaweiDeviceGroup”,完成任务创建。 图6 固件升级任务 创建成功后可以查看动态群组中的设备已加入到该升级任务中。 图7 任务详情 参考注册单个设备注册设备,设备名称为“HuaweiDevice011”。注册成功后可以查看该设备已自动加入“HuaweiDeviceGroup”动态群组中。 图8 动态群组详情 查看软固件升级任务子任务详情,可以看到此设备已自动加入到升级任务中: 图9 固件升级任务 进入“HuaweiDevice001”设备详情界面,修改名称为“AbandonedHuaweiDevice001”。 图10 设备详情 修改设备名称成功后,可以查看该设备已自动从“HuaweiDeviceGroup”动态群组中移除。 图11 动态群组详情 查看软固件升级任务子任务详情,可以看到此设备的升级状态为“Removed”。 图12 固件升级任务
  • 群组概述 群组是一系列设备的集合,用户可以对资源空间下所有设备,根据区域、类型等不同规则进行分类建立群组,以便处理对海量设备的批量操作。例如,对资源空间下所有水表设备的群组进行固件升级。平台支持群组的增删改查操作,支持给群组绑定和解绑设备,支持一个设备被添加到多个群组中。 表1 群组分类 群组类型 使用说明 静态群组 手动添加设备到群组以及从群组中移除设备;支持群组层级嵌套。 限制: 账号下单实例最多可创建1,000个群组(包含嵌套的子群组)。 一个群组内最多添加20,000个设备。 一个设备最多可以被添加到10个群组中。 群组嵌套关系最大5级。 子群组只能归属一个父群组,不支持多父群组。 当群组有子群组时不能直接删除,需要先删除子群组才能删除父群组。 动态群组 按照动态群组规则(设备查询条件,类SQL语句)动态的将符合条件的设备自动添加进群组,不符合条件的自动移除群组;不支持手动管理群组中的设备。 限制: 账号下单实例最大可创建10个动态群组。 首次创建动态群组,规则最多允许匹配的100,000个设备(增量加入群组的设备无限制)。 动态群组默认为父群组,不支持将动态群组进行嵌套。 动态群组创建成功后,不允许修改动态群组规则。 不允许手动管理动态群组中的设备。 仅标准版实例、企业版实例支持该接口调用,基础版不支持。 单账号创建动态群组的 TPS 限制最大为1/S(每秒1次请求数)。
  • 设备发放业务流程 设备启动后,通过Bootstrap流程(设备出厂时预置设备发放平台地址作为引导服务器地址),引导物联网设备在初次上电时获得正确的目标物联网平台地址,继而完成设备与平台的建链过程。保证设备安全可靠的按业务目标上线,最大程度上减少人为干预的错误可能。 流程如下: 首先确认用户是否开通设备接入服务(物联网平台)。 在设备发放平台创建设备的发放清单(包括预注册设备以及添加发放策略)。 设备出厂时预置设备发放平台地址,设备上电后,设备发放服务通过使用标准 X.509证书验证或者根据设备密钥验证设备的标识,把设备发放到对应的设备接入平台。 设备发放将设备接入平台连接信息返回给设备。 设备通过收到的设备接入平台连接信息连接到设备接入平台。 父主题: 产品介绍
  • 创建MySQL 登录华为云官方网站,访问云数据库 MySQL,购买实例。设备接入服务企业版实例支持通过内网连接MySQL,标准版实例仅支持通过公网连接MySQL。 在购买的MySQL实例中,根据流转数据格式设计数据库表,可以通过数据过滤语句编辑流转数据。本示例使用设备属性上报通知的默认格式,将流转数据中的resource、event、notify_data、event_time分别转存至数据库表中的resource、event、content、event_time字段。 图1 创建数据库表样例
  • 转发方式概述 设备接入到物联网平台后,便可与物联网平台进行通信。设备通过自定义Topic或产品模型方式将数据上报到平台,在控制台设置后,通过订阅推送的方式,将设备生命周期变更、设备属性上报、设备消息上报、设备消息状态变更、设备状态变更、批量任务状态变更等消息转发到您指定的服务器。 当前华为物联网平台支持HTTP/HTTPS、AMQP、MQTT和设备间通信四种数据转发方式。 HTTP/HTTPS方式 订阅:应用服务器通过调用物联网平台的创建规则触发条件、创建规则动作、修改规则触发条件接口配置并激活规则,或者在控制台创建订阅任务,向平台获取发生变更的设备业务信息(如设备生命周期管理、设备数据上报、设备消息状态、设备状态等)和管理信息(软固件升级状态和升级结果)。订阅时必须指定应用服务器的URL,也称为回调地址。(什么是回调地址?)。 推送:订阅成功后,物联网平台根据应用服务器订阅的数据类型,将对应的变更信息(推送的通知内容可参考流转数据)推送给指定的URL地址。如果应用服务器没有订阅该类型的数据通知,即使数据发生了变更也不会进行推送。物联网平台进行数据推送时,数据格式为JSON格式,推送协议可以采用HTTP或HTTPS协议,其中HTTPS协议为加密传输协议,需要进行安全认证,更加安全,推荐使用。 HTTP/HTTPS方式详细请参考使用HTTP/HTTPS转发。 AMQP方式 订阅:AMQP(Advanced Message Queuing Protocol)即高级队列消息协议。用户通过控制台创建订阅任务,也可以通过调用物联网平台的创建规则触发条件、创建规则动作、修改规则触发条件接口配置并激活规则,向平台获取发生变更的设备业务信息(如设备生命周期管理、设备数据上报、设备消息状态、设备状态等)和管理信息(软固件升级状态和升级结果)。订阅时必须指定具体的AMQP消息通道。 推送:订阅成功后,物联网平台根据用户订阅的数据类型,将对应的变更信息推送给指定的AMQP消息队列。如果用户没有订阅该类型的数据通知,即使数据发生了变更也不会进行推送。用户可通过AMQP的客户端与IoT平台建立链接,来接收数据。 AMQP详细请参考使用AMQP转发。 MQTT方式 订阅:用户可以通过调用物联网平台的创建规则触发条件、创建规则动作、修改规则触发条件接口配置并激活规则,向平台获取发生变更的设备业务信息(如设备生命周期管理、设备数据上报、设备消息上报、设备状态等)和管理信息(软固件升级状态和升级结果)。订阅时必须指定接收推送消息的Topic。 推送:订阅成功后,物联网平台根据用户订阅的数据类型,将对应的变更信息推送给指定的Topic。如果用户没有订阅该类型的数据通知,即使数据发生了变更也不会进行推送。用户可通过MQTT的客户端与IoT平台建立连接,来接收数据。 MQTT详细请参考使用MQTT转发。 设备间通信 订阅:物联网平台支持基于MQTT协议实现设备间的消息通信,用户可通过控制台创建规则,也可以通过调用物联网平台的创建规则触发条件、创建规则动作、修改规则触发条件接口配置并激活规则,向平台获取设备上报的消息。设备订阅只支持消息上报。 推送:订阅成功后,物联网平台会将设备上报的消息推送到指定的MQTT Topic,当设备接入平台后,可以通过订阅该Topic来接收数据,从而实现设备间的消息通信。 设备间通信详细请参考设备间通信。 数据转发方式 适用场景 优点 限制 HTTP/HTTPS订阅推送 应用作为服务端被动接收IoT云服务的消息。 - 流控限制800TPS,不建议大流量推送使用HTTP/HTTPS方式。 AMQP订阅推送 应用作为客户端,可主动拉取IoT云服务的消息,也可以通过监听被动接收 IoT云服务的消息。 能主动拉取数据 请参考连接规格。 MQTT订阅推送 应用作为客户端,可以通过订阅接收 IoT云服务的消息。 - 请参考使用限制。 设备间通信 智能家居控制场景,手机APP和智能设备之间进行消息通信。 设备联动,设备间进行数据传输与消息通信。 实现设备间通信 请参考设备间消息通信概述。 父主题: 数据转发至第三方应用
  • 代码示例 在本地计算机创建一个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客户端在物联网平台鉴权失败,请确认接入码是否正确,时间戳与标准时间的差异是否大于5min。
共100000条