Подключение ESP32 к AWS IoT через umqtt

У меня есть следующий код микро-питона:

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()

Но когда я запускаю скрипт из repl на ESP32, я получаю:

Файл "umqtt/simple.py", строка 61, в соединении TypeError: даны дополнительные аргументы ключевого слова

Любая помощь, пожалуйста


person user3570022    schedule 20.08.2018    source источник
comment
Вы поняли?   -  person haxpanel    schedule 28.11.2018


Ответы (2)


Удалите ca_certs из словаря ssl_params. См. Подключение Micropython к AWS с помощью MQTT и предупреждение в документации ussl.
Подключение к AWS с помощью ESP32 и MQTT Micropython-lib возможно на ESP32, потому что он использовал mbedtls. Однако это невозможно в unix/osx, поскольку в нем используется библиотека axtls — см. эту проблему< /а>.

person TomManning    schedule 07.12.2018

Я не пытался подключиться к AWS (а скорее к моему собственному брокеру MQTT, защищенному TLS), и у меня было точно такое же сообщение об ошибке. В случае, если кто-то еще обнаружит это, пытаясь решить эту проблему - ответ на самом деле очень прост. Вы не можете использовать имена файлов – вам нужно их содержимое. Так что это сработало для меня:

    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» URL-адресом вашего защищенного сервера MQTT...

person AJ Poulter    schedule 29.08.2019