使用.env变量连接MQTT Broker遇授权失败(返回码5)求助
MQTT连接返回码5(未授权):环境变量引号问题解决方法
问题根源是你的mqtt-private.env文件中给变量值添加了单/双引号,导致os.getenv获取到的用户名、密码等参数包含多余的引号——比如实际传给Broker的用户名为"<username>"(带引号),而非正确的<username>,直接触发了未授权拒绝。
解决步骤:
修改.env文件,去掉所有变量值的引号
修正后的mqtt-private.env内容:BROKER=xxx.xx.xx.xxx # IP address PORT=1883 TOPIC=v3/<topic>/devices/<device-eui>/up USERNAME=<username> PASSWORD=<password>dotenv加载时会自动把等号后面的内容作为变量值,不需要额外加引号,加引号会被当成值的一部分。
验证变量取值(可选)
在代码中添加打印语句,确认获取到的参数是否正确:print(f"获取到的用户名:'{username}',密码:'{password}'")如果输出的内容带引号,说明之前的引号问题确实存在,修正后输出应该是不带引号的真实值。
重新运行程序
修正后再尝试连接即可——你之前硬编码参数能正常连接,说明Broker配置和代码逻辑本身没问题,就是环境变量取值带了多余引号导致的授权失败。
内容的提问来源于stack exchange,提问作者snowflakeluffy
相关产品推荐
相关产品推荐

