跳转至

使用 MQTT 连接到 WIS2

学习目标

在本次实践课程结束时,您将能够:

  • 使用 MQTT Explorer 连接到 WIS2 Global Broker
  • 查看 WIS2 的主题结构
  • 查看 WIS2 的通知消息结构

简介

WIS2 使用 MQTT 协议来发布天气/气候/水文数据的可用性。WIS2 Global Broker 订阅网络中所有 WIS2 Nodes 的消息,并重新发布收到的消息。Global Cache 订阅 Global Broker,下载消息中的数据,然后在 cache 主题上重新发布消息,并附上一个新的 URL。Global Discovery Catalogue 从 Broker 发布发现元数据,并提供搜索 API。

以下是一个 WIS2 通知消息的结构示例,该消息接收到的主题为 origin/a/wis2/br-inmet/data/core/weather/surface-based-observations/synop

{
  "id": "59f9b013-c4b3-410a-a52d-fff18f3f1b47",
  "type": "Feature",
  "version": "v04",
  "geometry": {
    "coordinates": [
      -38.69389,
      -17.96472,
      60
    ],
    "type": "Point"
  },
  "properties": {
    "data_id": "br-inmet/data/core/weather/surface-based-observations/synop/WIGOS_0-76-2-2900801000W83499_20240815T060000",
    "datetime": "2024-08-15T06:00:00Z",
    "pubtime": "2024-08-15T09:52:02Z",
    "integrity": {
      "method": "sha512",
      "value": "TBuWycx/G0lIiTo47eFPBViGutxcIyk7eikppAKPc4aHgOmTIS5Wb9+0v3awMOyCgwpFhTruRRCVReMQMp5kYw=="
    },
    "content": {
      "encoding": "base64",
      "value": "QlVGUgAA+gQAABYAACsAAAAAAAIAHAAH6AgPBgAAAAALAAABgMGWx1AAAM0ABOIAAAODM0OTkAAAAAAAAAAAAAAKb5oKEpJ6YkJ6mAAAAAAAAAAAAAAAAv0QeYA29WQa87ZhH4CQP//z+P//BD////+ASznXuUb///8MgAS3/////8X///e+AP////AB/+R/yf////////////////////6/1/79H/3///gEt////////4BLP6QAf/+/pAB//4H0YJ/YeAh/f2///7TH/////9+j//f///////////////////v0f//////////////////////wNzc3Nw==",
      "size": 250
    },
    "wigos_station_identifier": "0-76-2-2900801000W83499"
  },
  "links": [
    {
      "rel": "canonical",
      "type": "application/bufr",
      "href": "http://wis2bra.inmet.gov.br/data/2024-08-15/wis/br-inmet/data/core/weather/surface-based-observations/synop/WIGOS_0-76-2-2900801000W83499_20240815T060000.bufr4",
      "length": 250
    }
  ]
}

在本次实践课程中,您将学习如何使用 MQTT Explorer 工具设置 MQTT 客户端连接到 WIS2 Global Broker,并能够显示 WIS2 通知消息。

MQTT Explorer 是一个非常有用的工具,可以浏览和查看给定 MQTT Broker 的主题结构以及正在发布的数据。

关于 MQTT

MQTT Explorer 提供了一个用户友好的界面,用于连接到 MQTT Broker 并探索 WIS2 使用的主题和消息结构。

实际上,MQTT 主要用于机器与机器之间的通信,其中应用程序或服务订阅主题并以编程方式实时处理消息。

如果需要以编程方式使用 MQTT(例如在 Python 中),可以使用诸如 paho-mqtt 的 MQTT 客户端库连接到 MQTT Broker 并处理接收到的消息。根据您的需求和技术环境,还存在许多 MQTT 客户端和服务器软件。

使用 MQTT Explorer 连接到 Global Broker

要查看 WIS2 Global Broker 发布的消息,您可以使用 "MQTT Explorer",该工具可从 MQTT Explorer 网站 下载。

打开 MQTT Explorer,并使用以下信息添加一个新的连接到由 MeteoFrance 托管的 Global Broker:

  • host: globalbroker.meteo.fr
  • port: 8883
  • username: everyone
  • password: everyone

mqtt-explorer-global-broker-connection

点击 'ADVANCED' 按钮,移除预配置的主题,并添加以下订阅主题:

  • origin/a/wis2/#

mqtt-explorer-global-broker-advanced

Note

设置 MQTT 订阅时,您可以使用以下通配符:

  • 单层通配符 (+):单层通配符替代一个主题层级
  • 多层通配符 (#):多层通配符替代多个主题层级

在本例中,origin/a/wis2/# 将订阅 origin/a/wis2 主题下的所有内容。

点击 'BACK',然后点击 'SAVE' 保存您的连接和订阅信息。接着点击 'CONNECT':

消息应该会开始出现在您的 MQTT Explorer 会话中,如下所示:

mqtt-explorer-global-broker-topics

现在,您可以开始探索 WIS2 的主题和消息结构。

练习 1:查看 WIS2 的主题结构

使用 MQTT 浏览 origin 主题下的主题结构。

Question

我们如何区分发布数据的 WIS 中心?

点击查看答案

您可以点击 MQTT Explorer 左侧窗口展开主题结构。

我们可以通过查看主题结构的第四层来区分发布数据的 WIS 中心。例如,以下主题:

origin/a/wis2/br-inmet/data/core/weather/surface-based-observations/synop

告诉我们数据是由中心 ID 为 br-inmet 的 WIS 中心发布的,该中心 ID 对应于巴西国家气象研究所(Instituto Nacional de Meteorologia - INMET)。

Question

我们如何区分由托管 GTS-to-WIS2 网关的 WIS 中心发布的消息和由托管 WIS2 Node 的 WIS 中心发布的消息?

点击查看答案

我们可以通过查看主题结构中的中心 ID 来区分来自 GTS-to-WIS2 网关的消息。例如,以下主题:

origin/a/wis2/de-dwd-gts-to-wis2/data/core/I/S/A/I/01/sbbr

告诉我们数据是由德国气象局(Deutscher Wetterdienst, DWD)托管的 GTS-to-WIS2 网关发布的。GTS-to-WIS2 网关是一种特殊类型的数据发布者,它将来自全球电信系统(GTS)的数据发布到 WIS2。其主题结构由 GTS 消息的 TTAAii CCCC 标头组成。

练习 2:查看 WIS2 的消息结构

断开 MQTT Explorer 的连接,并更新 'Advanced' 部分,将订阅更改为以下内容:

  • origin/a/wis2/+/data/core/weather/surface-based-observations/synop
  • cache/a/wis2/+/data/core/weather/surface-based-observations/synop

mqtt-explorer-global-broker-topics-exercise2

Note

+ 通配符用于订阅所有 WIS 中心。

重新连接到 Global Broker 并等待消息出现。

您可以在右侧的 "Value" 部分查看 WIS2 消息的内容。尝试展开主题结构,查看消息的不同层级,直到到达最后一层,并查看其中一条消息的内容。

Question

我们如何识别数据发布的时间戳?我们又如何识别数据采集的时间戳?

点击查看答案

数据发布的时间戳包含在消息的 properties 部分,键为 pubtime

数据采集的时间戳包含在消息的 properties 部分,键为 datetime

mqtt-explorer-global-broker-msg-properties

Question

我们如何从消息中提供的 URL 下载数据?

点击查看答案

URL 包含在 links 部分,rel="canonical",由键 href 定义。

您可以复制该 URL 并粘贴到浏览器中下载数据。

练习 3:查看 'origin' 和 'cache' 主题的差异

确保您仍然使用练习 2 中描述的 origin/a/wis2/+/data/core/weather/surface-based-observations/synopcache/a/wis2/+/data/core/weather/surface-based-observations/synop 主题订阅连接到 Global Broker。

尝试识别同一中心 ID 在 origincache 主题上发布的消息。

Question

发布在 origincache 主题上的消息有什么区别?

点击查看答案

发布在 origin 主题上的消息是 Global Broker 从网络中的 WIS2 Nodes 重新发布的原始消息。

发布在 cache 主题上的消息是 Global Cache 下载数据后重新发布的消息。如果您检查以 cache 开头的主题中的消息内容,您会发现 'canonical' 链接已更新为一个新的 URL。

WIS2 网络中有多个 Global Cache,因此您会收到来自每个下载了该消息的 Global Cache 的消息。

Global Cache 仅下载并重新发布发布在 ../data/core/... 主题层级的消息。

总结

恭喜!

在本次实践课程中,您学习了:

  • 如何使用 MQTT Explorer 订阅 WIS2 Global Broker 服务
  • WIS2 的主题结构
  • WIS2 的通知消息结构
  • 核心数据和推荐数据的区别
  • GTS-to-WIS2 网关使用的主题结构
  • Global Broker 在 origincache 主题上发布的消息的区别