Come posso utilizzare Python per pubblicare messaggi MQTT in AWS IoT Core dal mio dispositivo?
Non riesco a inviare o ricevere messaggi MQTT (Message Queuing Telemetry Transport) tra AWS IoT Core e il mio dispositivo o client MQTT.
Breve descrizione
Verifica che l'oggetto AWS IoT sia configurato correttamente e che i relativi certificati siano allegati correttamente. Per verificare la configurazione, puoi utilizzare il client AWS IoT MQTT e il codice Python fornito a titolo esemplificativo in questo articolo.
Risoluzione
Configura una directory per verificare la pubblicazione di MQTT
- Crea una directory di lavoro nell'ambiente di sviluppo. Ad esempio, crea una directory denominata iot-test-publish.
- Crea una sottodirectory per i certificati nella nuova directory di lavoro. Ad esempio, crea una sottodirectory denominata certificates.
- Dalla riga di comando, passa alla nuova directory di lavoro.
Installa pip e AWS IoT SDK per Python
Nota: prima di iniziare, installa pip per il packaging Python 3. Per ulteriori informazioni, consulta Installation (Installazione) sul sito web Python Packaging Authority (PyPA).
-
Per installare AWS IoT SDK per Python v2, utilizza questo comando:
pip install awsiotsdk-oppure-
Installa AWS IoT Device SDK per Python (versione precedente dell'SDK, v1) eseguendo questo comando:
pip install AWSIoTPythonSDK
Nota: è consigliabile utilizzare l'aggiornamento più recente per la versione di AWS IoT SDK per Python. Per ulteriori informazioni, consulta AWS IoT SDK for Python v2 (AWS IoT SDK per Python v2) o AWS IoT Device SDK for Python (AWS IoT Device SDK per Python) sul sito web GitHub. Inoltre, è consigliabile, ma non obbligatorio, utilizzare questi SDK per connettersi ad AWS IoT Core. Per connetterti ad AWS IoT Core, puoi infatti utilizzare qualsiasi altro client MQTT di terze parti conforme.
Crea una policy in AWS IoT Core
- Apri la console AWS IoT Core.
- Nel pannello di navigazione a sinistra, scegli Sicurezza.
- Alla voce Sicurezza, scegli Policy.
- Se già disponi di policy in AWS IoT Core, scegli Crea per crearne una nuova.
-oppure-
Se non disponi ancora di policy, nella pagina Non hai ancora policy, scegli Crea una policy. - Nella pagina Crea una policy, inserisci un Nome per la policy. Ad esempio, admin.
- Nella sezione Aggiungi istruzioni, completa le seguenti azioni:
In Operazione, inserisci iot:*.
Importante: a scopo di verifica puoi consentire tutte le operazioni di AWS (iot:*). Tuttavia, in una configurazione di produzione è consigliabile rafforzare la sicurezza. Per alcuni esempi di policy più sicure, consulta Esempi di policy di AWS IoT Core.
In Risorsa ARN, inserisci *.
Per Effetto, seleziona la casella di controllo Abilita. - Scegli Crea.
Per ulteriori informazioni, consulta Crea una policy di AWS IoT Core e Policy di AWS IoT Core.
Crea un oggetto in AWS IoT
Nota: non serve creare un oggetto per connettersi ad AWS IoT. Tuttavia, gli oggetti consentono di utilizzare controlli di sicurezza aggiuntivi e altre funzionalità di AWS IoT, come Indicizzazione del parco istanze, Processi o Device shadow.
- Nel pannello di navigazione a sinistra della console AWS IoT Core, scegli Gestisci.
- Se già disponi di oggetti, scegli Crea per crearne uno nuovo.
-oppure-
Se non disponi ancora di oggetti, nella pagina Non hai ancora oggetti, scegli Registrazione di un oggetto. - Nella pagina Creazione oggetti AWS IoT, scegli Crea un oggetto singolo.
- Nella pagina Aggiungi il tuo dispositivo al registro degli oggetti, intraprendi le seguenti azioni:
Inserisci un Nome per l'oggetto. Ad esempio, Oggetto-prova.
(Facoltativo) In Add a type to this thing (Aggiunta di un tipo a questo oggetto), scegli o crea un tipo di oggetto.
(Facoltativo) In Aggiunta dell’oggetto a un gruppo, scegli o crea un gruppo. Per ulteriori informazioni sui gruppi, consulta Gruppi di oggetti statici e Gruppi di oggetti dinamici.
(Facoltativo) In Impostazione degli attributi oggetto ricercabili (facoltativo), aggiungi gli attributi come coppie chiave-valore.
Scegli Avanti.
Nota: è consigliabile abbinare il nome dell'oggetto al clientId. Se i nomi corrispondono, puoi utilizzare funzionalità di AWS IoT Core come Indicizzazione del parco istanze e Thing policy variables (Variabili delle policy di oggetto). - Nella pagina Aggiungi un certificato per il tuo oggetto, scegli Crea certificato. Vengono visualizzate notifiche che ti confermano la creazione dell'oggetto e di un relativo certificato.
- Nella pagina Certificato creato, intraprendi le seguenti azioni:
Alla voce In order to connect a device, you need to download the following (Per connettere un dispositivo, devi scaricare quanto segue), scegli Scarica per il certificato, la chiave pubblica e la chiave privata.
Salva ogni file scaricato nella sottodirectory dei certificati creata in precedenza.
Alla voce You also need to download a root CA for AWS IoT (Devi anche scaricare una CA root per AWS IoT), scegli Scarica. Si apre la pagina Server authentication (Autenticazione server) mostrando CA certificates for server authentication (Certificati CA per l'autenticazione del server). - Per Endpoint dei servizi di trust di Amazon (preferito), scegli Amazon Root CA 1. Il certificato viene aperto nel browser.
- Copia il certificato (tutto da -----BEGIN CERTIFICATE----- a -----END CERTIFICATE-----) e incollalo in un editor di testo.
- Salva il certificato come file .pem denominato root.pem nella sottodirectory dei certificati.
- Nella pagina Certificato creato della console AWS IoT Core, scegli Attiva. Il pulsante diventa Disattiva.
- Scegli Collega policy.
- Nella pagina Aggiungi una policy per il tuo oggetto, intraprendi le seguenti azioni:
Seleziona la policy di AWS IoT Core che hai creato in precedenza. Ad esempio, seleziona admin.
Scegli Registra l’oggetto.
Per ulteriori informazioni, consulta Crea un oggetto.
Copia l'URL dell'endpoint di AWS IoT Core
- Nel pannello di navigazione a sinistra della console AWS IoT Core, scegli Impostazioni.
- Nella pagina Impostazioni, in Endpoint personalizzato, copia l'endpoint. Questo URL dell'endpoint personalizzato di AWS IoT Core è unico per l'account e la Regione AWS.
Crea un file di programma Python
Salva uno dei seguenti esempi di codice Python come file di programma Python denominato publish.py.
Per AWS IoT SDK per Python v2, utilizza il seguente esempio di codice:
Importante: sostituisci customEndpointUrl con l'URL del tuo endpoint personalizzato di AWS IoT Core. Sostituisci certificates con il nome della tua sottodirectory dei certificati. Sostituisci a1b23cd45e-certificate.pem.crt con il nome del tuo client .crt. Sostituisci a1b23cd45e-private.pem.key con il nome della tua chiave privata.
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.# SPDX-License-Identifier: MIT-0 from awscrt import io, mqtt, auth, http from awsiot import mqtt_connection_builder import time as t import json # Define ENDPOINT, CLIENT_ID, PATH_TO_CERTIFICATE, PATH_TO_PRIVATE_KEY, PATH_TO_AMAZON_ROOT_CA_1, MESSAGE, TOPIC, and RANGE ENDPOINT = "customEndpointUrl" CLIENT_ID = "testDevice" PATH_TO_CERTIFICATE = "certificates/a1b23cd45e-certificate.pem.crt" PATH_TO_PRIVATE_KEY = "certificates/a1b23cd45e-private.pem.key" PATH_TO_AMAZON_ROOT_CA_1 = "certificates/root.pem" MESSAGE = "Hello World" TOPIC = "test/testing" RANGE = 20 # Spin up resources event_loop_group = io.EventLoopGroup(1) host_resolver = io.DefaultHostResolver(event_loop_group) client_bootstrap = io.ClientBootstrap(event_loop_group, host_resolver) mqtt_connection = mqtt_connection_builder.mtls_from_path( endpoint=ENDPOINT, cert_filepath=PATH_TO_CERTIFICATE, pri_key_filepath=PATH_TO_PRIVATE_KEY, client_bootstrap=client_bootstrap, ca_filepath=PATH_TO_AMAZON_ROOT_CA_1, client_id=CLIENT_ID, clean_session=False, keep_alive_secs=6 ) print("Connecting to {} with client ID '{}'...".format( ENDPOINT, CLIENT_ID)) # Make the connect() call connect_future = mqtt_connection.connect() # Future.result() waits until a result is available connect_future.result() print("Connected!") # Publish message to server desired number of times. print('Begin Publish') for i in range (RANGE): data = "{} [{}]".format(MESSAGE, i+1) message = {"message" : data} mqtt_connection.publish(topic=TOPIC, payload=json.dumps(message), qos=mqtt.QoS.AT_LEAST_ONCE) print("Published: '" + json.dumps(message) + "' to the topic: " + "'test/testing'") t.sleep(0.1) print('Publish End') disconnect_future = mqtt_connection.disconnect() disconnect_future.result()
-oppure-
Per AWS IoT Device SDK per Python v1, utilizza il seguente esempio di codice:
Importante: sostituisci customEndpointUrl con l'URL del tuo endpoint personalizzato di AWS IoT Core. Sostituisci certificates con il nome della tua sottodirectory dei certificati. Sostituisci a1b23cd45e-certificate.pem.crt con il nome del tuo client .crt. Sostituisci a1b23cd45e-private.pem.key con il nome della tua chiave privata.
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.# SPDX-License-Identifier: MIT-0 import time as t import json import AWSIoTPythonSDK.MQTTLib as AWSIoTPyMQTT # Define ENDPOINT, CLIENT_ID, PATH_TO_CERTIFICATE, PATH_TO_PRIVATE_KEY, PATH_TO_AMAZON_ROOT_CA_1, MESSAGE, TOPIC, and RANGE ENDPOINT = "customEndpointUrl" CLIENT_ID = "testDevice" PATH_TO_CERTIFICATE = "certificates/a1b23cd45e-certificate.pem.crt" PATH_TO_PRIVATE_KEY = "certificates/a1b23cd45e-private.pem.key" PATH_TO_AMAZON_ROOT_CA_1 = "certificates/root.pem" MESSAGE = "Hello World" TOPIC = "test/testing" RANGE = 20 myAWSIoTMQTTClient = AWSIoTPyMQTT.AWSIoTMQTTClient(CLIENT_ID) myAWSIoTMQTTClient.configureEndpoint(ENDPOINT, 8883) myAWSIoTMQTTClient.configureCredentials(PATH_TO_AMAZON_ROOT_CA_1, PATH_TO_PRIVATE_KEY, PATH_TO_CERTIFICATE) myAWSIoTMQTTClient.connect() print('Begin Publish') for i in range (RANGE): data = "{} [{}]".format(MESSAGE, i+1) message = {"message" : data} myAWSIoTMQTTClient.publish(TOPIC, json.dumps(message), 1) print("Published: '" + json.dumps(message) + "' to the topic: " + "'test/testing'") t.sleep(0.1) print('Publish End') myAWSIoTMQTTClient.disconnect()
Nota: le versioni precedenti di AWS IoT Device SDK per Python non sono supportate per Python 3.12 o versioni successive. Assicurati di utilizzare la versione più recente di AWS IoT Device SDK per Python.
Verifica la configurazione
- Nel pannello di navigazione a sinistra della console AWS IoT Core, scegli Effettua il test.
- Nella pagina Client MQTT, in Argomento sottoscrizione, inserisci test/testing.
- Scegli Sottoscrizione all'argomento. Un topic di prova denominato test/testing è pronto per la pubblicazione del messaggio di prova. Per ulteriori informazioni, consulta Visualizza i messaggi MQTT con il client MQTT di AWS IoT.
- Esegui quanto segue dalla riga di comando:
python3 publish.py
Il programma Python pubblica 20 messaggi di prova sul topic test/testing creato nella console AWS IoT Core. Visualizza il topic nella console per visualizzare i messaggi pubblicati.
Suggerimento: puoi anche utilizzare gli esempi pubsub inclusi per verificare altre funzionalità degli SDK, come le sottoscrizioni e le connessioni WebSockets. Per ulteriori informazioni, consulta pubsub (AWS IoT SDK per Python v2) o BasicPubSub (AWS IoT Device SDK per Python) sul sito web GitHub.
(Facoltativo) Attiva la registrazione di AWS IoT in Amazon CloudWatch
Puoi monitorare i log degli eventi per i messaggi MQTT pubblicati in AWS IoT Core. Per istruzioni di configurazione, consulta Configurare la registrazione di AWS IoT e Monitora AWS IoT utilizzando CloudWatch Logs.
Informazioni correlate
Guida introduttiva ai tutorial di AWS IoT Core
FAQ (Domande frequenti) (sito web del protocollo di messaggistica MQTT)
- Argomenti
- Internet of Things (IoT)
- Tag
- AWS IoT Core
- Lingua
- Italiano

Contenuto pertinente
AWS UFFICIALEAggiornata 2 anni fa