何时以及为何使用 MQTT 协议?

物联网 MQTT 协议 数据传输 https
2021-05-30 22:17:15

我正在开发一种测量温度、湿度和质量的设备。目前它使用 HTTPS 将数据上传到远程服务器。现在我知道有一个叫MQTT的协议,号称是“物联网协议”。

在什么情况下以及为什么我应该从 HTTPS 切换到 MQTT?

4个回答

MQTT 是设备之间的“信使”:

  • 您的设备在时间 T 测量 X 度的温度
  • 它连接(本身或通过 zwave 集线器)到 MQTT 代理
  • 它创建一个带有主题的消息 /domotics/myplace/mydevice/temperature
  • 在它刚刚放置的消息中X(作为“有效负载”)

在你家的其他地方:

  • 您的 Raspberry Pi 已连接到 MQTT 代理(它可以是 MQTT 实例本身)
  • 它订阅主题/domotics/+/+/temperature以从使用此主题格式的所有设备接收所有温度信息。有关MQTT 主题通配符()的更多信息,请参阅MQTT 规范+#
  • 它会收到一条带有有效载荷的消息,X然后做任何想做的事!

在你家的其他地方:

  • 您的计算机已连接到 MQTT 代理并订阅该主题/domotics/myplace/mydevice/#以从您的设备获取所有信息并记录下来
  • 它会收到一条带有有效载荷的消息,X然后做任何想做的事!

MQTT 对于避免在服务器周围放置 Web 服务和套接字非常有用。Node-RED 使用 MQTT 并且可以配置 Domoticz 来获取in和设置out信号。

我个人在家中使用 MQTT 来关闭计算机:/house/computers/mycomputer有效载荷:0

称为MQTT 的MQ 遥测传输协议专为在低功耗和低带宽下运行的设备而设计。它是一种轻量级发布/订阅消息传递协议,这意味着任何其他设备都可以订阅特定主题。

HTTP/HTTPS被设计为客户端-服务器计算的请求-响应协议,它从不关心电源使用情况并且具有大量数据开销。

在以下情况下使用 MQTT:

  • 您正在使用的设备在电池上运行,您不想每 x 天更换一次(MQTT 针对电池使用进行了优化,而 HTTP/S 则不是)
  • 需要更快的响应
  • 需要有发布/订阅机制(如果你想向多个客户端推送消息)
  • 需要以不同级别的 QoS 可靠地发送数据

MQTT 是否提供与 HTTPS 一样多的安全性?

MQTT 依赖 TCP 作为传输协议,这意味着默认情况下连接不使用加密通信。为了加密整个 MQTT 通信,大多数 MQTT 代理(如 HiveMQ)允许使用 TLS 而不是普通 TCP。

参考:HiveMQ

MQTT(消息队列遥测传输)似乎非常适合建议的应用程序。

它在带宽(最小的数据包大小,只有 2 个字节的标头)和客户端代码占用空间(使其能够在像 ESP8266 这样的瘦客户端上运行,典型的 IoT 客户端)方面都是轻量级的。减少传输的数据有利于延长离网电池供电客户端(如传感器)的电池寿命。

MQTT 还提供了非常适合 IoT 任务的简单方法(动词),例如在客户端意外断开连接后恢复连接的持久订阅。与 HTTP/HTTPS 相比,从包中提取数据也更简单(不需要解析器)。

在这里,我写了一篇文章,展示了我们项目中通信系统的发展和演变。它是关于微服务的,但您可以将任何传感器视为微服务,其工作是收集和发布任何类型的遥测数据。

所以最重要的结论是,当您只需要将事件发送到某个地方而您对接收者一无所知时,最好使用 MQTT。当您对接收者有所了解并需要一些响应时,最好使用 HTTP(通常是 REST)——例如,在任何命令的情况下。

从流量、CPU、内存和能耗来看MQTT和HTTP基本一致。