65.9K
CodeProject 正在变化。 阅读更多。
Home

Intel® 物联网网关:使用 Python 将数据发布到 MQTT 代理

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2016 年 1 月 19 日

CPOL

16分钟阅读

viewsIcon

35466

本指南将指导您完成使用 Python 脚本将数据从 Intel® IoT 网关发布到 MQTT Broker(服务器)的步骤。

获取新的 Intel® IoT 开发人员套件,这是一套完整的硬件和软件解决方案,可让开发人员使用 Intel® Galileo 和 Intel® Edison 主板创建令人兴奋的新解决方案。请访问 Intel® 物联网开发人员中心

适用于以下 Intel® IoT 网关产品

  • 基于 Intel® Atom™ 处理器的 Intel® IoT 网关。
  • 基于 Intel® Core™ 处理器的 Intel® IoT 网关。
  • 基于 Intel® Quark™ 处理器的 Intel® IoT 网关。

本指南如何帮助您

本指南将指导您使用 Python* 脚本将数据从 Intel® IoT 网关发布到 MQTT Broker(服务器)的步骤。在开发计算机上,您将在独立的 MQTT 消息代理(服务器)上订阅一个 MQTT 消息测试主题。订阅后,发布到远程 MQTT Broker 上该主题的任何消息都将发送到开发计算机。

您将通过以下方式完成此操作:

  1. 在开发计算机上安装 Python MQTT 软件。
  2. 设置 MQTT Broker。
  3. 在您的网关上安装 Python MQTT 软件。
  4. 创建并运行一个 Python 脚本,将 MQTT 消息从网关通过 Broker 发送到开发计算机。
下图显示了网关、MQTT Broker 和开发计算机之间的连接。

什么是 MQTT?

MQTT 是一种消息传递协议,可用于将数据从网关传输到本地服务器或云服务器。服务器会将数据中继给已订阅接收数据的远程客户端。

来自 http://en.wikipedia.org/wiki/MQTT

"MQTT(以前称为 MQ Telemetry Transport)是一种基于发布/订阅模式的轻量级消息传递协议,可在 TCP/IP 协议之上使用。它专为需要小代码占用空间和/或网络带宽受限的远程连接而设计。发布/订阅消息模式需要一个消息代理。代理负责根据消息主题将消息分发给感兴趣的客户端。

有几种可用的 MQTT Broker。它们的特性集各不相同,其中一些实现了标准 MQTT 功能之外的附加功能。有关多个 Broker 的比较,请访问此处:https://github.com/mqtt/mqtt.github.io/wiki/server-support"

什么是 Mosquitto?

Mosquitto 是一个开源(BSD 许可)消息代理,实现了 MQTT 协议版本 3.1 和 3.1.1。本指南提供了在本地网络上使用 Mosquitto 设置 MQTT 消息代理的示例。有关详细信息,请参阅 http://mosquitto.org

Python 和 MQTT

Python 编程语言可用于生成 MQTT 消息。如果您觉得将 Python 代码轻松地集成到主要网关应用程序中,并且您熟悉 Python,则可以选择使用 Python。Python 有时很方便,因为它不需要编译;它在运行时在网关上进行解释。

在运行 Wind River® Linux 的 Intel® IoT 网关上默认安装了 Python 解释器,因此 Python 脚本可以直接在网关上运行。Wind River Linux 5 和 Intelligent Device Platform XT 2 包含 Python 解释器版本 2.7.2。Wind River® Linux 7 和 Intelligent Device Platform XT 3.1 包含 Python 解释器版本 2.7.3 和 3.3.3。

有关 Python 的更多信息,请参阅 https://pythonlang.cn/

什么是 Paho?

来自 http://www.eclipse.org/paho/clients/python/

"Paho Python Client 提供了一个客户端类,支持 Python 2.7 或 3.x 上的 MQTT v3.1 和 v3.1.1。它还提供了一些辅助函数,可以非常方便地将一次性消息发布到 MQTT 服务器。"

开发计算机设置

在本节中,您将设置您的开发计算机,以便在 Internet MQTT 消息代理上订阅一个 MQTT 消息测试主题。在您的开发计算机订阅主题后,发布到该主题的消息将发送到开发计算机。

要设置您的开发计算机,您将执行以下操作:

  1. 安装 Paho Python MQTT 软件。
  2. 通过订阅 Internet MQTT Broker 来测试 Paho Python MQTT 软件。

在您的开发计算机上执行本节中的步骤。

必备组件

  • 运行 Ubuntu Linux 版本 12.04 或更高版本的开发计算机。
  • 您的开发计算机可访问 Internet。
  • 您的开发计算机与 MQTT Broker 存在网络连接。
    • MQTT Broker 可以位于内部网络或 Internet 上。
    • 网络防火墙必须允许开发计算机与端口 1883、8883、8884 和 8885 之间的消息通信。

安装 Paho Python MQTT 软件

在您的开发计算机上执行以下步骤。

  1. http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.python.git/ 下载最新的 Paho MQTT tar.gz 文件。最新文件位于“Download”标题下的列表顶部。截至 2015 年 10 月 20 日,该文件名为 org.eclipse.paho.mqtt.python-1.1.tar.gz
  2. 将文件放置在您选择的目录中。
  3. 解压缩文件。例如:
    tar -xf org.eclipse.paho.mqtt.python-1.1.tar.gz
  4. 内容会解压到一个名称类似于 tar.gz 文件名的目录中。切换到该目录,如有必要,请替换目录名称。例如:
    cd org.eclipse.paho.mqtt.python-1.1
  5. 运行 Python 设置和安装命令:
    python setup.py install

软件现已安装在您的开发计算机上。

测试 Paho Python MQTT 命令

通过订阅一个活动主题来测试您的开发计算机的 Paho Python 脚本及其与 MQTT Broker 的连接。

例如,如果您使用的是 Internet Broker,则可以使用 test.mosquitto.org 测试站点通过以下方式检查网络连接和 Broker 订阅是否正常:

  1. 转到 Paho MQTT Python 示例目录
    cd org.eclipse.paho.mqtt.python/examples
  2. 修改 sub.py 脚本以更改 mqttc.connectmqttc.subscribe 行:

    mqttc.connect("test.mosquitto.org", 1883, 60)

    mqttc.subscribe("#", 0)

    在此脚本中,以下内容适用:
    • mqttc.connect
      • test.mosquitto.org:您将连接的 MQTT Broker 的名称。
      • 1883:用于 MQTT 消息的端口。
      • 60:超时(秒)。
    • mqttc.subscribe
  3. 执行脚本:
    python sub.py

    如果网络连接和 Python 脚本正常工作,则 test.mosquitto.org Broker 将发送多行数据。数据内容无关紧要。如果您未收到数据行,请仔细检查网络连接和您在脚本中编辑的行。

  4. Ctrl-C 停止脚本。

MQTT Broker 设置和订阅

上一节指导您安装和测试了 Paho Python MQTT 软件。下一步是确保您的 MQTT Broker 已设置好,并准备好接收和发送消息。要完成本指南中的示例,请为您 MQTT Broker 的位置选择以下选项之一:

  • 本地网络或 Internet(云)上的现有 Broker:您将使用网络上或 Internet(云)上的现有 Broker。此 Broker 已准备好发送和接收消息,并且您可以向此 Broker 添加主题(如果尚不存在合适的主题)。
  • 使用 Paho Python 在本地网络上新建 Broker:您将使用 Paho Python 库在您的开发计算机上建立一个 MQTT Broker。开发计算机通过本地网络连接到网关。
  • 使用 mosquitto 在本地网络上新建 Broker:您将使用 mosquitto 在您的开发计算机上建立一个 MQTT Broker。开发计算机通过本地网络连接到网关。

在本地网络上使用现有 Broker

理想情况下,您应该为您的应用程序设置了一个 MQTT 消息代理。此 Broker 应位于您期望的网络上,可配置,并已准备好为您的应用程序发送和接收消息。

如果您没有现有的 MQTT Broker,则有几种方法可以使用简单的 MQTT Broker 进行测试。这些方法将在下面介绍。本指南不涵盖服务器或网络设置。

如果您有现有的 MQTT Broker,请继续到 网关设置

使用 Internet 上的现有 MQTT Broker(使用 Paho Python)

Internet 上有几个 MQTT Broker 可用作测试 Broker。本指南使用的是 http://test.mosquitto.org 上的 Broker。

按照本节中的步骤,使用您之前安装的 Paho Python 库在 http://test.mosquitto.org 上设置一个名为 mytopic 的测试主题,用于 MQTT 消息的订阅和发布。

在您的开发计算机上执行以下步骤。

  1. 将开发计算机连接到 Internet。
  2. 打开一个新的 Linux 终端窗口。
  3. 转到 Paho 示例目录
    cd org.eclipse.paho.mqtt.python-1.1/examples
  4. 修改 sub.py 脚本以更改 mqttc.connectmqttc.subscribe 行:

    mqttc.connect("test.mosquito.org", 1883, 60)

    mqttc.subscribe("mytopic", 0)

    在此脚本中,以下内容适用:
    • mqttc.connect
      • test.mosquitto.org:Internet Broker 的 URL。
      • 1883:用于 MQTT 消息的网络端口。
      • 60:超时(秒)。
    • mqttc.subscribe
      • mytopic:您的新 MQTT 主题的名称。如果主题尚不存在,它将在 Broker 上自动建立。
      • 0:服务质量。
  5. 运行 sub.py 脚本

    python sub.py

订阅 test.mosquitto.org Broker 上的新主题 mytopic 会自动建立该主题。现在,当网关(或任何其他计算机)将 MQTT 消息发布到 test.mosquitto.org Broker 上的 mytopic 时,该消息将被发送到正在运行 sub.py 脚本的 Linux 终端。

继续到 网关设置

使用 Paho Python 在本地网络上设置 MQTT Broker

如果您的目标是使用您的开发计算机作为本地网络测试 Broker,并使用之前安装的 Paho Python 库,请使用本节中的步骤。

在您的开发计算机上执行以下步骤。

  1. 将开发计算机连接到与您的网关相同的网络。
  2. 打开一个新的 Linux 终端窗口。
  3. 转到 Paho 示例目录
    cd org.eclipse.paho.mqtt.python-1.1/examples
  4. 修改 sub.py 脚本以更改 mqttc.connectmqttc.subscribe 行:

    mqttc.connect("localhost", 1883, 60)

    mqttc.subscribe("mytopic", 0)

    在此脚本中,以下内容适用:
    • mqttc.connect
      • localhost:开发计算机本地环回 IP 地址(通常是 127.0.0.1)的别名。
      • 1883:用于 MQTT 消息的网络端口。
      • 60:超时(秒)。
    • mqttc.subscribe
      • mytopic:MQTT 主题的名称。如果主题尚不存在,它将在 Broker 上自动建立。
      • 0:服务质量。
  5. 运行 sub.py 脚本

    python sub.py

订阅本地主机上的新主题 mytopic 会自动启动本地 Broker,并为其他订阅者建立该主题。现在,当网关将 MQTT 消息发布到开发计算机 IP 地址上的 mytopic 时,该消息将被发送到正在运行 sub.py 脚本的 Linux 终端。

继续到 网关设置

使用 Mosquitto 在本地网络上设置 MQTT Broker

如果您的目标是使用您的开发计算机作为本地网络测试 Broker,并使用名为 mosquitto 的开源应用程序,请使用本节中的步骤。

注意:有关 mosquitto 的使用和语法,请参阅 http://mosquitto.org,或使用 <mosquitto_command> --help,其中 <mosquitto_command> 是您需要帮助的命令。

在开发计算机上启动 Broker 进程:

  1. 打开一个新的 Linux 终端窗口。

    Broker 将在此窗口中运行。您仍然可以在此开发计算机上接收 MQTT 消息。MQTT 消息将在不同的终端窗口中接收。

  2. 如果您尚未安装 mosquitto,请安装它。

    sudo apt-get install mosquitto

  3. 使用 mosquitto_sub 命令创建主题并订阅它。

    mosquitto_sub -d -h localhost -t mytopic

    在此脚本中,以下内容适用:
    • -d:启用调试消息。
    • -h localhost:开发计算机本地环回 IP 地址(通常是 127.0.0.1)的别名。
    • -t mytopic:MQTT 主题的名称。如果主题尚不存在,它将在 Broker 上自动建立。
  4. 检查开发计算机是否与网关连接到同一网络。

订阅本地主机上的新主题 mytopic 会自动启动本地 Broker,并为其他订阅者建立该主题。现在,当网关将 MQTT 消息发布到开发计算机 IP 地址上的 mytopic 时,该消息将被发送到正在运行 mosquitto_sub 命令的 Linux 终端。

继续到 网关设置

网关设置

要设置您的网关,您将执行以下操作:

  1. 在网关上安装 Paho Python MQTT 软件。
  2. 将您的网关连接到测试 MQTT Broker,以确认您的连接和测试脚本的功能。

必备组件

  • 本示例假定网关运行的是 Wind River® Linux 7 和 Wind River® Intelligent Device Platform XT 3.1。如果网关运行的是其他操作系统,则本章中的过程可能会有所不同。
  • 您的网关操作系统必须通过在 configure 语句中包含 --with-template=feature/mqtt 来进行创建。请参阅 https://software.intel.com/en-us/SetupGateway-hardware。
  • 如果您使用的是内部网络,则您的网关与您的 MQTT Broker 位于同一网络上。
  • 如果您使用的是 Internet 上的 MQTT Broker,则您的网关已连接到 Internet。您的 Internet 防火墙必须允许端口 1883、8883、8884 和 8885 之间的流量。

安装 Paho Python MQTT 软件

直接在您的网关上执行以下步骤。

  1. http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.python.git/ 下载最新的 Paho MQTT tar.gz 文件。最新文件位于“Download”标题下的列表顶部。截至 2015 年 10 月 20 日,该文件名为 org.eclipse.paho.mqtt.python-1.1.tar.gz
  2. 将文件放置在您选择的目录中。
  3. 解压缩文件。例如:
    tar -xf org.eclipse.paho.mqtt.python-1.1.tar.gz
  4. 内容会解压到一个名称类似于 tar.gz 文件名的目录中。切换到该目录,如有必要,请替换目录名称。例如:
    cd org.eclipse.paho.mqtt.python-1.1
  5. 运行 Python 设置和安装命令:
    python setup.py install

软件现已安装在您的网关上。

测试与 MQTT Broker 的连接(Internet Broker 示例)

通过订阅一个活动主题来测试您的网关的 Paho Python 脚本及其与 MQTT Broker 的连接。

例如,如果您使用的是 Internet Broker,则可以使用 test.mosquitto.org 测试站点通过以下方式检查网络连接和 Broker 订阅是否正常:

  1. 转到 Paho MQTT Python 示例目录
    cd org.eclipse.paho.mqtt.python/examples
  2. 修改 sub.py 脚本以更改 mqttc.connectmqttc.subscribe 行:

    mqttc.connect("test.mosquitto.org", 1883, 60)

    mqttc.subscribe("#", 0)

    在此脚本中,以下内容适用:
    • mqttc.connect
      • test.mosquitto.org:您将连接的 MQTT Broker 的名称。
      • 1883:用于 MQTT 消息的端口。
      • 60:超时(秒)。
    • mqttc.subscribe
  3. 执行脚本:
    python sub.py

    如果网络连接和 Python 脚本正常工作,则 test.mosquitto.org Broker 将发送多行数据。数据内容无关紧要。如果您未收到数据行,请仔细检查网络连接和您在脚本中编辑的行。

  4. Ctrl-C 停止脚本。

发送和接收 MQTT 消息

在配置好开发计算机和网关以进行 MQTT 通信并设置好 MQTT Broker 后,您就可以创建和运行一个 Python 脚本来发布 MQTT 消息了。

这些步骤使用 Paho Python 示例创建了一个初始脚本,您可以稍后对其进行修改以满足您的需求。直接在您的网关或开发计算机上创建 Python 脚本。如果您在开发计算机上创建脚本,请将其复制到您的网关上运行。

安全注意事项

在创建和运行 Python 脚本时,请注意以下事项:

  • 如果您使用 Python 解释器,IMA 安全性不是问题。IMA 安全性允许解释器运行新脚本。
  • 如果您不使用 Python 解释器并且启用了 IMA 安全性,则必须先对脚本进行签名,然后才能运行它。
  • 如果您的网关启用了 McAfee Embedded Control,则必须将您的脚本添加到白名单中。
注意:本指南假定您的网关未启用 IMA 或白名单。

创建并运行 Python MQTT 发布脚本

  1. 转到 Paho examples 目录

    cd org.eclipse.paho.mqtt.python-1.1/examples

  2. 复制并重命名 pub-single.py 脚本

    cp pub-single.py my-pub.py

  3. 编辑 my-pub.py 以更改最后一行,使其指向您在 开发计算机设置 中设置的 MQTT Broker 和主题。

    publish.single("mytopic", "Hello", hostname="<broker_location>")

    在此脚本中,以下内容适用:
    • "mytopic":Broker 上的主题名称。
    • "Hello":消息内容。
    • "<broker_location>":MQTT Broker 位置。如果您将开发计算机用作 MQTT Broker,则应使用开发计算机的本地网络 IP 地址。例如 192.168.1.5。如果您使用的是 Internet MQTT Broker,则可以使用 Broker 的 IP 地址或服务器名称。例如:test.mosquitto.org
  4. 如果您在开发计算机上编辑了 my-pub.py 脚本,请将其复制到您的网关。
  5. 在网关上运行 my-pub.py Python 脚本,将消息从网关发布到您的 MQTT Broker 上的 mytopic 主题。

    python my-pub.py

在开发计算机上接收 MQTT 消息

当您的网关将消息发布到 MQTT Broker 上的某个主题时,Broker 会将该消息发送给订阅了该 MQTT Broker 上该主题的所有计算机。

您刚刚在网关上执行了 python my-pub.py 命令。这导致将“Hello”消息发送到您的 MQTT Broker,然后从那里发送到您的开发计算机。现在应该在您的开发计算机上显示为:
mytopic 0 Hello
在此消息中,以下内容适用:
  • mytopic:主题名称。
  • 0:服务质量。
  • Hello:消息。

结论

恭喜!您使用 Python 编程语言,将一条 MQTT 消息(Hello)从网关,通过 MQTT Broker(localhost)上的主题(mytopic),发送到了订阅了该 MQTT 主题(mytopic)的开发计算机。

继续到 开发建议,以获取有关扩展本指南中练习的想法。

开发建议

考虑以下想法以增强您在环境中使用 MQTT 消息的功能:

  • 从您的网关传感器获取数据,并将传感器数据发布到 MQTT Broker。
  • 将消息推送到本地数据库或云数据库。
  • 增加您发送的消息的复杂度。
  • 尝试使用 Paho Python 函数通过单个命令发送多条消息。
  • 通过加密、白名单或其他方式为 MQTT 消息通信添加安全功能。
© . All rights reserved.