python paho mqtt无法使用用户名和密码连接到mqtts

2023-12-13

我的 raspberrypi 上的以下 python 代码无法连接到我的 mqtt 代理,它只是在打印后挂起Connecting...:

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("test")


def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))


client = mqtt.Client(client_id="",clean_session=True,userdata=None,protocol=mqtt.MQTTv311,transport="tcp")
client.on_connect = on_connect
client.on_message = on_message

client.username_pw_set(username="stackoverflow",password="stackoverflow")
print("Connecting...")
client.connect("learn.evermight.net", 9101, 10)
client.loop_forever()

我的 Python 代码做错了什么?


命令行成功

我确认我的 mqtt 确实有效,因为我可以使用以下命令从终端订阅:

mosquitto_sub -h learn.evermight.net -p 9101 -t "test" -u "stackoverflow" -P "stackoverflow" --capath /etc/ssl/certs/

当我从另一个终端运行此命令时,我将在终端中看到消息

mosquitto_pub -h learn.evermight.net -p 9101 -t "test" -u "stackoverflow" -P "stackoverflow" -m "hello world" --capath /etc/ssl/certs/

我的 python 代码有什么问题?


NodeJS 成功

此外,以下 NodeJS 代码也适用于连接和发布到我的 MQTT 服务器。

const mqtt = require('async-mqtt');

  try{
    const client = await mqtt.connectAsync("mqtts://learn.evermight.net",{
      port:9101,
      host:"mqtts://learn.evermight.net",
      username:"stackoverflow",
      password:"stackoverflow",
      connectTimeout:5000,
      protocolId:"MQIsdp",
      protocolVersion:3,
      encoding:"utf8",
      keepalive: 60
    });
    await client.publish("test","hello world");
    await client.end();
  } catch(e) {
    console.log(e);
  }

网站 JavaScript 成功

下面的代码也可以通过网络浏览器的javascript网站连接到websocket端口,订阅test主题并接收发布的消息(请注意,我的 websocket 使用端口 9102)

import Paho from "paho-mqtt";

const client = new Paho.Client("learn.evermight.net",9102,"WebBrowser");
  client.onConnectionLost = response=>console.log("lostMQTTConnection: " +(response.errorCode !== 0 ? response.errorMessage : "Unknown MQTT Error" ));
  client.onMessageArrived = message=>console.log(message.payloadString);
  client.connect({
    onSuccess:_=>client.subscribe("test"),
    useSSL:true,
    userName:"stackoverflow",
    password:"stackoverflow",
  });

我发现如果我添加这个不带参数的命令就可以连接

client.tls_set()

In 泛美卫生组织文件在描述的末尾tls_set()你可以看到

Must be called before connect*().

但即使在之后它对我也有用client.connect()


在同一个说明中,您可以看到没有参数它使用默认系统设置

By default, on Python 2.7.9+ or 3.4+,  
the default certification authority of the system is used. 

On older Python version this parameter is mandatory.

仅当以下情况时才需要mosquitto_sub/mosquitto_pub needs --capath /etc/ssl/certs/.
If mosquitto_sub/mosquitto_pub没有工作--capath /etc/ssl/certs/那么就不要使用它。


import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected with result code", rc)
    client.subscribe("test")

def on_message(client, userdata, msg):
    print(msg.topic, msg.payload)


client = mqtt.Client(client_id="", clean_session=True, userdata=None, protocol=mqtt.MQTTv311, transport="tcp")
client.on_connect = on_connect
client.on_message = on_message

client.tls_set()  # <--- even without arguments

client.username_pw_set(username="stackoverflow", password="stackoverflow")
print("Connecting...")
client.connect("learn.evermight.net", 9101, 10)
client.loop_forever()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python paho mqtt无法使用用户名和密码连接到mqtts 的相关文章

随机推荐

  • Chrome Devtools 工作区映射不再起作用

    这曾经很有魅力 我过去已经使用相同的硬件 软件设置了十几次 但现在失败了 编辑所需的权限已到位 因为我可以在 Devtools 中编辑文件 如果我直接从源选项卡中的本地工作区打开它 编辑并保存它 但这当然并不比使用任何其他 IDE 更好 因
  • Javascript - 等待图像加载

    var l false var l2 false var imm new Image imm src b png imm onload function l true var imm2 new Image imm2 src c png im
  • jquery中如何获取HiddenFor控件的值

    我有一个隐藏的控制 Html HiddenFor m gt m SchedulingProfileDetails Id 我试图访问 jquery 中这个隐藏字段中的值 然后尝试将该值传递给控制器 var id SchedulingProfi
  • 为什么我在 Perl 中出现“在 ... 处的 printf 中缺少参数”?

    我有 Perl 代码 正在打印到文件 我给出格式 my format 4d 2d 2d 2d 2d 2d 7 2f x 9 n 因为我写的是年月日时分秒和 9 个浮点值 然后我将输出文件写入为 printf format data prin
  • 谁能帮我查一下我的体重指数计算器吗? (C#)

    我一周前刚刚开始编程 我的第一个任务是编写 BMI 计算器的代码 启动时它应该看起来像这样 BMI Calculator Your weight in kg x Your height in cm x Gender m f x gt You
  • 操作方法:Outlook 2016 for Mac - 在 Outlook 加载项中调试/查看控制台日志

    我们开发了一个使用 html5 js 的 Outlook 应用程序 现在称为加载项 最初适用于 OWA 但现在面向所有 Office 支持的平台 事实上 它似乎适用于所有平台 ios mac 上的 safari Windows 浏览器和 O
  • 提交时如何同步 VSTS 和 Github 存储库

    我在 Visual Studio 团队服务中有一个存储库 我希望它与 github 存储库保持同步 这允许我在 VSTS 中进行主要开发 当合并到 master 时 它将同步到 github 并且还允许其他人在 github 上做出贡献 当
  • NSWindow翻转动画(简单通用)

    如何在不进行复杂编码的情况下为 OS X 应用程序窗口制作翻转动画 最后 我做到了 我创建了与 NSWindowController 对象而不是 NSWidows 一起使用的对象 ALWindowFlipAnimator h import
  • 谷歌地图 API v3 |没有显示地图数据

    我正在为我们当地的消防员之家编写一个小型 JavaScript 应用程序 该应用程序有点像 powerpoint 等 但是是 html 格式的 在此应用程序中 我将显示一个谷歌地图 其中包含显示从消防员家到火灾地点的路线 我使用 jquer
  • python tkinter从命令中使用的函数返回值[重复]

    这个问题在这里已经有答案了 如何获取A到C的返回值 顺便说一下 我没有使用类 def button mylabel Label myGui text hi grid row 0 column 0 A B get return A B Str
  • 创建许可系统[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我为我工作的公司开发了一个信息管理系统 现在我想制作一种许可系统 以帮助防止任何人仅仅获取副本并将其设置在自己的家庭服务器上并将其用于任何目的 我知道也许最简单的方法是在系统的每
  • 将十六进制地址传递给指针变量

    我知道如何使用指针 但我不知道该怎么做 我有一个十六进制地址 当然它具有来自任何应用程序的任何值 我知道找到我想要的地址 我想编写一段 C 代码来将此地址传递给指针变量 然后我可以从该地址捕获值 依此类推 例如 hex 0x00010010
  • 将列名传递给函数

    我有一个非标准评估的简单问题 将变量名作为参数传递到函数中 作为一个可重现的例子 这是一件简单的事情 取一个变量的平均值 mpg来自mtcars数据集 我的最终目标是拥有一个可以输入数据集和变量并获取平均值的函数 所以没有函数 librar
  • 如何在 URL 中隐藏控制器名称?

    如何在 URL 中隐藏控制器名称 我使用 ASP NET MVC 原来的网址是 http www sample com Users mvc UserDetail 9615 Users 是控制器名称 UserDetail 是操作名称 9615
  • PCRE 正则表达式 到 sed 正则表达式

    首先 我很抱歉我的英语不好 我是一个德国人 下面给出的代码在 PHP 中运行良好 string preg replace href i href 1 string 现在T需要同样的sed 我认为应该是 sed s href href 1 g
  • 如何在您的应用程序中使用标准 Mac OS X 图标?

    如何在您的设计 应用程序中使用标准 Mac OS X 图标 By standard icons I mean toolbar icons from this screenshots 是否有存储这些文件的位置或有什么方法可以从 Mac OS
  • 水平和垂直手风琴

    我想在 asp net 中创建水平和垂直的手风琴 我已经使用 Ajax Toolkit Accordion 但无法更改其方向 created using ajax toolkit looking for this 这是 ASP NET C
  • 可从时间戳列表中观察到

    如果我有一个包含时间戳的对象列表 如何制作一个在时间戳之间的相对时间触发事件的可观察对象 例如 如果我有三个时间戳为 2014 01 01 10 30 2014 01 01 10 45 和 2014 01 01 11 30 的对象 我希望第
  • Service Fabric:是否可以同时运行 Linux 和 Windows 节点

    是否可以在 Azure Service Fabric 上的同一群集中同时运行 Linux 和 Windows 节点 不 目前这是不可能的
  • python paho mqtt无法使用用户名和密码连接到mqtts

    我的 raspberrypi 上的以下 python 代码无法连接到我的 mqtt 代理 它只是在打印后挂起Connecting import paho mqtt client as mqtt def on connect client u