Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Tutorial: Conexión de un dispositivo a AWS IoT Core mediante el AWS IoT dispositivo SDK
Este tutorial muestra cómo conectar un dispositivo para que AWS IoT Core pueda enviar y recibir datos desde y hacia AWS IoT. Después de completar este tutorial, el dispositivo se configurará para conectarse AWS IoT Core y comprenderá cómo se comunican los dispositivos con ellos AWS IoT.
Temas
Requisitos previos
Antes de empezar este tutorial, asegúrese de que ha:
-
Finalizado Cómo empezar con AWS IoT Core los tutoriales
En la sección de ese tutorial donde debe Configuración del dispositivo, seleccione la opción Conexión de una Raspberry Pi u otro dispositivo para su dispositivo y utilice las opciones del lenguaje Python para configurar su dispositivo.
nota
Mantenga abierta la ventana de terminal que utilizó en ese tutorial porque también la utilizará en este.
-
Un dispositivo que puede ejecutar el AWS IoT dispositivo SDK v2 para Python.
Este tutorial muestra cómo conectar un dispositivo AWS IoT Core mediante ejemplos de código de Python, que requieren un dispositivo relativamente potente. Si trabaja con dispositivos con recursos limitados, es posible que estos ejemplos de código no funcionen en ellos. En ese caso, es posible que tenga más éxito con el Tutorial: Uso de la AWS IoT Device SDK para Embedded C tutorial.
-
Obtuvo la información requerida para conectarse al dispositivo
Para conectar el dispositivo AWS IoT, debe tener información sobre el nombre del dispositivo, el nombre del host y el número de puerto.
nota
También puede usar la autenticación personalizada para conectar los dispositivos a AWS IoT Core. Los datos de conexión que pasa a la función Lambda de su autorizador dependen del protocolo que utilice.
-
Nombre de la cosa: el nombre de la AWS IoT cosa a la que desea conectarse. Debes haberte registrado como dispositivo como una AWS IoT cosa. Para obtener más información, consulte Administrar dispositivos con AWS IoT.
-
Nombre de host: el nombre de host del punto final de IoT específico de la cuenta.
-
Número de puerto: el número de puerto al que se va a conectar.
Puede usar el
configureEndpoint
método en AWS IoT Python SDK para configurar el nombre del host y el número de puerto.myAWSIoTMQTTClient.configureEndpoint("random.iot.region.amazonaws.com", 8883)
-
Prepara tu dispositivo para AWS IoT
En Cómo empezar con AWS IoT Core los tutoriales, preparó su dispositivo y su cuenta AWS para que pudieran comunicarse. En esta sección se analizan los aspectos de esa preparación que se aplican a cualquier dispositivo que se conecte a AWS IoT Core.
Para conectar un dispositivo a AWS IoT Core:
-
Debe tener una Cuenta de AWS.
En el procedimiento Configurar Cuenta de AWS se describe cómo crear una Cuenta de AWS si aún no tiene una.
-
En esa cuenta, debe tener definidos los siguientes AWS IoT recursos para el dispositivo de su Cuenta de AWS región.
El procedimiento en Crea AWS IoT recursos se describe en este documento describe cómo crear estos recursos para el dispositivo en su Cuenta de AWS y su región.
-
Un certificado de dispositivo registrado con AWS IoT y activado para autenticar el dispositivo.
El certificado suele crearse con un objeto y adjuntarse a AWS IoT él. Si bien no se requiere un objeto para conectarse a un dispositivo AWS IoT, este pone a su disposición AWS IoT funciones adicionales.
-
Una política adjunta al certificado del dispositivo que lo autoriza a conectarse AWS IoT Core y realizar todas las acciones que desee.
-
-
Una conexión a Internet que pueda acceder a los puntos de conexión del dispositivo Cuenta de AWS.
Los puntos finales del dispositivo se describen en la página de configuración de la consola AWS IoT datos del dispositivo y puntos finales de servicio y se pueden ver en ella
. AWS IoT -
Software de comunicación, como el que SDKs proporciona el AWS IoT dispositivo. En este tutorial se utiliza el AWS IoT dispositivo SDK v2 para Python
.
Revise el MQTT protocolo
Antes de hablar de la aplicación de muestra, es útil entender el MQTT protocolo. El MQTT protocolo ofrece algunas ventajas sobre otros protocolos de comunicación de red, por ejemploHTTP, lo que lo convierte en una opción popular para los dispositivos de IoT. En esta sección se revisan los aspectos clave MQTT que se aplican a este tutorial. Para obtener información sobre cómo MQTT se compara conHTTP, consulteElección de un protocolo de aplicación para la comunicación entre dispositivos.
MQTTutiliza un modelo de comunicación de publicación/suscripción
El MQTT protocolo utiliza un publish/subscribe communication model with its host. This model differs from the request/response modelo que HTTP utiliza. ConMQTT, los dispositivos establecen una sesión con el host que se identifica mediante un ID de cliente único. Para enviar datos, los dispositivos publican los mensajes identificados por temas en un agente de mensajes del host. Para recibir mensajes del agente de mensajes, los dispositivos se suscriben a los temas enviando filtros de temas en las solicitudes de suscripción al agente de mensajes.
MQTTadmite sesiones persistentes
El agente de mensajes recibe los mensajes de los dispositivos y los publica en los dispositivos que se han suscrito a ellos. Con las sesiones persistentes (sesiones que permanecen activas incluso cuando el dispositivo de inicio está desconectado), los dispositivos pueden recuperar los mensajes que se publicaron mientras estaban desconectados. Por el lado del dispositivo, MQTT admite niveles de calidad de servicio (QoS) que garantizan que el host reciba los mensajes enviados por el dispositivo.
Revisa la aplicación de SDK ejemplo de dispositivo pubsub.py
En esta sección se analiza la aplicación de pubsub.py
ejemplo del AWS IoT dispositivo SDK v2 para Python que se utiliza en este tutorial. Aquí veremos cómo se conecta a los MQTT mensajes AWS IoT Core para publicar y suscribirse a ellos. En la siguiente sección se presentan algunos ejercicios que le ayudarán a explorar cómo se conecta y se comunica un dispositivo con él AWS IoT Core.
La aplicación pubsub.py de ejemplo muestra estos aspectos de una MQTT conexión con AWS IoT Core:
Protocolos de comunicación
En el pubsub.py
ejemplo se muestra una MQTT conexión mediante los WSS protocolos MQTT and MQTT over. La biblioteca AWS common runtime (AWS CRT)
MQTT
El pubsub.py
ejemplo de llamadas mtls_from_path
(que se muestra aquí) es mqtt_connection_builder
mtls_from_path
utiliza los certificados X.509 y la TLS versión 1.2 para autenticar el dispositivo. La AWS CRT biblioteca gestiona los detalles de nivel inferior de esa conexión.
mqtt_connection = mqtt_connection_builder.mtls_from_path( endpoint=args.endpoint, cert_filepath=args.cert, pri_key_filepath=args.key, ca_filepath=args.ca_file, client_bootstrap=client_bootstrap, on_connection_interrupted=on_connection_interrupted, on_connection_resumed=on_connection_resumed, client_id=args.client_id, clean_session=False, keep_alive_secs=6 )
endpoint
El punto final Cuenta de AWS de su dispositivo IoT
En la aplicación de ejemplo, este valor se transfiere desde la línea de comandos.
cert_filepath
La ruta al archivo del certificado del dispositivo
En la aplicación de ejemplo, este valor se transfiere desde la línea de comandos.
pri_key_filepath
La ruta al archivo de clave privada del dispositivo que se creó con su archivo de certificado
En la aplicación de ejemplo, este valor se transfiere desde la línea de comandos.
ca_filepath
La ruta al archivo de la CA Raíz. Solo es obligatorio si el MQTT servidor usa un certificado que aún no está en tu almacén de confianza.
En la aplicación de ejemplo, este valor se transfiere desde la línea de comandos.
client_bootstrap
El objeto de tiempo de ejecución común que gestiona las actividades de comunicación de los sockets
En la aplicación de ejemplo, se crea una instancia de este objeto antes de la llamada a
mqtt_connection_builder.mtls_from_path
.on_connection_interrupted
on_connection_resumed
y son funciones de devolución de llamada para llamar cuando la conexión del dispositivo se interrumpe y se reanuda.
client_id
El identificador que identifica de forma exclusiva a este dispositivo en la Región de AWS
En la aplicación de ejemplo, este valor se transfiere desde la línea de comandos.
clean_session
Si se debe iniciar una nueva sesión persistente o, si hay una, volver a conectarse a una existente
keep_alive_secs
El valor keep alive, en segundos, para enviar la solicitud
CONNECT
. Se enviará automáticamente un ping en este intervalo. Si el servidor no recibe un ping después de 1,5 veces este valor, asume que la conexión se ha perdido.
MQTTterminado WSS
El pubsub.py
ejemplo de llamadas websockets_with_default_aws_signing
(que se muestra aquí) es mqtt_connection_builder
websockets_with_default_aws_signing
crea una MQTT conexión WSS mediante Signature V4 para autenticar el dispositivo.
mqtt_connection = mqtt_connection_builder.websockets_with_default_aws_signing( endpoint=args.endpoint, client_bootstrap=client_bootstrap, region=args.signing_region, credentials_provider=credentials_provider, websocket_proxy_options=proxy_options, ca_filepath=args.ca_file, on_connection_interrupted=on_connection_interrupted, on_connection_resumed=on_connection_resumed, client_id=args.client_id, clean_session=False, keep_alive_secs=6 )
endpoint
El punto final Cuenta de AWS de su dispositivo IoT
En la aplicación de ejemplo, este valor se transfiere desde la línea de comandos.
client_bootstrap
El objeto de tiempo de ejecución común que gestiona las actividades de comunicación de los sockets
En la aplicación de ejemplo, se crea una instancia de este objeto antes de la llamada a
mqtt_connection_builder.websockets_with_default_aws_signing
.region
La región de AWS firma utilizada por la autenticación Signature V4. En
pubsub.py
, pasa el parámetro introducido en la línea de comandos.En la aplicación de ejemplo, este valor se transfiere desde la línea de comandos.
credentials_provider
Las AWS credenciales proporcionadas para usarlas en la autenticación
En la aplicación de ejemplo, se crea una instancia de este objeto antes de la llamada a
mqtt_connection_builder.websockets_with_default_aws_signing
.websocket_proxy_options
HTTPopciones de proxy, si se utiliza un host proxy
En la aplicación de ejemplo, este valor se inicializa antes de la llamada a
mqtt_connection_builder.websockets_with_default_aws_signing
.ca_filepath
La ruta al archivo de la CA Raíz. Necesario solo si el MQTT servidor usa un certificado que aún no esté en tu almacén de confianza.
En la aplicación de ejemplo, este valor se transfiere desde la línea de comandos.
on_connection_interrupted
on_connection_resumed
La función de devolución de llamada para llamar cuando la conexión del dispositivo se interrumpe y se reanuda.
client_id
El identificador que identifica de forma exclusiva a este dispositivo en la Región de AWS.
En la aplicación de ejemplo, este valor se transfiere desde la línea de comandos.
clean_session
Si se debe iniciar una nueva sesión persistente o, si hay una, volver a conectarse a una existente
keep_alive_secs
El valor keep alive, en segundos, para enviar la solicitud
CONNECT
. Se enviará automáticamente un ping en este intervalo. Si el servidor no recibe un ping después de 1,5 veces este valor, se supone que se ha perdido la conexión.
HTTPS
¿Sobre quéHTTPS? AWS IoT Core admite dispositivos que publican HTTPS solicitudes. Desde el punto de vista de la programación, los dispositivos envían HTTPS solicitudes al AWS IoT Core igual que cualquier otra aplicación. Para ver un ejemplo de un programa de Python que envía un HTTP mensaje desde un dispositivo, consulta el ejemplo de HTTPS código con la requests
biblioteca de Python. En este ejemplo se envía un mensaje AWS IoT Core a HTTPS un usuario que lo AWS IoT Core interpreta como un MQTT mensaje.
Si bien AWS IoT Core admite HTTPS las solicitudes de los dispositivos, asegúrese de revisar la información al respecto Elección de un protocolo de aplicación para la comunicación entre dispositivos para poder tomar una decisión informada sobre qué protocolo utilizar para las comunicaciones de su dispositivo.
Sesiones persistentes
En la aplicación de ejemplo, si se establece el parámetro clean_session
en False
indica que la conexión debe ser persistente. En la práctica, esto significa que la conexión abierta por esta llamada se vuelve a conectar a una sesión persistente existente, si existe alguna. De lo contrario, crea una nueva sesión persistente y se conecta a ella.
Con una sesión persistente, el agente de mensajes almacena los mensajes que se envían al dispositivo mientras el dispositivo no está conectado. Cuando un dispositivo se vuelve a conectar a una sesión persistente, el agente de mensajes envía al dispositivo todos los mensajes almacenados a los que se haya suscrito.
Sin una sesión persistente, el dispositivo no recibirá los mensajes que se envíen mientras no esté conectado. La opción que utilices dependerá de la aplicación que utilices y de si es necesario comunicar los mensajes que se produzcan mientras el dispositivo no está conectado. Para obtener más información, consulte Sesiones persistentes de MQTT.
Calidad de servicio
Cuando el dispositivo publica mensajes y se suscribe a ellos, se puede establecer la calidad de servicio (QoS) preferida. AWS IoT admite los niveles de QoS 0 y 1 para las operaciones de publicación y suscripción. Para obtener más información sobre los niveles de QoS en AWS IoT, consulte. Opciones de calidad de servicio (QoS) de MQTT
El AWS CRT tiempo de ejecución de Python define estas constantes para los niveles de QoS que admite:
MQTTNivel de QoS | Valor simbólico de Python utilizado por SDK | Descripción |
---|---|---|
QoS nivel 0 | mqtt.QoS.AT_MOST_ONCE |
Solo se intentará enviar el mensaje una vez, tanto si se recibe como si no. Es posible que el mensaje no se envíe en absoluto, por ejemplo, si el dispositivo no está conectado o si hay un error de red. |
QoS nivel 1 | mqtt.QoS.AT_LEAST_ONCE |
El mensaje se envía repetidamente hasta que se recibe un acuse de recibo PUBACK . |
En la aplicación de ejemplo, las solicitudes de publicación y suscripción se realizan con un nivel de QoS de 1 (mqtt.QoS.AT_LEAST_ONCE
).
-
QoS al publicar
Cuando un dispositivo publica un mensaje con el nivel 1 de QoS, envía el mensaje repetidamente hasta que recibe una respuesta
PUBACK
del agente de mensajes. Si el dispositivo no está conectado, el mensaje queda en cola para enviarse una vez que se vuelva a conectar. -
QoS al suscribirse
Cuando un dispositivo se suscribe a un mensaje con QoS de nivel 1, el agente de mensajes guarda los mensajes a los que está suscrito el dispositivo hasta que se puedan enviar al dispositivo. El agente de mensajes vuelve a enviar los mensajes hasta que recibe una respuesta
PUBACK
del dispositivo.
Publicación de mensajes
Tras establecer correctamente una conexión con AWS IoT Core, los dispositivos pueden publicar mensajes. La muestra pubsub.py
lo hace llamando a la operación publish
de la cosa mqtt_connection
.
mqtt_connection.publish( topic=args.topic, payload=message, qos=mqtt.QoS.AT_LEAST_ONCE )
topic
El nombre del tema del mensaje que lo identifica
En la aplicación de ejemplo, este se transfiere desde la línea de comandos.
payload
La carga útil del mensaje está formateada como una cadena (por ejemplo, un JSON documento)
En la aplicación de ejemplo, este se transfiere desde la línea de comandos.
Un JSON documento es un formato de carga útil común y otros AWS IoT servicios lo reconocen; sin embargo, el formato de datos de la carga útil del mensaje puede ser cualquier formato que acuerden los editores y los suscriptores. Sin embargo, otros AWS IoT servicios solo reconocen yJSON, en algunos casosCBOR, para la mayoría de las operaciones.
qos
El nivel de QoS de este mensaje
Suscripción a mensajes
Para recibir mensajes de otros servicios AWS IoT y dispositivos, los dispositivos se suscriben a esos mensajes por el nombre del tema. Los dispositivos pueden suscribirse a mensajes individuales especificando un nombre de tema y a un grupo de mensajes especificando un filtro de tema, que puede incluir caracteres comodín. En el ejemplo pubsub.py
, se utiliza el código que se muestra aquí para suscribirse a los mensajes y registrar las funciones de devolución de llamada para procesar el mensaje una vez recibido.
subscribe_future, packet_id = mqtt_connection.subscribe( topic=args.topic, qos=mqtt.QoS.AT_LEAST_ONCE, callback=on_message_received ) subscribe_result = subscribe_future.result()
topic
El tema al que suscribirse. Puede ser el nombre de un tema o un filtro de tema.
En la aplicación de ejemplo, este se transfiere desde la línea de comandos.
qos
Si el agente de mensajes debe almacenar estos mensajes mientras el dispositivo está desconectado.
Un valor de
mqtt.QoS.AT_LEAST_ONCE
(nivel de QoS 1) requiere que se especifique una sesión persistente (clean_session=False
) al crear la conexión.callback
La función a la que se debe llamar para procesar el mensaje suscrito.
La función mqtt_connection.subscribe
devuelve un futuro y un ID de paquete. Si la solicitud de suscripción se inició correctamente, el identificador del paquete devuelto es superior a 0. Para asegurarse de que el agente de mensajes recibió y registró la suscripción, debe esperar a que se devuelva el resultado de la operación asíncrona, como se muestra en el ejemplo de código.
Función de devolución de llamada
La devolución de llamada del ejemplo pubsub.py
procesa los mensajes suscritos a medida que el dispositivo los recibe.
def on_message_received(topic, payload, **kwargs): print("Received message from topic '{}': {}".format(topic, payload)) global received_count received_count += 1 if received_count == args.count: received_all_event.set()
topic
-
El tema del mensaje
Es el nombre del tema específico del mensaje recibido, incluso si te has suscrito a un filtro de temas.
payload
-
La carga útil del mensaje
El formato es específico de la aplicación.
kwargs
Posibles argumentos adicionales, tal como se describe en
mqtt.Connection.subscribe
.
En el ejemplo pubsub.py
, on_message_received
solo muestra el tema y su carga útil. También cuenta los mensajes recibidos para finalizar el programa una vez alcanzado el límite.
Su aplicación evaluaría el tema y la carga útil para determinar qué acciones debe realizar.
Desconexión y reconexión del dispositivo
El ejemplo pubsub.py
incluye funciones de devolución de llamada que se invocan cuando el dispositivo se desconecta y cuando se restablece la conexión. Las acciones que realiza el dispositivo ante estos eventos son específicas de la aplicación.
Cuando un dispositivo se conecta por primera vez, debe suscribirse a los temas para poder recibirlos. Si la sesión de un dispositivo está presente cuando se vuelve a conectar, sus suscripciones se restauran y todos los mensajes almacenados en esas suscripciones se envían al dispositivo una vez que se vuelve a conectar.
Si la sesión de un dispositivo ya no existe cuando se vuelve a conectar, debe volver a suscribirse a sus suscripciones. Las sesiones persistentes tienen una vida útil limitada y pueden caducar si el dispositivo se desconecta durante demasiado tiempo.
Conecta tu dispositivo y comunícate con AWS IoT Core
En esta sección se presentan algunos ejercicios que le ayudarán a explorar diferentes aspectos de la conexión del dispositivo a AWS IoT Core. Para estos ejercicios, utilizarás el cliente de MQTT pruebapubsub.py
En esta sección, realizará las siguientes acciones:
Para estos ejercicios, empezará con el programa de ejemplo pubsub.py
.
nota
En estos ejercicios se presupone que ha completado los tutoriales Cómo empezar con AWS IoT Core los tutoriales y ha utilizado la ventana de terminal del dispositivo que aparece en ese tutorial.
Suscríbase a los filtros de temas comodín
En este ejercicio, modificará la línea de comandos utilizada para llamar a pubsub.py
para suscribirse a un filtro de temas comodín y procesará los mensajes recibidos en función del tema del mensaje.
Procedimiento del ejercicio
Para este ejercicio, imagine que su dispositivo contiene un control de temperatura y un control de luz. Utiliza estos nombres de temas para identificar los mensajes sobre ellos.
-
Antes de empezar el ejercicio, intente ejecutar este comando de los tutoriales Cómo empezar con AWS IoT Core los tutoriales del dispositivo para asegurarse de que todo está listo para el ejercicio.
cd ~/aws-iot-device-sdk-python-v2/samples python3 pubsub.py --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint
your-iot-endpoint
Debería ver el mismo resultado que en el tutorial de introducción.
-
Para este ejercicio, cambie estos parámetros de la línea de comandos.
Acción
Parámetro de línea de comando
Efecto
agregar
--message
""
Configure
pubsub.py
para escuchar soloagregar
--count
2
Finalice el programa después de recibir dos mensajes
cambiar
--topic
device/+/details
Defina el filtro de tema al que desea suscribirse
Al realizar estos cambios en la línea de comandos inicial, se obtiene esta línea de comandos. Introduzca este comando en la ventana del terminal de su dispositivo.
python3 pubsub.py --message "" --count 2 --topic device/+/details --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint
your-iot-endpoint
El programa debe mostrar algo similar al siguiente:
Connecting to a3qexamplesffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-24d7cdcc-cc01-458c-8488-2d05849691e1'... Connected! Subscribing to topic 'device/+/details'... Subscribed with QoS.AT_LEAST_ONCE Waiting for all messages to be received...
Si ve algo como esto en su terminal, su dispositivo está listo y a la escucha de mensajes cuyos nombres de tema empiecen por
device
y terminen por/detail
. Así que, vamos a probarlo. -
Aquí hay un par de mensajes que su dispositivo podría recibir.
Nombre del tema
Carga útil de mensaje
device/temp/details
{ "desiredTemp": 20, "currentTemp": 15 }
device/light/details
{ "desiredLight": 100, "currentLight": 50 }
-
Con el cliente de MQTT prueba de la AWS IoT consola, envíe los mensajes descritos en el paso anterior a su dispositivo.
-
Abre el cliente MQTT de prueba
en la AWS IoT consola. -
En Suscribirse a un tema, en el campo Tema de suscripción escriba
device/+/details
y, a continuación, elija Suscribirse al tema. -
En la columna Suscripciones del cliente de MQTT prueba, selecciona device/+/details.
-
Para cada uno de los temas de la tabla anterior, haga lo siguiente en el cliente de prueba: MQTT
-
En Publicar, introduzca el valor de la columna Nombre del tema de la tabla.
-
En el campo de carga útil del mensaje situado debajo del nombre del tema, introduzca el valor de la columna de carga útil del mensaje de la tabla.
-
Observe la ventana del terminal en la que
pubsub.py
se está ejecutando y, en el cliente de MQTT prueba, elija Publicar en tema.
Debería ver que el mensaje ha sido recibido por
pubsub.py
en la ventana del terminal. -
-
Resultado del ejercicio
Con esto, pubsub.py
, se suscribió a los mensajes mediante un filtro de temas comodín, los recibió y los mostró en la ventana del terminal. Observa cómo te has suscrito a un único filtro de temas y que se ha llamado a la función de devolución de llamada para procesar los mensajes que tienen dos temas distintos.
Procesar suscripciones de filtro de temas
Basándose en el ejercicio anterior, modifique la aplicación de ejemplo pubsub.py
para evaluar los temas de los mensajes y procesar los mensajes suscritos en función del tema.
Procedimiento del ejercicio
Para evaluar el tema del mensaje
-
Copie
pubsub.py
enpubsub2.py
. -
Ábrelo
pubsub2.py
en tu editor de texto favorito oIDE. -
En
pubsub2.py
, busque la funciónon_message_received
. -
En
on_message_received
, inserte el siguiente código después de la línea que empieza porprint("Received message
y antes de la línea que empieza porglobal received_count
.topic_parsed = False if "/" in topic: parsed_topic = topic.split("/") if len(parsed_topic) == 3: # this topic has the correct format if (parsed_topic[0] == 'device') and (parsed_topic[2] == 'details'): # this is a topic we care about, so check the 2nd element if (parsed_topic[1] == 'temp'): print("Received temperature request: {}".format(payload)) topic_parsed = True if (parsed_topic[1] == 'light'): print("Received light request: {}".format(payload)) topic_parsed = True if not topic_parsed: print("Unrecognized message topic.")
-
Guarde los cambios y ejecute el programa modificado mediante esta línea de comandos.
python3 pubsub2.py --message "" --count 2 --topic device/+/details --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint
your-iot-endpoint
-
En la AWS IoT consola, abre el cliente MQTT de prueba
. -
En Suscribirse a un tema, en el campo Tema de suscripción escriba
device/+/details
y, a continuación, elija Suscribirse al tema. -
En la columna Suscripciones del cliente de MQTT prueba, selecciona device/+/details.
-
Para cada uno de los temas de esta tabla, haga lo siguiente en el cliente de prueba: MQTT
Nombre del tema
Carga útil de mensaje
device/temp/details
{ "desiredTemp": 20, "currentTemp": 15 }
device/light/details
{ "desiredLight": 100, "currentLight": 50 }
-
En Publicar, introduzca el valor de la columna Nombre del tema de la tabla.
-
En el campo de carga útil del mensaje situado debajo del nombre del tema, introduzca el valor de la columna de carga útil del mensaje de la tabla.
-
Observe la ventana del terminal en la que
pubsub.py
se está ejecutando y, en el cliente de MQTT prueba, elija Publicar en el tema.
Debería ver que el mensaje ha sido recibido por
pubsub.py
en la ventana del terminal. -
Debería ver algo similar a esto en la ventana de su terminal.
Connecting to a3qexamplesffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-af794be0-7542-45a0-b0af-0b0ea7474517'... Connected! Subscribing to topic 'device/+/details'... Subscribed with QoS.AT_LEAST_ONCE Waiting for all messages to be received... Received message from topic 'device/light/details': b'{ "desiredLight": 100, "currentLight": 50 }' Received light request: b'{ "desiredLight": 100, "currentLight": 50 }' Received message from topic 'device/temp/details': b'{ "desiredTemp": 20, "currentTemp": 15 }' Received temperature request: b'{ "desiredTemp": 20, "currentTemp": 15 }' 2 message(s) received. Disconnecting... Disconnected!
Resultado del ejercicio
En este ejercicio, ha añadido código para que la aplicación de ejemplo reconozca y procese varios mensajes en la función de devolución de llamada. Con ello, su dispositivo podrá recibir mensajes y actuar en consecuencia.
Otra forma de que el dispositivo reciba y procese varios mensajes consiste en suscribirse a distintos mensajes por separado y asignar cada suscripción a su propia función de devolución de llamada.
Publique mensajes desde su dispositivo
Puede utilizar la aplicación de ejemplo pubsub.py para publicar mensajes desde su dispositivo. Si bien publicará los mensajes tal como están, los mensajes no se pueden leer como JSON documentos. Este ejercicio modifica la aplicación de ejemplo para poder publicar JSON documentos en la carga útil de mensajes que se puedan leer con ellos. AWS IoT Core
Procedimiento del ejercicio
En este ejercicio, se enviará el siguiente mensaje con el tema device/data
.
{ "timestamp": 1601048303, "sensorId": 28, "sensorData": [ { "sensorName": "Wind speed", "sensorValue": 34.2211224 } ] }
Para preparar al cliente MQTT de prueba para que supervise los mensajes de este ejercicio
-
En Suscribirse a un tema, en el campo Tema de suscripción escriba
device/data
y, a continuación, elija Suscribirse al tema. -
En la columna Suscripciones del cliente de MQTT prueba, selecciona dispositivo/datos.
-
Mantén abierta la ventana del cliente de MQTT prueba para esperar a que lleguen los mensajes de tu dispositivo.
Para enviar JSON documentos con la aplicación de ejemplo pubsub.py
-
En su dispositivo, copie
pubsub.py
enpubsub3.py
. -
Edite
pubsub3.py
para cambiar el formato de los mensajes que publica.-
Abra
pubsub3.py
en un editor de texto. -
Localice esta línea de código:
message = "{} [{}]".format(message_string, publish_count)
-
Cambie a:
message = "{}".format(message_string)
-
Localice esta línea de código:
message_json = json.dumps(message)
-
Cambie a:
message = "{}".json.dumps(json.loads(message))
-
Guarde los cambios.
-
-
En su dispositivo, ejecute este comando para enviar el mensaje dos veces.
python3 pubsub3.py --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --topic device/data --count 2 --message '{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}' --endpoint
your-iot-endpoint
-
En el cliente de MQTT prueba, compruebe que ha interpretado y formateado el JSON documento de la carga útil del mensaje, por ejemplo:
De forma predeterminada, pubsub3.py
también se suscribe a los mensajes que envía. Debería ver que recibió los mensajes en la salida de la aplicación. La ventana de la terminal debe tener un aspecto similar al siguiente.
Connecting to a3qEXAMPLEsffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-5cff18ae-1e92-4c38-a9d4-7b9771afc52f'... Connected! Subscribing to topic 'device/data'... Subscribed with QoS.AT_LEAST_ONCE Sending 2 message(s) Publishing message to topic 'device/data': {"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]} Received message from topic 'device/data': b'{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}' Publishing message to topic 'device/data': {"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]} Received message from topic 'device/data': b'{"timestamp":1601048303,"sensorId":28,"sensorData":[{"sensorName":"Wind speed","sensorValue":34.2211224}]}' 2 message(s) received. Disconnecting... Disconnected!
Resultado del ejercicio
De este modo, el dispositivo puede generar mensajes para enviarlos AWS IoT Core a fin de probar la conectividad básica y proporcionar mensajes al dispositivo AWS IoT Core para su procesamiento. Por ejemplo, puedes usar esta aplicación para enviar datos de prueba desde tu dispositivo para probar las acciones de las AWS IoT reglas.
Revisión de los resultados.
Los ejemplos de este tutorial le proporcionaron una experiencia práctica sobre los conceptos básicos de cómo los dispositivos pueden comunicarse con ellos AWS IoT Core, una parte fundamental de su AWS IoT solución. Cuando sus dispositivos pueden comunicarse AWS IoT Core, pueden enviar mensajes a los AWS servicios y otros dispositivos desde los que pueden actuar. Del mismo modo, AWS los servicios y otros dispositivos pueden procesar información que resulta en el envío de mensajes a tus dispositivos.
Cuando esté listo para AWS IoT Core seguir explorando, pruebe estos tutoriales: