华为云用户手册

  • 业务流程 设备接入前,需创建产品(可通过控制台创建或者使用应用侧API创建产品)。 产品创建完毕后,需注册设备(可通过控制台注册单个设备或者使用应用侧API注册设备创建)。 设备注册完毕后,通过设备鉴权接口获取设备的access_token。 图1 获取设备access_token 获取到access_token之后,可以消息/属性上报等功能。其中access_token放于消息头中,下面示例为上报属性: 图2 上报属性 图3 上报属性
  • 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个子设备的属性数据。
  • 方案架构 方案总体架构框图如下: 图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. 物联网平台下发命令查询固件升级的结果,获取升级结果后,向终端设备取消订阅升级状态通知,并向控制台应用服务器通知升级的结果。 在下载包中断的情况下,平台支持断点续传功能。
  • 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. 物联网平台向控制台/应用服务器通知升级的结果。
  • 固件升级失败原因 物联网平台上报的失败原因: 失败原因 原因解释 处理建议 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 固件更新失败 请检查设备侧。
  • 验证 使用设备间消息通信功能时,具体步骤如下: 访问设备接入服务,单击“管理控制台”进入设备接入控制台。 创建产品,产品的“协议类型”选择“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 修改转存储任务
  • LwM2M/CoAP设备命令执行状态说明 命令执行状态以及状态变化机制如下所示。 图4 LwM2M/CoAP命令下发状态 表5 LwM2M/CoAP命令执行状态 命令执行状态 说明 等待(PENDING) LwM2M/CoAP设备采用缓存下发模式下发命令时,如果设备未上报数据,物联网平台会将命令进行缓存,此时任务状态为“等待”状态。 LwM2M/CoAP设备采用立即下发模式下发命令时,无此状态。 超期(EXPIRED) LwM2M/CoAP设备采用缓存下发模式下发命令时,如果在设置的超期时间内,物联网平台未将命令下发给设备,则状态变更为“超期”。超期时间会根据应用侧接口中携带的expireTime为准,如果未携带,默认24h。 LwM2M/CoAP设备采用立即下发模式下发命令时,无此状态。 已发送(SENT) LwM2M/CoAP设备采用缓存下发模式下发命令时,设备上报数据,物联网平台会将缓存的命令发送给设备,此时状态会由“等待”变为“已发送”。 LWM2M/CoAP设备采用立即下发模式下发命令时,如果设备在线,状态为“已发送”。 超时(TIMEOUT) LwM2M/CoAP设备收到命令后,物联网平台在180秒内未收到设备反馈的收到命令响应,此时状态会变为“超时”。 已送达(DELIVERED) 物联网平台收到设备反馈的已收到下发命令响应后,状态变为“已送达”。 成功(SUCCESSFUL) 如果设备在执行完命令后,会给物联网平台反馈命令执行成功的结果,将任务状态变更为“成功”。 失败(FAILED) 如果设备在执行完命令后,会给物联网平台反馈命令执行失败的结果,将任务状态变更为“失败”。 LwM2M/CoAP设备采用立即下发模式下发命令时,如果设备离线,状态为“失败”。
  • 异步命令缓存下发 图3 LwM2M/CoAP命令缓存下发流程 应用调用下发异步设备命令接口,下发请求到物联网平台,携带send_strategy为delay。 物联网平台将命令写入缓存队列,并上报200 OK,携带命令状态为PENDING。 设备上线或设备上报数据到平台。 物联网平台调用编解码插件对命令请求进行编码后,根据协议规范下发命令给设备。 若应用订阅了命令的状态变更通知,物联网平台通过命令状态变化通知接口推送消息给应用,携带命令状态为SENT。 后续流程请参考“命令立即下发”的步骤4到步骤7。
  • 单个MQTT设备同步命令下发 属性设置和属性查询分别参考查询设备属性和修改设备属性接口。 图1 命令下发流程图 应用调用下发设备命令接口,下发请求到物联网平台,命令下发消息样例如下: POST https://{Endpoint}/v5/iot/{project_id}/devices/{device_id}/commands Content-Type: application/json X-Auth-Token: ******** { "service_id" : "WaterMeter", "command_name" : "ON_OFF", "paras" : { "value" : "ON" } } 物联网平台根据协议规范下发命令给设备。 MQTT设备使用平台命令下发下行接口对应的Topic用来接收平台下发的命令,消息样例如下: Topic: $oc/devices/{device_id}/sys/commands/request_id={request_id} 数据格式: { "object_device_id": "{object_device_id}", "command_name": "ON_OFF", "service_id": "WaterMeter", "paras": { "value": "ON" } } 设备执行命令后通过平台命令下发上行接口返回命令执行结果,消息样例如下: Topic:$oc/devices/{device_id}/sys/commands/response/request_id={request_id} 数据格式: { "result_code": 0, "response_name": "COMMAND_RESPONSE", "paras": { "result": "success" } } 应用侧收到发送HTTP下发命令的同步响应结果。消息样例如下: Status Code: 200 OK Content-Type: application/json { "command_id" : "b1224afb-e9f0-4916-8220-b6bab568e888", "response" : { "result_code" : 0, "response_name" : "COMMAND_RESPONSE", "paras" : { "result" : "success" } } }
  • 异步命令立即下发 图2 LwM2M/CoAP命令下发流程 按照上述使用流程,进行对应步骤的示例如下: 应用调用下发异步设备命令接口,下发请求到物联网平台,携带send_strategy为immediately。消息样例如下: POST https://{endpoint}/v5/iot/{project_id}/devices/{device_id}/async-commands Content-Type: application/json X-Auth-Token: ******** { "service_id" : "WaterMeter", "command_name" : "ON_OFF", "paras" : { "value" : "ON" }, "expire_time": 0, "send_strategy": immediately } 物联网平台调用编解码插件对命令请求进行编码后,会通过LwM2M协议定义的设备管理和服务实现接口的Execute操作下发命令,消息体为二进制格式。 物联网平台向应用返回200 OK,携带命令状态为SENT。(如果设备不在线或者设备没收到指令则下发失败,命令状态为FAILED) 设备收到命令后返回ACK响应。 若应用订阅了命令的状态变更通知,物联网平台通过命令状态更新通知接口推送消息给应用,携带命令状态为DELIVERED。消息样例如下: Method: POST request: Body: { "resource": "device.commmad.status", "event": "update", "event_time": "20200811T080745Z", "notify_data": { "header": { "app_id": "8d4a34e5363a49bfa809c6bd788e6ffa", "device_id": "5f111a5a29c62ac7edc88828_test0001", "node_id": "test0001", "product_id": "5f111a5a29c62ac7edc88828", "gateway_id": "5f111a5a29c62ac7edc88828_test0001", "tags": [] }, "body": { "command_id": "49ca40af-7e14-4f7b-b97b-78cdd347a6b9", "created_time": "20200811T080738Z", "sent_time": "20200811T080738Z", "delivered_time": "20200811T080745Z", "response_time": "", "status": "DELIVERED", "result": null } } } 设备执行命令后通过205 Content响应返回命令执行结果。 若应用订阅了命令的状态变更通知,物联网平台会调用编解码插件对设备响应进行解码,然后通过命令状态更新通知接口推送消息给应用,携带命令状态为SUCCESSFUL。消息样例如下: Method: POST request: Body: { "resource": "device.commmad.status", "event": "update", "event_time": "20200811T080745Z", "notify_data": { "header": { "app_id": "8d4a34e5363a49bfa809c6bd788e6ffa", "device_id": "5f111a5a29c62ac7edc88828_test0001", "node_id": "test0001", "product_id": "5f111a5a29c62ac7edc88828", "gateway_id": "5f111a5a29c62ac7edc88828_test0001", "tags": [] }, "body": { "command_id": "49ca40af-7e14-4f7b-b97b-78cdd347a6b9", "created_time": "20200811T080738Z", "sent_time": "20200811T080738Z", "delivered_time": "20200811T080745Z", "response_time": "20200811T081745Z", "status": "SUCCESSFUL", "result": { "resultCode":"SUCCESSFUL", "resultDetail": { "value": "ON" } } } } }
  • 批量MQTT设备同步命令下发 平台支持通过调用创建批量任务接口,对多个MQTT协议设备下发同步命令。下面介绍如何调用创建批量任务下发批量命令。 应用调用创建批量任务接口,下发请求到物联网平台,下发消息样例如下。 POST https://{Endpoint}/v5/iot/{project_id}/batchtasks Content-Type: application/json X-Auth-Token: ******** { "app_id": "84fb64e43c5f4c6cbec339e52449bcea", "task_name": "task123", "task_type": "createCommands", "targets": [ "5f2bc9b961e7670469c5ef6d_1997930", "5f2bc9b961e7670469c5ef6d_1997931" ], "document": { "service_id": "water", "command_name": "ON_OFF", "paras": { "value": "ON" } } } 表3 命令下发创建批量任务参数表 参数 是否必选 描述 app_id 否 资源空间ID。 task_name 是 任务名(自定义)。 task_type 是 批量任务类型。具体可见创建批量任务,命令下发中取值有: createCommands-批量创建同步命令任务 createAsyncCommands-批量创建异步命令任务 targets 否 设备ID数组,执行批量任务的目标。 document 否 命令相关参数,执行任务数据文档,Json格式,Json里面是(K,V)键值对。参考设备同步命令 物联网平台向应用返回“201 Created”。 设备订阅下行topic接收命令,并通过上行topic向平台响应命令结果,参考平台命令下发。 通过调用查询批量任务列表接口查询批量命令下发任务执行情况。
  • 异步命令下发概述 异步命令下发主要用于LwM2M/CoAP设备接入物联网平台,平台或应用侧可通过以下方式进行命令下发: 表4 异步命令下发 类型 描述 适用场景 使用流程 异步命令立即下发 不管设备是否在线,平台收到命令后立即下发给设备。如果设备不在线或者设备没收到指令则下发失败。 适用于实时性要求高的场景。 异步命令立即下发 异步命令缓存下发 物联网平台在收到命令后先缓存,等设备上线或者设备上报属性时再下发给设备,如果单个设备存在多条缓存命令,则进行排队串行下发。 适合对命令实时性要求不高的场景,比如配置水表的参数。 异步命令缓存下发
  • 同步命令下发概述 同步命令下发主要用于MQTT设备,分为单个MQTT设备同步命令下发与批量MQTT设备同步命令下发。 表2 同步命令下发 类型 描述 适用场景 使用示例 单个MQTT设备命令下发 平台向单个设备下发设备控制命令。 对单个设备进行下发设备控制命令。 单个MQTT设备同步命令下发 批量MQTT设备命令下发 平台向多个设备下发设备控制命令。可创建批量处理任务,对多个设备进行批量操作 对多个设备进行批量下发设备控制命令。 批量MQTT设备同步命令下发
  • 概述 为能有效地对设备进行管理,设备的产品模型中定义了物联网平台可向设备下发的命令,应用服务器可以调用物联网平台应用侧API接口向设备下发命令,以实现对设备的远程控制。 物联网平台有同步命令下发和异步命令下发两种命令下发机制,如下表所示。 表1 命令下发概述 命令下发机制 定义 适用场景 LwM2M/CoAP协议设备 MQTT协议设备 同步命令下发 应用服务器可调用同步命令下发接口向指定设备下发命令,以实现对设备的同步控制。平台负责将命令以同步方式发送给设备,并将设备执行命令结果在HTTP请求中同步返回, 如果设备没有响应,平台会返回给应用服务器超时。 同步命令下发适合对命令实时性有要求的场景,比如路灯开关灯,燃气表开关阀。使用同步命令下发时,命令下发的时机需要由应用服务器来保证。 不适用 适用 异步命令下发 应用服务器可调用异步命令下发接口向指定设备下发命令,以实现对设备的控制。平台负责将命令发送给设备,并将命令执行结果异步推送给应用。 异步命令下发又分为缓存下发和立即下发。 立即下发:不管设备是否在线,平台收到命令后立即下发给设备。如果设备不在线或者设备没收到指令则下发失败。 缓存下发:物联网平台在收到命令后先缓存,等设备上线或者设备上报属性时再下发给设备,如果单个设备存在多条缓存命令,则进行排队串行下发。 立即命令下发适用于实时性要求高的场景; 缓存下发适合对命令实时性要求不高的场景,比如配置水表的参数。 适用 不适用 具体使用流程请见:同步命令下发、异步命令下发。
  • 场景说明 通过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)。
共100000条