物联网平台中,服务端和设备端通过Topic来实现消息通信。Topic是针对设备的概念,Topic类是针对产品的概念。产品的Topic类会自动映射到产品下的所有设备中,生成用于消息通信的具体设备Topic。

产品Topic类

为了方便海量设备基于海量Topic进行通信,简化授权操作,物联网平台增加了产品Topic类的概念。Topic类是一类Topic的集合。例如,产品的自定义Topic类/${YourProductKey}/${YourDeviceName}/user/update是具体Topic/${YourProductKey}/device1/user/update/${YourProductKey}/device2/user/update等的集合。

您创建设备后,产品的所有Topic类会自动映射到设备上。您无需单独为每个设备创建Topic。

图 1. Topic 自动生成示意图
Topic

物联网平台控制台,选择设备管理 > 产品,单击产品对应的查看,进入产品详情页,单击Topic类列表页签,可以在基础通信Topic物模型通信Topic自定义Topic页签查看相应的Topic类。关于这三类Topic的说明,请参见Topic分类

Topic类列表中:

  • Topic类以正斜线(/)进行分层,区分每个类目。其中,有两个类目为既定类目:${YourProductKey}表示产品的标识符ProductKey;${YourDeviceName}表示设备名称。
  • 操作权限:
    • 发布表示设备可以往该Topic发布消息。
    • 订阅表示设备可以订阅该Topic获取消息。

      订阅(SUB)和取消订阅(UNSUB)指令都需由设备发起。设备发送SUB指令订阅某个Topic后,该订阅永久生效;仅在设备发起UNSUB指令取消订阅该Topic后,订阅才会被取消。

    如果您需要管控单个设备的消息收发,请在控制台的设备列表页或服务端调用DisableThing接口,禁用该设备;或在业务上管控发送给设备的消息。

设备Topic

产品的Topic类不用于通信,只是定义Topic。用于消息通信的是具体的设备Topic。

创建设备后,从产品Topic类映射出设备Topic。设备Topic格式和产品Topic类格式一致,区别在于Topic类中的变量${YourDeviceName},在Topic中是具体的设备名称(DeviceName)。

设备Topic只能被该设备用于消息通信。例如,Topic:/${YourProductKey}/device1/user/update归属于设备device1,所以只能被设备device1用于发布或订阅消息,而不能被设备device2用于发布或订阅消息。

设备发送SUB指令订阅某个Topic后,在物联网平台控制台,选择设备管理 > 设备,单击设备对应的查看,进入设备详情页,单击Topic列表页签,已订阅Topic列表展示了设备订阅成功的所有Topic。云端系统可以通过其中的Topic发送下行消息。

单击列表中的自定义Topic对应的发布消息,可指定一条消息,发布到设备端。使用通配符的自定义Topic除外,详情请参见带通配符的自定义Topic

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

Topic分类

物联网平台将Topic分为三类。

类别 说明
基础通信Topic 物联网平台预定义的基础功能通信Topic,包含:
  • 固件升级相关Topic。各Topic的用途和消息数据格式,请参见固件升级
  • 设备标签相关Topic。各Topic的用途和消息数据格式,请参见设备标签
  • 时钟同步相关Topic。时钟同步功即NTP服务,请参见NTP服务
  • 设备影子相关Topic。各Topic的用途和消息数据格式,请参见设备影子数据流
  • 配置更新相关Topic。各Topic的用途和消息数据格式,请参见远程配置
  • 广播Topic。调用云端API PubBroadcast向订阅了该Topic的所有设备发送广播消息,实现批量控制设备。
物模型通信Topic 物联网平台预定义的物模型通信Topic。各物模型功能Topic消息的数据格式,请参见设备属性、事件、服务
说明 在云端,不可以调用Pub接口向物模型通信Topic发送消息。

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

自定义Topic 您可以根据业务需求,在产品的Topic类列表页,自定义Topic类

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