Topic是消息发布(Pub)者和订阅(Sub)者之间的传输中介。设备可通过Topic实现消息的发送和接收,从而实现服务端与设备端的通信。为方便海量设备基于Topic进行通信,简化授权操作,物联网平台定义了产品Topic类和设备Topic。本文介绍产品和设备Topic的定义、使用和分类。

Topic定义

产品Topic类:产品维度的Topic,是同一产品下不同设备的Topic集合。一个Topic类对一个ProductKey下所有设备通用。

以下是Topic类的使用说明:

  • 定义Topic的功能。

    Topic类格式以正斜线(/)进行分层,区分每个类目。例如:/${productKey}/${deviceName}/user/update

    其中,${productKey}${deviceName}两个类目为既定类目;后缀和前缀类目用于区分不同功能的消息。

    • ${productKey}表示产品的标识符ProductKey

      在指定产品的Topic类中,需替换为实际的ProductKey值。

    • ${deviceName}表示设备名称(DeviceName)。

      在产品Topic类中,${deviceName}是该产品下所有设备的名称变量,不需要替换为实际设备名称。

  • 定义Topic的操作权限。
    • 发布:产品下设备可以往该Topic发布消息。
    • 订阅:产品下设备可以订阅该Topic,从而获取消息。
    • 发布和订阅:同时具备发布订阅的操作权限。

在产品Topic类基础上,使用${productKey}/${deviceName}通配一个唯一的设备,与前缀、后缀类目组成的完整Topic,就是具体的设备Topic。

设备Topic与产品Topic类格式一致,区别在于Topic类中的变量${deviceName},在设备Topic中是具体的设备名称(DeviceName)。

例如产品a19mzPZ***下设备device1device2的具体Topic如下:

  • /a19mzPZ****/device1/user/update
  • /a19mzPZ****/device2/user/update

产品Topic类定义的功能和操作权限,会映射到具体的设备Topic。以下是设备Topic的使用说明:

  • 具体的设备Topic可用于消息通信。
    注意 在进行上下行通信调试时,请确保指定的Topic具备对应的操作权限。
  • 指定的设备Topic只能被指定设备用于消息通信。

    例如,Topic:/a19mzPZ****/device1/user/update归属于设备device1,只能被设备device1用于发布或订阅消息,而不能被设备device2用于发布或订阅消息。

  • 您可管控单个设备的消息收发。

    您可在物联网平台控制台对应实例下设备列表页面,或在服务端调用DisableThing接口,禁用该设备;或在业务上管控发送给设备的消息。

生成设备Topic

设备Topic自动生成流程如下。

Topic
  1. 物联网平台控制台,创建产品。具体操作,请参见创建产品

    创建产品后,物联网平台为该产品预定义了Topic类,包含基础通信Topic物模型通信Topic自定义Topic

    您可在产品详情页面,单击Topic类列表页签,查看各功能及其Topic类。您也可为产品添加自定义Topic。具体内容,请参见Topic分类和通信说明

  2. 为产品添加设备。具体操作,请参见创建设备
    添加设备后,产品的所有Topic类会自动映射到设备上,生成具体的设备Topic。产品Topic类定义的操作权限,会映射到具体的设备Topic。您无需单独为每个设备创建Topic。
    注意
    • 设备端未完成开发,且未接入物联网平台前,设备详情页面的Topic列表页签不显示设备Topic。
    • 在进行上下行通信调试时,请确保指定的Topic具备对应的操作权限。

      您可在产品详情页面的Topic类列表页签,查看Topic的操作权限

  3. 开发设备,将设备联网上线,接入物联网平台。

    设备端如需使用物联网平台的多种功能,并实现与物联网平台的通信,要先订阅相关的Topic,并开发具有发布权限Topic的通信逻辑。开发方法,请参见设备接入Link SDK文档中各功能开发的示例代码。

    • 设备可通过发送SUB指令订阅指定Topic,实现从物联网平台获取消息。开发方法,请参见订阅Topic中订阅Topic的代码示例。

      设备端C语言Link SDK 3.1、3.2和4.x版本已支持自动订阅Topic。支持的Topic列表,请参见自动订阅Topic说明

    • 设备可通过发送PUB指令给具有发布权限的Topic,向物联网平台发送消息。开发方法,请参见发布消息中发送消息的代码示例。

    设备认证接入物联网平台的方法,请参见设备安全认证

    设备成功订阅Topic后,您可在物联网平台控制台在对应实例下,选择设备管理 > 设备,单击设备对应的查看,进入设备详情页面,单击Topic列表页签,在已订阅Topic列表查看已订阅成功的所有Topic。

    说明 设备可通过UNSUB指令,取消与指定Topic的订阅关系。取消成功后,该Topic从已订阅Topic列表中删除。

通过设备Topic通信

设备接入物联网平台后,通信流程如下图所示:

通信流程
通信方式 说明
设备发送消息到物联网平台 设备通过具有发布权限Topic,向物联网平台发送消息。具体说明,请参见设备发送数据到物联网平台

基于Topic传递数据的数据格式,请参见Alink协议下各功能的数据格式文档。

物联网平台流转数据到服务器 物联网平台流转设备消息到企业服务器、其他Topic或其他云产品处理。具体操作,请参见配置AMQP服务端订阅设置数据流转规则

具体说明,请参见物联网平台流转数据到服务器

基于Topic传递数据的数据格式,请参见数据格式

服务器远程控制设备 企业服务器调用物联网平台的云端API,向指定设备发送消息。具体说明,请参见服务器远程控制设备
物联网平台下发消息到设备 在物联网平台控制台,可以直接通过已订阅的Topic,向指定设备下发指令,或发送消息。
  • 监控运维 > 在线调试页面,可下发指令给设备,进行功能调试。具体操作,请参见功能调试
  • 在设备详情页面的已订阅Topic列表中,单击已订阅的自定义Topic对应的发布消息,可通过该Topic从物联网平台发布一条消息到设备端。使用通配符的自定义Topic除外,具体信息,请参见带通配符的自定义Topic
设备与设备之间通信

将两端设备接入物联网平台,设备间的连接和通信请求都由物联网平台承担。您可以通过以下两种方式实现设备与设备间通信:

Topic分类和通信说明

物联网平台预定义的产品Topic类包含基础通信Topic、物模型通信Topic和自定义Topic三类Topic,详细说明见下表。

类别 Topic类及数据格式 说明
基础通信Topic OTA升级 OTA升级消息的Topic,包括设备上报OTA模块版本、物联网平台推送升级包信息、设备上报升级进度和设备请求获取最新升级包信息。
设备标签 上报设备标签的Topic,上报设备的部分信息,如厂商、设备型号等。
时钟同步 NTP服务同步请求和响应的Topic,解决嵌入式设备资源受限,系统不包含NTP服务,端上没有精确时间戳的问题。
设备影子 设备影子数据通过Topic进行流转,包括设备影子发布和设备接收影子变更。
配置更新 设备主动请求配置信息和物联网平台推送配置信息的Topic。

开发人员可在不用重启设备或中断设备运行的情况下,在线远程更新设备的系统参数、网络参数等配置信息。

广播通信 广播Topic。调用云端API PubBroadcast向订阅了该Topic的所有设备发送广播消息,实现批量控制设备。
物模型通信Topic 属性上报 各物模型功能的Topic。
说明 在物联网平台,不可以调用Pub接口向物模型通信Topic发送消息。

在物联网平台的云端,通过物模型功能远程控制设备,请调用SetDevicePropertySetDevicesProperty设置设备属性值;调用InvokeThingServiceInvokeThingsService调用设备服务。

属性设置
事件上报
服务调用
自定义Topic 自定义Topic类及格式 系统默认提供了3个自定义Topic类。您可根据业务需求,自定义Topic类。

Topic类是一个Topic模版配置,编辑更新某个Topic类后,可能对产品下所有设备使用该类Topic通信产生影响。建议在设备研发阶段设计好,设备上线后不再变更Topic类。