Wie veröffentliche ich MQTT-Nachrichten von meinem Gerät auf AWS IoT Core, wenn ich Python verwende?

Lesedauer: 8 Minute
0

Ich kann keine MQTT-Nachrichten (MQ Telemetry Transport) zwischen AWS IoT Core und meinem Gerät oder MQTT-Client senden oder empfangen. Wie veröffentliche ich MQTT-Nachrichten auf AWS IoT Core?

Kurzbeschreibung

Stellen Sie sicher, dass Ihr AWS IoT-Ding richtig konfiguriert ist und die Zertifikate ordnungsgemäß angehängt sind. Um Ihr Setup zu testen, können Sie den AWS IoT MQTT-Client und den in diesem Artikel bereitgestellten Python-Beispielcode verwenden.

Behebung

Richten Sie ein Verzeichnis ein, um die MQTT-Veröffentlichung zu testen

1.Erstellen Sie ein Arbeitsverzeichnis in Ihrer Entwicklungsumgebung. Zum Beispiel: iot-test-publish.

2.Erstellen Sie ein Unterverzeichnis für Zertifikate in Ihrem neuen Arbeitsverzeichnis. Zum Beispiel: Zertifikate.

3.Ändern Sie das Verzeichnis über die Befehlszeile in Ihr neues Arbeitsverzeichnis.

Installieren Sie pip und das AWS IoT SDK für Python

1.Wenn Sie dies noch nicht getan haben, installieren Sie pip für die Python-3-Paketierung. Weitere Informationen finden Sie unter Installation auf der Python Packaging Authority (PyPA)-Website.

2.Installieren Sie das AWS IoT SDK für Python v2, indem Sie Folgendes über die Befehlszeile ausführen:

pip install awsiotsdk

-oder-

Installieren Sie das AWS IoT Device SDK für Python (die vorherige SDK-Version), indem Sie den folgenden Befehl ausführen:

pip install AWSIoTPythonSDK

Weitere Informationen finden Sie unter AWS IoT SDK für Python v2 oder AWS IoT Device SDK für Python auf GitHub.

**Hinweis:**Diese SDKs werden für die Verbindung mit AWS IoT Core empfohlen, sind aber nicht erforderlich. Sie können auch mit jedem kompatiblen MQTT-Client eines Drittanbieters eine Verbindung herstellen.

Erstellen Sie eine AWS IoT Core-Richtlinie

1.Öffnen Sie die AWS-IoT-Core-Konsole.

2.Wählen Sie im linken Navigationsbereich Sicher aus.

3.Wählen Sie unter Sicher die Option Richtlinien aus.

4.Wenn Sie bereits über AWS IoT Core-Richtlinien verfügen, wählen Sie Erstellen, um eine neue Richtlinie zu erstellen.
-oder-
Wenn Sie noch keine Richtlinien haben, wählen Sie auf der Seite Sie haben noch keine Richtlinien die Option Richtlinie erstellen aus.

5.Geben Sie auf der Seite Richtlinie erstellen einen Namen für Ihre Richtlinie ein. Zum Beispiel: admin.

6.Gehen Sie unter Anweisungen hinzufügen wie folgt vor:
Geben Sie für Aktion iot:* ein.
Wichtig:Das Zulassen aller AWS-IoT-Aktionen (iot:*) ist zum Testen nützlich. Es ist jedoch eine bewährte Methode, die Sicherheit für ein Produktions-Setup zu erhöhen. Weitere Beispiele für Sicherheitsrichtlinien finden Sie unter Beispiele für AWS-IoT-Richtlinien.
Geben Sie für Ressource ARN
*
ein.
Wählen Sie unter Effekt das Kontrollkästchen Zulassen aus.

7.Wählen Sie Erstellen aus.

Weitere Informationen finden Sie unter Erstellen einer AWS IoT Core-Richtlinie und unter AWS IoT Core-Richtlinien.

Erstellen Sie ein AWS-IoT-Ding

**Hinweis:**Sie müssen kein Ding erstellen, um eine Verbindung zu AWS IoT herzustellen. Dinge ermöglichen es Ihnen jedoch, zusätzliche Sicherheitskontrollen und andere AWS IoT-Funktionen wie Flotten-Indizierung, Jobs oder Geräteschatten zu verwenden.

1.Wählen Sie in der AWS-IoT-Core-Konsole im linken Navigationsbereich Verwalten aus.

2.Wenn Sie bereits Dinge haben, wählen Sie Erstellen, um ein neues Ding zu erstellen.
-oder-
Wenn Sie noch keine Dinge haben, wählen Sie auf der Seite Sie haben noch keine Dinge die Option Ein Ding registrieren aus.

3.Wählen Sie auf der Seite AWS-IoT-Dinge erstellen die Option Ein einzelnes Ding erstellen aus.

4.Gehen Sie auf der Seite Ihr Gerät zur Ding-Registrierung hinzufügen wie folgt vor:
Geben Sie einen Namen für Ihr Ding ein. Zum Beispiel:Test-Ding.
(Optional) Unter Diesem Ding eine Art hinzufügen wählen Sie eine Dingart aus oder erstellen Sie eine.
(Optional) Wählen Sie unter Dieses Ding zu einer Gruppe hinzufügen eine Gruppe aus oder erstellen Sie eine Gruppe. Weitere Informationen zu Gruppen finden Sie unter Statische Dinggruppen und Dynamische Dinggruppen.
(Optional) Fügen Sie unter Suchbare Dingattribute festlegen (optional) Attribute als Schlüssel-Wert-Paare hinzu.
Klicken Sie auf Weiter.

5.Wählen Sie auf der Seite Zertifikat für Ihr Ding hinzufügen die Option Zertifikat erstellen aus. Sie sehen Benachrichtigungen, die bestätigen, dass Ihr Ding und ein Zertifikat für Ihr Ding erstellt wurden.

6.Gehen Sie auf der Seite Zertifikat erstellt wie folgt vor:
Unter Um ein Gerät zu verbinden, müssen Sie Folgendes herunterladen wählen Sie Herunterladen für das Zertifikat, den öffentlichen Schlüssel und den privaten Schlüssel aus.
Speichern Sie jede der heruntergeladenen Dateien in dem Unterverzeichnis für Zertifikate, das Sie zuvor erstellt haben.
Wählen Sie unter Sie müssen auch eine Root-CA für AWS IoT herunterladen die Option Herunterladen aus. Die Seite Serverauthentifizierung wird bei CA-Zertifikate für die Serverauthentifizierung geöffnet.

7.Wählen Sie unter Amazon Trust Services-Endpunkte (bevorzugt) Amazon Root CA 1 aus. Das Zertifikat wird in Ihrem Browser geöffnet.

8.Kopieren Sie das Zertifikat (alles von -----BEGIN CERTIFICATE----- bis**-----END CERTIFICATE-----**) und fügen Sie es in einen Texteditor ein.

9.Speichern Sie das Zertifikat als .pem-Datei mit dem Namen root.pem im Unterverzeichnis Zertifikate.

10.Wählen Sie auf der Seite Zertifikat erstellt in der AWS-IoT-Core-Konsole die Option Aktivieren aus. Die Schaltfläche ändert sich zu Deaktivieren.

11.Wählen Sie Eine Richtlinie anhängen aus.

12.Gehen Sie auf der Seite Eine Richtlinie für Ihr Ding hinzufügen wie folgt vor:
Wählen Sie die AWS IoT Core-Richtlinie aus, die Sie zuvor erstellt haben. Zum Beispiel: admin.
Wählen Sie Ding registrieren aus.

Weitere Informationen finden Sie unter Ein Dingobjekt erstellen.

Kopieren Sie die URL des AWS IoT Core-Endpunkts

1.Wählen Sie in der AWS-IoT-Core-Konsole im linken Navigationsbereich Einstellungen aus.

2.Kopieren Sie auf der Seite Einstellungen unter Benutzerdefinierter Endpunkt den Endpunkt. Diese benutzerdefinierte AWS IoT Core-Endpunkt-URL ist für Ihr AWS-Konto und Ihre Region persönlich.

Erstellen Sie eine Python-Programmdatei

Speichern Sie eines der folgenden Python-Codebeispiele als Python-Programmdatei mit dem Namen publish.py.

Wenn Sie das AWS IoT SDK für Python v2 früher installiert haben, verwenden Sie den folgenden Beispielcode:

**Wichtig:**Ersetzen Sie customEndpointUrl durch Ihre benutzerdefinierte AWS IoT Core-Endpunkt-URL. Ersetzen Sie Zertifikate durch den Namen Ihres Unterverzeichnisses für Zertifikate. Ersetzen Sie a1b23cd45e-certificate.pem.crt durch den Namen Ihres Kunden .crt. Ersetzen Sie a1b23cd45e-private.pem.key durch den Namen Ihres privaten Schlüssels.

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

-oder-

Wenn Sie das AWS IoT Device SDK für Python (die vorherige SDK-Version) installiert haben, verwenden Sie den folgenden Beispielcode:

**Wichtig:**Ersetzen Sie customEndpointUrl durch Ihre benutzerdefinierte AWS IoT Core-Endpunkt-URL. Ersetzen Sie Zertifikate durch den Namen Ihres Unterverzeichnisses für Zertifikate. Ersetzen Sie a1b23cd45e-certificate.pem.crt durch den Namen Ihres Kunden .crt. Ersetzen Sie a1b23cd45e-private.pem.key durch den Namen Ihres privaten Schlüssels.

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

Testen Sie das Setup

1.Wählen Sie in der AWS-IoT-Core-Konsole im linken Navigationsbereich Testen aus.

2.Geben Sie auf der Seite MQTT-Client unter Abonnementthema den Text Test/Testen.

3.Wählen Sie Thema abonnieren aus. Ein Testthema mit dem Namen Test/Testen ist bereit für die Veröffentlichung der Testnachricht. Weitere Informationen finden Sie unter Geräte-MQTT-Nachrichten mit dem AWS IoT MQTT-Client anzeigen.

4.Führen Sie Folgendes von Ihrer Befehlszeile aus:

python3 publish.py

Das Python-Programm veröffentlicht 20 Testnachrichten zum Thema Test/Testen, das Sie in der AWS-IoT-Core-Konsole erstellt haben. Sehen Sie sich das Thema in der Konsole an, um die veröffentlichten Nachrichten zu sehen.

**Tipp:**Sie können auch andere Funktionen der SDKs testen, z. B. das Abonnieren und Herstellen einer Verbindung über WebSockets, indem Sie die mitgelieferten Pubsub-Beispiele verwenden. Weitere Informationen finden Sie unter pubsub (AWS IoT SDK für Python v2) oder BasicPubSub (AWS IoT Device SDK für Python) auf GitHub.

(Optional) Aktivieren Sie die AWS IoT-Protokollierung auf Amazon CloudWatch

Sie können Ereignisprotokolle für MQTT-Nachrichten überwachen, die Sie in AWS IoT Core veröffentlichen. Anweisungen zur Einrichtung finden Sie unter Konfigurieren der AWS IoT-Protokollierung und Überwachen von AWS IoT mithilfe von CloudWatch Logs.


Ähnliche Informationen

Erste Schritte mit AWS IoT Core

Gerätebereitstellung

Häufig gestellte Fragen (Website zum MQTT-Nachrichten-Protokoll)

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren