当前位置:   article > 正文

PyThon 编程(MQTT )_python mqtt模块

python mqtt模块

        MQTT 是一种信息交换系统,由信息交换软件和客户端构成,采用了发布/定阅的通信方法,在物联网和远程遥控遥测中应用广泛。

 本博文介绍如何使用Python 编写MQTT 客户端软件,以及在工业领域的应用。

MQTT Broker

有许多MQTT Broker 的实现。这里采用Eclips mosquitto。它是一个轻量级开源的MQTT Broker。

下载

https://mosquitto.org/download/

这里选择windows

mosquitto-2.0.15-install-windows-x64.exe (64-bit build, Windows Vista and up, built with Visual Studio Community 2019)

下载完成后 运行解压到某一个目录中

运行

在该目录直接 输入 mosquitto 运行

测试

在安装目录中自带两个应用程序

mosquitto_sub

mosquitto_pub

打开一个windows Power Shell,运行mosquitto_sub

输入

PS E:\yao2023\mosquitto> ./mosquitto_sub -t 'test/topic'

打开另一个Windows Power Shell 运行另一个 mosquitto_pub

PS E:\yao2023\mosquitto> ./mosquitto_pub -t 'test/topic'  -m hello

这是在运行mosquitto_sub 的窗口输出一个hello

Python MQTT 客户端

安装paho-mqtt 模块。

pip install paho-mqtt

python 客户端程序

发布

  1. import paho.mqtt.client as mqtt
  2. import time
  3. HOST = "localhost"
  4. PORT = 1883
  5. if __name__ == '__main__':
  6. client = mqtt.Client()
  7. client.loop_start()
  8. client.connect(HOST, PORT, 60)
  9. while True:
  10. client.publish("test/topic","hello liefyuan",2)
  11. time.sleep(2)

订阅/发布

这是一个echo 程序

  1. import paho.mqtt.client as mqtt
  2. import time
  3. HOST = "localhost"
  4. PORT = 1883
  5. def on_message(client,userdata,msg):
  6. #print("Message")
  7. print(msg.topic+" "+msg.payload.decode())
  8. if __name__ == '__main__':
  9. client = mqtt.Client()
  10. client.connect(HOST, PORT, 60)
  11. client.subscribe("test/topic",0)
  12. client.on_message=on_message
  13. client.loop_start()
  14. while True:
  15. client.publish("test/topic","hello topic",2)
  16. time.sleep(2)

注意:client.loop_start()一定要放置所有设置完成,While True 之前。

MQTT 在基于开放自动化领域的应用

         MQTT 最大的优点是简单。相比工业领域的协议而言,它的缺点是仅仅是一种通信协议,没有语义模型。所有,同样采用MQTT 协议,两个设备并不一定互联互通。因此要进一步对Topic和payload 指定规范。

这里我们以IEC61499 功能块的连接为例,讨论MQTT 协议的应用

Topic 的格式

以路径Path 作为topic,例如:

Device_Name/FB_Name/InputEvents/inputEvent_Name

Device_Name/FB_Name/OutputEvents/OutputEvent_Name

Payload的格式

可以设置为JSON格式,例如

{Method:“Read”,Value=12.5}

订阅方式的使用

功能块的输入事件采取订阅方式

Client.subscribe("inputEvents/#")

所有的OutputEvents采取publish 方式。

上述方式同样适用于单功能块应用。

在OPCUA 应用程序中的应用

        在OPCUA 规范中,提出了pub/sub 的方式。它实现了两个Server 之间通过pub/sub协议实现信息交换。

        2018年初,OPC UA标准的第14部分(又名“发布-订阅”或“PubSub”)发布,有助于鼓励OPC UA与MQTT等通信协议之间的进一步交互。根据OPC基金会的说法,“PubSub通过利用MQTT(消息队列遥测传输)和AMQP(高级消息队列协议)等流行的数据传输,可以直接通过互联网使用OPC UA,同时保留其关键的OPC UA端到端安全性和标准化数据建模优势”。

        但是令人遗憾的是,python-opcua 并不支持sub/pub 机制,open62541 是支持基于MQTT sub/pub 机制的。在具体的应用中,我们也可以自己编写MQTT sub/pub 交换OPCUA 信息模型的数据。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/485806
推荐阅读
相关标签
  

闽ICP备14008679号