Python模拟MQTT v3.1.1服务器

这篇具有很好参考价值的文章主要介绍了Python模拟MQTT v3.1.1服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

示例代码

import logging
import asyncio
from hbmqtt.broker import Broker

# 设置日志级别为DEBUG
logging.basicConfig(level=logging.DEBUG)

# 创建MQTT服务器
broker = Broker()

# 启动MQTT服务器
async def start_broker():
    await broker.start()

# 停止MQTT服务器
async def stop_broker():
    await broker.stop()

# 主函数
async def main():
    # 启动MQTT服务器
    await start_broker()

    try:
        # 保持主程序运行
        while True:
            await asyncio.sleep(1)
    except KeyboardInterrupt:
        # 捕捉键盘中断信号
        pass

    # 停止MQTT服务器
    await stop_broker()

# 运行主程序
if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

运行结果

"D:\Program Files (x86)\Python
310\python.exe" E:/文档/Projects/Pycharm/forklift/MQTT_SERVER.py
Traceback (most recent call last):
  File "E:\文档\Projects\Pycharm\forklift\MQTT_SERVER.py", line 10, in <module>
    from hbmqtt.broker import Broker
  File "D:\Program Files (x86)\Python310\lib\site-packages\hbmqtt\broker.py", line 15, in <module>
    from hbmqtt.session import Session
  File "D:\Program Files (x86)\Python310\lib\site-packages\hbmqtt\session.py", line 8, in <module>
    from hbmqtt.mqtt.publish import PublishPacket
  File "D:\Program Files (x86)\Python310\lib\site-packages\hbmqtt\mqtt\__init__.py", line 5, in <module>
    from hbmqtt.mqtt.packet import (
  File "D:\Program Files (x86)\Python310\lib\site-packages\hbmqtt\mqtt\packet.py", line 8, in <module>
    from hbmqtt.adapters import ReaderAdapter, WriterAdapter
  File "D:\Program Files (x86)\Python310\lib\site-packages\hbmqtt\adapters.py", line 6, in <module>
    from websockets.protocol import WebSocketCommonProtocol
ImportError: cannot import name 'WebSocketCommonProtocol' from 'websockets.protocol' (D:\Program Files (x86)\Python310\lib\site-packages\websockets\protocol.py)

Process finished with exit code 1

cannot import name ‘WebSocketCommonProtocol’ from ‘websockets.protocol’

解决办法:
降低websockets版本

pip install websockets==8.1

Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
新报错:

"D:\Program Files (x86)\Python385\python3.exe" E:/文档/Projects/Pycharm/forklift/MQTT_SERVER.py
Traceback (most recent call last):
  File "D:\Program Files (x86)\Python385\lib\site-packages\hbmqtt\broker.py", line 185, in _build_listeners_config
    listeners_config = broker_config['listeners']
KeyError: 'listeners'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "E:/文档/Projects/Pycharm/forklift/MQTT_SERVER.py", line 17, in <module>
    broker = Broker()
  File "D:\Program Files (x86)\Python385\lib\site-packages\hbmqtt\broker.py", line 157, in __init__
    self._build_listeners_config(self.config)
  File "D:\Program Files (x86)\Python385\lib\site-packages\hbmqtt\broker.py", line 192, in _build_listeners_config
    raise BrokerException("Listener config not found invalid: %s" % ke)
hbmqtt.broker.BrokerException: Listener config not found invalid: 'listeners'

Process finished with exit code 1

解决办法
根据错误信息,看起来问题出在您的MQTT服务器配置中缺少了"listeners"配置项。您可以在实例化Broker对象时,提供一个有效的配置,包括"listeners"配置项。

config = {
    "listeners": {
        "default": {
            "type": "tcp",
            "bind": "localhost:1883",  # 监听本地1883端口
            "max_connections": 10  # 最大连接数
        }
    },
    "sys_interval": 10,
    "topic-check": {
        "enabled": False
    }
}

broker = Broker(config)

Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java参考:《mqtt 客户端和服务端搭建及基本使用详解》

下载客户端
Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
打开客户端,新建连接
Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
Github教程

创建教程

本地MQTT服务器

import os
import subprocess

# 启动Mosquitto MQTT服务器
def start_mosquitto_server():
    command = "mosquitto"
    process = subprocess.Popen(command, shell=True)
    process.wait()

# 停止Mosquitto MQTT服务器
def stop_mosquitto_server():
    command = "pkill mosquitto"
    os.system(command)

# 主函数
def main():
    try:
        # 启动MQTT服务器
        start_mosquitto_server()

        # 保持主程序运行
        while True:
            pass
    except KeyboardInterrupt:
        # 捕捉键盘中断信号
        pass

        # 停止MQTT服务器
        stop_mosquitto_server()

# 运行主程序
if __name__ == "__main__":
    main()

Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
系统找不到mosquitto命令,这可能是因为没有安装或正确配置Mosquitto MQTT服务器软件。

要解决这个问题,需要确保已经正确安装了Mosquitto MQTT服务器软件,并将其路径配置到系统的环境变量中。

安装Mosquitto MQTT服务器软件:

从Mosquitto官方网站(https://mosquitto.org/)下载并安装适合你操作系统的Mosquitto MQTT服务器软件。

配置系统环境变量:
将Mosquitto MQTT服务器软件的安装路径添加到系统的环境变量中,这样系统就能够找到mosquitto命令。

按照以下步骤进行配置:

打开系统的“高级系统设置”
在“系统变量”部分,找到名为“Path”的变量,选中它并点击“编辑”按钮
在编辑窗口中,点击“新建”按钮,并将Mosquitto MQTT服务器软件的安装路径添加进去
确认所有对话框并保存更改

重新运行代码:在完成以上步骤后,关闭并重新打开命令行窗口,然后再次运行你的代码,系统应该能够找到并启动mosquitto命令。
Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,javaPython模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
重启电脑后,依然读取不到mosquitto:

"D:\Program Files (x86)\Python310\python310.exe" E:/文档/Projects/Pycharm/forklift/MQTT_SERVER_0629_01.py
'mosquitto' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
在任务栏看到了该服务,说明服务已经启动,通过客户端模拟,成功发送了数据
Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java

import paho.mqtt.client as mqtt

# 定义回调函数,用于处理接收到的消息
def on_message(client, userdata, msg):
    print("Received message:", msg.topic, msg.payload.decode())

# 创建MQTT客户端实例
client = mqtt.Client()

# 配置MQTT服务器地址和端口
broker_address = "mqtt://localhost:1883"
client.connect(broker_address)

# 设置订阅回调函数
client.on_message = on_message

# 订阅主题
topic = "0629tt"
client.subscribe(topic)

try:
    # 启动MQTT客户端循环
    client.loop_forever()
except KeyboardInterrupt:
    # 捕捉键盘中断信号
    pass

# 停止MQTT客户端循环和断开连接
client.loop_stop()
client.disconnect()

Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java

pip install paho-mqtt

Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java

"D:\Program Files (x86)\Python310\python310.exe" E:/文档/Projects/Pycharm/forklift/MQTT_SERVER_0629_01.py
Traceback (most recent call last):
  File "E:\文档\Projects\Pycharm\forklift\MQTT_SERVER_0629_01.py", line 19, in <module>
    client.connect(broker_address)
  File "D:\Program Files (x86)\Python310\lib\site-packages\paho\mqtt\client.py", line 914, in connect
    return self.reconnect()
  File "D:\Program Files (x86)\Python310\lib\site-packages\paho\mqtt\client.py", line 1044, in reconnect
    sock = self._create_socket_connection()
  File "D:\Program Files (x86)\Python310\lib\site-packages\paho\mqtt\client.py", line 3685, in _create_socket_connection
    return socket.create_connection(addr, timeout=self._connect_timeout, source_address=source)
  File "D:\Program Files (x86)\Python310\lib\socket.py", line 824, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
  File "D:\Program Files (x86)\Python310\lib\socket.py", line 955, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11001] getaddrinfo failed

Process finished with exit code 1

解决办法

# 配置MQTT服务器地址和端口
broker_address = "mqtt://localhost:1883"
client.connect(broker_address)

修改为:

# 配置MQTT服务器地址和端口
broker_address = "mqtt://127.0.0.1:1883"
client.connect(broker_address)

依然无法访问
Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
Try Except 打印出错误
Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
参考文章

C:\Windows\System32\drivers\etc

Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
在使用 paho-mqtt 库时,broker_address 的格式应该是 host:port,而不是使用 mqtt:// 协议前缀。
修改代码中的 broker_address 如下:

broker_address = 'localhost'  # MQTT 服务器的主机名或 IP 地址
port = 1883  # MQTT 服务器的端口号
try:
    client.connect(broker_address, port=port)
except Exception as e:
    print("connect error:", e)

Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java
源码:

import paho.mqtt.client as mqtt

# 定义回调函数,用于处理接收到的消息
def on_message(client, userdata, msg):
    print("Received message:", msg.topic, msg.payload.decode())

# 创建MQTT客户端实例
client = mqtt.Client()

# 配置MQTT服务器地址和端口
broker_address = 'localhost'  # MQTT 服务器的主机名或 IP 地址
port = 1883  # MQTT 服务器的端口号
try:
    client.connect(broker_address, port=port)
except Exception as e:
    print("connect error:", e)

# 设置订阅回调函数
client.on_message = on_message

# 订阅主题
topic = "0629tt"
client.subscribe(topic)

try:
    # 启动MQTT客户端循环
    client.loop_forever()
except KeyboardInterrupt:
    # 捕捉键盘中断信号
    pass

# 停止MQTT客户端循环和断开连接
client.loop_stop()
client.disconnect()

其他参考代码
打开 Mosquitto 的配置文件。在 Windows 系统上,
配置文件通常位于 Mosquitto 安装目录的 \mosquitto\mosquitto.conf 或 \mosquitto\mosquitto.conf 文件中。

找到 listener 部分的配置。如果找不到该部分,请在文件的末尾添加以下内容:

listener 1883
bind_address 192.168.183.176

参考链接:《Mosquitto 安装指南》
Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java

C:\Program Files\mosquitto> mosquitto.exe -c mosquitto.conf -v

Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java

listener 1883
allow_anonymous true

通讯测试结果:

success!!

Python模拟MQTT v3.1.1服务器,Python学习私人笔记,物联网,python,服务器,java文章来源地址https://www.toymoban.com/news/detail-555149.html

订阅全部消息

可以将主题设置为通配符 #。通配符 # 表示匹配主题层级中的任意层级。

import paho.mqtt.client as mqtt

# 定义回调函数,用于处理接收到的消息
def on_message(client, userdata, msg):
    print("Received message:", msg.topic, msg.payload.decode())

# 创建MQTT客户端实例
client = mqtt.Client()

# 配置MQTT服务器地址和端口
broker_address = 'localhost'  # MQTT 服务器的主机名或 IP 地址
port = 1883  # MQTT 服务器的端口号
try:
    client.connect(broker_address, port=port)
except Exception as e:
    print("connect error:", e)

# 设置订阅回调函数
client.on_message = on_message

# 订阅所有主题
topic = "#"
client.subscribe(topic)

try:
    # 启动MQTT客户端循环
    client.loop_forever()
except KeyboardInterrupt:
    # 捕捉键盘中断信号
    pass

# 停止MQTT客户端循环和断开连接
client.loop_stop()
client.disconnect()



到了这里,关于Python模拟MQTT v3.1.1服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MQTT服务器】宝塔服务器安装EMQX

    本文介绍一种简单的服务器安装EMQX方法。         进入软件商店搜索docker,安装         拉取完成在容器列表可查看emqx状态 emqx的web管理地址:http://服务器公网IP:18083 账号:admin 密码:public 其他端口:如果发现某个端口访问不了,尝试去宝塔面板的安全位置去放行一

    2024年02月03日
    浏览(113)
  • MQTT通信架构 搭建MQTT服务器

    MQ 遥测传输 (MQTT) 是 基于代理 的 发布/订阅 的消息传输协议。 传输屏蔽消息内容 TCP/IP有连接传输(可靠) 小型传输,开销很小,降低网络流量 使用lastwill等机制告知客户端异常中断(本次实验用不到) 三种消息发布服务质量 至多一次:消息发布完全依赖底层TCP/IP网络,会

    2024年02月02日
    浏览(47)
  • 自己搭建mqtt服务器

            前言:网上资料大部分都是使用的云服务,我是采用自己搭建的服务器来进行试验的,接下来将记录过程。 云服务器有很多种网上也有很多教学在这里不进行过多的解释了,我实验的时候采用的阿里云国内的服务器这里以后还会进行介绍。         本实验主要

    2024年02月03日
    浏览(49)
  • Linux服务器snmp协议v2/v3配置方法

    1、确保本机已经安装了snmp服务 [root@idc ~]# rpm -qa |grep snmp net-snmp-libs-5.1.2-11.EL4.7 net-snmp-5.1.2-11.EL4.7 如果没有,可以使用: “yum install net-snmp” 使其自动上网下载安装。如果机器无法上网,最好使用光盘rpm包安装,一般需要安装三个文件: vi /etc/snmp/snmpd.conf net-snmp lm_sensors_libs

    2024年02月05日
    浏览(35)
  • Flask框架小程序后端分离开发学习笔记《4》向服务器端发送模拟请求-爬虫

    Flask是使用python的后端,由于小程序需要后端开发,遂学习一下后端开发。 下面代码,是一个比较老的版本了,可以借鉴一下。 最后尝试请求豆瓣的网页,并未得到,我怀疑是有反爬手段,我们的请求数据还有很多东西没加进去,所以看起来不像是浏览器发送的请求,后续会

    2024年01月20日
    浏览(45)
  • MQTT:windows环境下配置MQTT服务器(mosquitto)

    目录 1.下载 mosquitto 2.安装 mosquitto  3.配置 mosquitto  4.测试 mosquitto         登录网址:         http://mosquitto.org/files/binary/         这里是window环境,选择win32/,下载mosquitto安装包。          双击安装 - 点击Next - 点击Next - 选择安装路径 - 点击install - 点击Finish。

    2024年02月11日
    浏览(37)
  • Unity实现MQTT服务器

    首先下载MqttNet:MqttNet4.1.2.350 解压好后使用vs打开,并生成.dll文件(我这里下载的是4.1.2.350版本) 请注意最好下载4.1.2.350版本的,否则其他版本生成的Dll可能与我所用版本存在差异,导致我下面的代码出现错误,若链接失效,可自行百度MqttNet,选择 点击进入后找到图中圈出

    2024年02月06日
    浏览(34)
  • Android+MQTT(Android APP 连接至MQTT服务器)

    这段时间因为毕设的需求,接触学习了一下用Android app连接MQTT服务器,然后对下位机(STM32/ESP8266)进行数据通讯的一个小设计,本篇文章介绍app+MQTT服务器这一段。 实现原理: 这里设计的是一个监测控制智能风扇的APP,可以实时监测当前温度、湿度及下位机的传感器、控制

    2024年02月02日
    浏览(45)
  • 本地MQTT服务器搭建(EMQX)

    下载地址:EMQ (emqx.com) 打开官网后,选择右边的免费试用按钮 然后单击EMQX Enterprise标签,然后选择下面的EMQX开源版,选择开源版的系统平台为Windows,单击免费下载。 在新页面下单击立即下载 将下载的emqx-5.1.6-windows-amd64.zip解压出来,解压目录不能存在中文、空格、特殊字符

    2024年02月09日
    浏览(38)
  • Windows下搭建MQTT服务器

    MQ遥测传输(MQTT)是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于低带宽受限环境。 特点包括以下: 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。 对负载内容屏蔽的消息传输。 使用

    2024年02月03日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包