文档

使用Topic通信

更新时间:

定义Topic后,设备可以通过Topic与物联网平台通信,从而实现设备、物联网平台、业务服务器、其他云产品之间的通信。

前提条件

设备接入物联网平台

  1. 将设备接入物联网平台。

    重要

    使用设备模拟器、C语言Link SDK 3.1、3.2、4.x版本以及Python语言Link SDK进行设备连接时,设备会自动订阅具有订阅权限的基础通信Topic和物模型Topic,使用MQTT.fx客户端不会自动订阅这些Topic。

  2. 设备与物联网平台通信。

    image

    自定义Topic

    如果设备的消息格式不是Alink JSON,必须使用消息解析将设备上报的自定义Topic数据解析为Alink JSON格式,通过自定义Topic下发设备的数据格式没有限制。消息解析的概念和使用步骤,请参见什么是消息解析

    物模型Topic

    1. 使用物模型Topic通信前,需要先在已创建产品下添加物模型。请参见单个添加物模型批量添加物模型

    2. 如果设备的消息格式不是Alink JSON,必须使用消息解析将设备上报的自定义格式数据解析为Alink JSON格式,将物联网平台下发的Alink JSON格式数据解析为设备自定义格式的数据。消息解析的概念和使用步骤,请参见什么是消息解析

    3. 设备上报的数据经过消息解析转化后,物联网平台校验设备端上报的属性、事件数据和服务调用数据(服务请求参数和服务调用结果),并将校验通过的数据显示在物联网平台控制台对应设备的设备详情页面的物模型数据页签。

      • 在创建产品时选择数据校验的类型,具体参见创建产品

      • 物模型校验的类型和说明

        类型

        说明

        范围

        强校验

        校验设备上报数据中的所有字段,仅流转校验通过的数据。

        校验通过的数据展示在物联网平台控制台对应设备的设备详情物模型数据页签。校验不通过的数据则不展示。

        对于2020年10月14日之前(不含当日)创建的产品,强校验为唯一的校验方式。

        弱校验

        仅校验设备上报数据中的identifier和dataType字段,不校验其他字段,流转全量数据。

        校验通过的数据展示在物联网平台控制台对应设备的设备详情物模型数据页签。校验不通过的数据则不展示。

        通过流转数据中的参数checkFailedData,可查看校验不通过的数据。更多信息,请参见数据格式

        对于2020年10月14日至2020年12月31日(含当日)创建的产品,不再支持修改当前的校验方式。

        在2021年01月01日之后(含当日)创建产品时,需选择数据校验方式为弱校验或免校验。产品创建完成后,不可再修改。

        具体操作,请参见创建产品

        免校验

        不校验设备上报数据,流转全量数据。

        物模型数据使用说明如下:

        • 物模型属性上报:属性数据不展示在物联网平台控制台对应设备下设备详情页面的物模型数据 > 运行状态页签中。

        • 物模型服务调用:所有服务都使用异步调用方式。

        • 物模型事件上报:所有事件都使用信息类型。

设备、物联网平台、业务服务器、其他云产品间的通信方式

image
重要
  • 设备不能订阅其他设备的Topic,也不能向其他设备的Topic发布消息。例如Topic:/a19mzPZ****/device1/user/update归属于设备device1,只能被设备device1用于发布或订阅消息,而不能被设备device2用于发布或订阅消息。如果需要,请参见下面的设备与设备通信

  • 设备端可按需订阅物联网平台预定义的系统Topic(例如/sys/${productKey}/${deviceName}/thing/service/property/set),但不支持设备端直接使用/sys/${productKey}/${deviceName}/#订阅以/sys/${productKey}/${deviceName}为开头的所有系统Topic。

  • 目前仅支持通过在设备端Link SDK使用unsub接口取消已订阅的Topic。C语言请参见aiot_mqtt_unsub、其他语言请参见设备端Link SDK的文档

  • 本文仅介绍部分基于Topic的通信方式,更多通信方式请参见物联网平台通信方式概述

服务器接收设备数据

  1. 设备上报数据,需要相应Topic的发布权限。

  2. 设备上报物模型数据,需要按照指定的Topic和格式,请参见设备属性、事件、服务

  3. 配置服务端订阅。将设备数据实时转发到服务器。服务端订阅基于消息类型转发消息,消息类型和Topic的对应关系请参见数据格式。使用RAM用户或RAM角色订阅设备消息,需要配置自定义权限,请参见RAM用户访问物联网平台RAM授权说明

服务器向设备下发数据

  1. 设备接收消息,需要相应Topic的订阅权限。

  2. 设备主动订阅Topic后,设备详情页的Topic列表页签才会出现相应Topic。订阅方式如下:

    • 使用MQTT.fx接入物联网平台:设备在线后使用Subscribe功能订阅设备Topic。可以使用控制台的在线调试功能,进行设置属性调用服务

    • SubscribeTopic:模拟或开发设备接入物联网平台在线后,调用该接口订阅设备Topic。

    • 设备模拟器:设备会自动订阅基础通信Topic物模型Topic

    • 设备端Link SDK:使用C语言Link SDK 3.1、3.2、4.x版本、Python语言Link SDK,设备会自动订阅具有订阅权限的基础通信Topic物模型Topic。将设备接入物联网平台,并激活上线,完成设备Topic订阅。可以使用在线调试功能,进行设置属性调用服务

  3. 业务服务器调用云端API。更多云端API请参见服务器远程控制设备

    • 同步方式:服务器下发消息数据,并同步等待设备响应数据,可以使用RRPC

    • 异步方式:

      • 自定义Topic:调用Pub接口。

      • 物模型Topic:调用SetDeviceProperty向单个设备发送设置属性值的指令。调用InvokeThingService向单个设备发送调用服务的指令。

设备与设备通信

设备不能订阅其他设备的Topic,也不能向其他设备的Topic发布消息。通过云产品流转Topic消息路由可以将一个设备的Topic消息内容,转发到另一个设备的Topic,实现不同设备间的通信。

控制台向设备下发消息

登录物联网平台控制台,单击对应实例卡片。

  • 监控运维>在线调试页面,可下发指令给设备,进行功能调试。具体操作,请参见在线调试

  • 在设备详情页面的已订阅Topic列表中,单击已订阅的自定义Topic对应的发布消息,可通过该Topic从物联网平台发布一条消息到设备端。使用通配符的自定义Topic除外,具体信息请参见使用自定义Topic通信

将设备数据流转到其他云产品

  1. 设备上报数据,需要相应Topic的发布权限。

  2. 设备上报物模型数据,需要按照指定的Topic和格式,请参见设备属性、事件、服务

  3. 配置云产品流转。将指定设备数据流转到轻量消息队列(原 MNS) SMQ(Simple Message Queue (formerly MNS))、云数据库RDS、表格存储、函数计算、时间序列数据库TSDB、云原生多模数据库Lindorm、DataHub、消息队列RocketMQ等云产品中。云产品流转的概念、流程请参见云产品流转概述

可选步骤

查看云端日志

  1. 登录物联网平台控制台

  2. 实例概览页签的全部环境下,找到对应的实例,单击实例卡片。

  3. 在左侧导航栏,选择监控运维>日志服务,单击云端运行日志页签。

    • 云端运行日志包含了物联网平台、设备、业务服务端的通信记录,错误码和排错方法请参见云端运行日志

    • 复制目标Topic消息的messageIDtraceID。追踪任意一条消息在物联网平台流转的全路径,快速定位故障,更多信息请参见消息轨迹

发布产品

说明

撤销发布产品,不影响设备与物联网平台的通信。

  1. 在对应产品详情页面中,单击右上角发布,发布产品。

  2. 产品发布成功后,不支持修改和删除操作。更多信息,请参见(可选)发布产品

相关文档

  • 定义Topic后,设备、物联网平台、服务端、其他云产品间的通信方式请参见使用Topic通信。更多通信方式,请参见物联网平台通信方式概述

  • 云产品流转和服务端订阅,基于数据格式处理和传递数据,数据格式和具体Topic的对应关系请参见数据格式

  • 设备与云端基于Alink协议进行物模型数据通信,包括设备上报属性或事件消息到云端,从云端下发设置属性或调用服务消息到设备,demo示例请参见物模型通信

  • 设备接入、物模型使用的入门视频,请参见设备接入

  • 不同协议、不同类型设备接入物联网平台的流程,请参见设备接入概述。设备端Link SDK的下载方式,请参见设备接入Link SDK

  • 物模型Topic数据自动写入时序数据存储空间,管理物模型数据存储的操作请参见关闭或开启物模型数据存储

  • 如果需要存储自定义Topic数据用于查询,必须先创建时序数据存储规则。操作步骤,请参见配置自定义Topic数据存储

常见问题