开发者中心

MQTT实现

概述

本节将列出MQTT协议的实现细节。 QuarkIoE实现支持MQTT版本3.1.1。

通过MQTT连接

QuarkIoE MQTT实现支持TCP和WebSockets。URL可以使用mqtt.quarkioe.com。

可用端口:

TCP WebSockets
SSL 8883 443
no SSL 1883 80

注意:要使用WebSockets,您需要连接到路径"/mqtt"并遵循MQTT标准用于WebSocket通信。

SmartREST有效载荷

QuarkIoE MQTT实现使用SmartREST作为有效负载。 SmartREST是一个类似CSV的消息协议,使用服务器端的模板QuarkIoE中创建数据。

SmartREST基础

SmartREST消息为单行,其中每个参数由逗号分隔。 第一个参数是定义消息的ID。 您可以通过在消息之间使用换行符在单个发布中发送多个消息。

SmartREST转义

参数中出现以下字符之一时,需要将参数括在双引号中:

  • 逗号 (,)
  • 换行符 (\n)
  • 回车符 (\r)
  • 双引号 (") 此外,参数中的每个双引号都需要使用反斜杠()进行转义。

相同的转义规则适用于从服务器发送到客户端的消息。

发布示例:


  100,"This value, needs escaping",This value does not need escaping
                        

订阅示例:


  511,myDeviceSerial,"execute this\nand this\nand \"this\""
                        

设备层级结构

MQTT会话链接到单个设备,但此设备可以在其下具有可自由配置的设备层次结构。 所有子设备都需要在创建设备时定义唯一的ID。 我们建议使用根设备的唯一ID和层次结构中的唯一ID进行组合。 要为子设备而不是根设备创建数据,子设备的唯一ID将添加为主题中的另一个部分(例如""s/us/myChildDeviceIdentifier"")。

MQTT客户端将通过订阅相应的主题来自动接收层级结构中的每个子设备的操作。 不需要订阅每个子设备。 接收的每个操作将包含模板ID,后面是创建操作的设备/子设备的ID(后跟其他操作参数)。

MQTT功能

QTT认证

MQTT支持设置用户名和密码。 要连接到QuarkIoE,MQTT用户名需要包含格式为"租户/用户名"的租户和用户名。

MQTT ClientId

MQTT ClientId是唯一标识每个连接的客户端字段。 QuarkIoE实现还使用ClientId将客户端直接链接到设备。 因此,ClientId应使用以下格式:

"connectionType:deviceIdentifier:defaultTemplateIdentifier"

字段 必选 描述
connectionType 标明连接类型 缺省: d (设备)
deviceIdentifier 设备唯一标识符 例如IMEI,序列号, ...
defaultTemplateIdentifier 更多模板标识符信息请查阅SmartREST 2.0指南

对于最简单的客户端版本,MQTT clientId只能是deviceIdentfier。 它将自动解释为设备连接。

示例 ClientIds:

mySerialNumber
                          d:mySerialNumber
                          d:mySerialNumber:myDefaultTemplate
                        

MQTT ClientId的唯一性仅由deviceIdentifier确定。 因此,上述示例,只能同时连接一个客户端。

MQTT QoS

QuarkIoE实现支持全部三级MQTT QoS

  • QoS 0: At most once
  • QoS 1: At least once
  • QoS 2: Exactly once

对于操作或错误主题的订阅,我们将在订阅主题时在客户端定义的QoS中传递所有消息。

MQTT Clean Session

MQTT客户端可以将clean session标志设置为0(false)。 这将确保如果客户端断开您的订阅仍将工作,当您重新连接客户端将收到错过的消息。

MQTT Retained Flag

在当前的QuarkIoE实现中,不允许订阅设备发布数据的主题。 允许发布具有这些主题的Retained Flag的数据,但是与没有标志的发送没有实际的区别。 QuarkIoE发布的消息(如操作和错误)不包含Retained Flag。

MQTT Last Will

目前QuarkIoE不支持Last Will功能。

调试

为了在开发期间支持开发人员,您可以订阅主题s/e. 在此主题,可以检索在从设备发布期间发生的调试和错误消息。

本主题纯粹旨在支持客户端的开发。 不建议始终订阅此通道,因为消息是冗长的,并且可能显著增加数据使用量。 此外,您不应该根据此主题收到的内容触发设备的操作。 它不是应答通道。