2

我有以下微型 python 代码:

client = MQTTClient("youraccount/feeds/lights", "a21sigud7911d7.iot.us-west- 
2.amazonaws.com", user="None", password="None" , keepalive=10000, ssl=True, 
ssl_params={"certfile":"/49c84a8c4a-certificate.pem.crt", 
"keyfile":"/49c84a8c4a-private.pem.key", "ca_certs":"/root.pem"})


 client.settimeout = settimeout
 client.connect()

但是当我从 ESP32 上的 repl 运行脚本时,我得到:

文件“umqtt/simple.py”,第 61 行,连接类型错误:给出额外的关键字参数

请提供任何帮助

4

2 回答 2

2

删除 ssl_params 字典中的 ca_certs。请参阅使用 MQTT 连接到 AWS的 Micropython和ussl 文档中的警告
在 ESP32 上可以使用 ESP32 和 Micropython-lib MQTT 连接到 AWS,因为它使用了 mbedtls。但是,这在 unix/osx 上是不可能的,因为它使用了 axtls 库——请参阅这个问题

于 2018-12-07T11:17:32.877 回答
1

我没有尝试连接到 AWS(而是我自己的 TLS 安全 MQTT 代理)——我得到了完全相同的错误消息。万一其他人发现这一点,在尝试解决该问题时 - 答案实际上非常简单。您不能使用文件的名称,而是需要它们的内容。所以这对我有用:

    from umqtt.robust import MQTTClient

    with open('device.key') as f:
        key_data = f.read()
    with open('device.crt') as f:
        cert_data = f.read()

    client = MQTTClient("ESP", "test.example.com", ssl=True, ssl_params={'key':key_data, 'cert':cert_data})
    x = client.connect()
    if not x:
        client.publish("Topic", "Hello World...")

您显然需要将“test.example.com”替换为您的安全 MQTT 服务器的 URL……

于 2019-08-29T15:47:57.500 回答