开发者中心

Hello MQTT

概述

在本教程中,您将了解如何使用带有QuarkIoE预定义消息(称为"静态模板")的MQTT。

前提条件

为跟进本教程,请检查以下前提条件:

  • 您需要有一个有效的租户,用户名和密码,以访问QuarkIoE。
  • 您已经安装了Chrome扩展MQTTLens或类似的MQTT工具(如MQTTBox)。

本教程中的屏幕截图使用MQTTLens。 其他工具可能看起来略有不同。

与MQTT对话

配置MQTT连接

要配置MQTT连接,需要传递以下连接参数(请参考下面的屏幕截图)。

  • Hostname: 对于此示例,请使用TCP和端口1883。还需要将URL传递给租户(例如mqtt.quarkioe.com)
  • Client ID: 您可以使用"Generate a random ID"按钮(大多数工具将提供这样的按钮)或自己填写。 此ID将连接到您的设备。 要重新连接到同一设备,请使用相同的ID。
  • Username: 您需要输入您的租户和用户名,用斜杠(租户/用户名)分隔。 此示例中您可以使用与登录QuarkIoE相同的用户。
  • Password: 用户的密码。
示例 MQTTLens配置

其他配置,如"clean session"对这个例子不重要。 您可以根据自己的需要更改它们。 点击"save changes"后,您将看到类似于以下的屏幕截图。

MQTTLens创建连接

如果左侧连接旁边的图标是红色,请验证您的配置(特别是用户名和密码)。 如果图标为绿色,则表示已成功建立到QuarkIoE的MQTT连接。

发送数据

本教程中的所有MQTT发布消息都将发送到主题"s/us"。 这是用于QuarkIoE的预先提供的静态模板的主题。

MQTTLens发布消息
创建设备

我们发送的第一条消息将创建设备。 虽然静态模板支持自动设备创建,在本例中我们将手动创建设备。 模板100创建新设备。 它有两个可选参数(deviceName, deviceType)。


  100,My first MQTT device,c8y_MQTTdevice
                      

之后,您可以查看设备管理,在其中找到新设备。 在设备的"身份识别"选项卡,您会注意到,会自动创建一个标识以将设备连接到到您使用的MQTT ClientId。 除了名称和类型,设备内容仍然相当空,所以再添加一些主数据。

每个发布可以使用多个由换行符分隔的静态模板(每行一个模板)。 我们现在将使用该功能在单个发布消息中设置设备的硬件信息和所需的时间间隔。 可以使用模板110设置硬件信息。它可以采用3个参数(序列号,型号,版本)。 如果不想设置静态模板中的可选参数,则可以将其留空。 对于硬件,所有参数都是可选的。 所需的时间间隔可以使用模板117设置,并且只需要一个参数(以分钟为单位的间隔)


  110,,MQTT test model,1.2.3
  117,10
                      

在设备管理中刷新设备的信息选项卡后,您应该会看到新添加的信息。

创建测量值

现在设备看起来不再那么空,我们可以开始发送一些测量值数据。 有几个测量值可以使用静态模板直接创建:

  • 210: Signal strength measurement
  • 211: Temperature measurement
  • 212: Battery measurement

温度和电池测量值只是取值和时间作为参数。 对于信号强度,您可以传递两个值( RSSI和BER)。 在QuarkIoE MQTT实现中传递时间戳始终是可选的。 如果不向服务器传递它们,将自动创建具有当前服务器时间的时间戳。 我们将在此示例中使用此功能。 此外,如果不设置最后一个参数,则不需要键入多余的逗号。


  210,-87
  211,24
  212,95
                      

除了上面的测量值,我们还可以使用模板200来创建更多的定制测量值。 它将测量值片段,序列,值,单位和时间作为参数

200,myCustomTemperatureMeasurement,fahrenheit,75.2,F
                      

刷新设备管理后,您应该在设备的"测量值"选项卡中看到4个图表。

创建报警

在下一步中,我们要为设备创建一些报警。 有4个模板来为4个报警级别创建报警:

  • 301: CRITICAL
  • 302: MAJOR
  • 303: MINOR
  • 304: WARNING

它们每个都需要一个类型(必选),一个文本和一个时间(两者都是可选的)。


  301,gpio_critical,There is a GPIO alarm
  304,simple_warning
                      

您设备的报警列表现在应包含一个严重报警和一个警告。 请注意,我们没有为警告设置任何文本,因此它是使用默认报警文本创建的。

在下一步中,我们应清除严重报警。 为了实现这一点,我们使用模板306,仅需输入应被清除的报警的类型。


  306,gpio_critical
                      

然后应清除严重报警。 请注意,您不必使用MQTT实现处理任何报警ID。 QuarkIoE将接管此部分,以简化设备通信。

创建事件

接下来,我们要为设备创建一些位置事件。 您可以使用网站获取您所在城市的纬度和经度。 模板401允许创建位置事件,并将纬度,经度,高度,精度和时间作为参数,所有参数都是可选的,现在我们将使用前两个。


  401,51.227741,6.773456
                      

在设备管理中,您现在可以在事件列表中看到一个事件,但该位置尚未更新。 这是因为在REST上,这些是不同的请求。 在MQTT中,您可以使用模板402.它的工作原理与401完全相同,但是它还会更新设备本身的位置。


  402,51.227741,6.773456
                      

现在,您应该会在设备中同时看到位置和跟踪选项卡,其中位置选项卡具有与上一个位置事件相同的经度纬度。

接收数据

到目前为止,我们只使用MQTT将数据从客户端发送到服务器。 现在我们要将数据从服务器发送到客户端 为了实现我们首先需要订阅相应的主题。 我们会做两个订阅:

  • s/ds : 订阅设备的静态操作模板
  • s/e : 订阅可用于调试的错误主题

您可以在订阅字段中依次输入这两个主题,然后点击订阅。 QoS选择对于该示例无关紧要。

之后,你的MQTTLens应该看起来像这样:

MQTTLens订阅主题
接收操作

目前,UI没有显示任何操作的选项卡,因为到目前为止设备没有声明它支持什么操作。 我们可以使用模板114设置支持的操作列表,并且只列出它后面的操作。 我们将添加对配置和shell的支持。


  114,c8y_Command,c8y_Configuration
                      

刷新UI后,应显示两个选项卡。 我们现在可以从UI创建一个shell命令,然后单击"执行"。

MQTTLens中,您现在应该已经收到了s/ds订阅的新消息

MQTTLens接收操作

511标明我们接收了哪种操作(在这种情况下是c8y_Command)。 之后,是该操作专用的设备标识符。 这是必需的,如果层次结构有多个子设备,在这种情况下,你需要知道操作对应的子设备。 最后是操作的具体参数,在c8y_Command的情况下只有命令文本。

现在我们收到了操作,我们可以先将其设置为EXECUTING,以标明客户端开始处理操作。 类似于更改报警的状态,操作也通过类型到模板实现。


  501,c8y_Command
                      

在完成处理之后,可以使用模板503将操作设置为成功。 除了操作类型,此操作还可以基于它是什么样的操作来获取附加参数。 对于c8y_Command,我们可以返回处理结果。


  503,c8y_Command,Everything went fine
                      
错误信息

主题s/e可以帮助调试出错的地方。 例如我们尝试发送


  999,I made this up
                      

我们可以在此主题看到一条消息,因为模板999是未知的


  40,999,No static template for this message id