Tutorial: Conexión de un dispositivo a AWS IoT Core mediante el SDK AWS IoT de dispositivo - AWS IoT Core

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 SDK AWS IoT de dispositivo

En este tutorial se 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 AWS IoT.

En este tutorial, podrá:

Este tutorial tarda aproximadamente una hora en completarse.

Antes de empezar este tutorial, asegúrese de que ha:
  • Finalizado Empezar con AWS IoT Core

    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.

    Mantenga abierta la ventana de terminal que utilizó en ese tutorial porque también la utilizará en este.

  • Un dispositivo que puede ejecutar el SDK de dispositivo AWS IoT 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 dicho caso, es posible que tenga más éxito con el tutorial Tutorial: Uso del AWS IoT Device SDK para Embedded C.

Preparar los dispositivos para AWS IoT

En Empezar con AWS IoT Core, preparó su dispositivo y su cuenta AWS para que pudieran comunicarse. En esta sección se analizan los aspectos de esa preparación aplicables a cualquier dispositivo que se conecte a AWS IoT Core.

Para conectar un dispositivo a AWS IoT Core:

  1. Debe tener una Cuenta de AWS.

    El procedimiento de Configure su Cuenta de AWS describe cómo crear una Cuenta de AWS si aún no dispone de una.

  2. En esa cuenta, debe tener definidos los siguientes recursos AWS IoT para el dispositivo de su Cuenta de AWS y su 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 es necesario conectar un objeto a otro dispositivo AWS IoT, este pone a disposición del dispositivo AWS IoT funciones adicionales.

    • Una política adjunta al certificado del dispositivo que lo autoriza a conectarse a AWS IoT Core y realizar todas las acciones que desee.

  3. Una conexión a Internet que pueda acceder a los puntos de conexión del dispositivo Cuenta de AWS.

    Los puntos de conexión de los dispositivos se describen en AWS IoT datos del dispositivo y puntos finales de servicio y pueden verse en la página de ajustes de la consola de AWS IoT.

  4. Software de comunicación, como el que proporcionan los SDK AWS IoT de dispositivo. En este tutorial se utiliza el SDK de AWS IoT dispositivo v2 para Python.

Revise el protocolo MQTT

Antes de hablar de la aplicación de ejemplo, es útil entender el protocolo MQTT. El protocolo MQTT ofrece algunas ventajas sobre otros protocolos de comunicación de red, como HTTP, que lo convierten en una opción popular para los dispositivos IoT. En esta sección se analizan los aspectos clave del MQTT aplicables a este tutorial. Para obtener información sobre la comparación entre MQTT y HTTP, consulte Elección de un protocolo para la comunicación entre dispositivos.

MQTT utiliza un modelo de comunicación publicar/suscribir

El protocolo MQTT utiliza un modelo de comunicación de publicación/suscripción con su host. Este modelo difiere del modelo de solicitud/respuesta que utiliza HTTP. Con MQTT, 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.

MQTT admite 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. En cuanto al dispositivo, MQTT admite niveles de calidad de servicio (QoS) que garantizan que el host reciba los mensajes enviados por el dispositivo.

Consulte la aplicación de ejemplo del SDK de dispositivo pubsub.py

En esta sección se revisa la aplicación de ejemplo pubsub.py del SDK de dispositivos AWS IoT v2 para Python utilizada en este tutorial. Aquí veremos cómo se conecta a AWS IoT Core para publicar y suscribirse a los mensajes de MQTT. 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 AWS IoT Core.

Protocolos de comunicación

En el ejemplo pubsub.py se muestra una conexión MQTT mediante los protocolos MQTT y MQTT sobre WSS. La biblioteca de tiempo de ejecución común de AWS (AWS-CRT) proporciona el soporte de protocolo de comunicación de bajo nivel y se incluye con el SDK de dispositivos AWS IoT v2 para Python.

MQTT

Las llamadas de ejemplo pubsub.py mtls_from_path (mostradas aquí) en el mqtt_connection_builder para establecer una conexión con AWS IoT Core mediante el protocolo MQTT. mtls_from_path utiliza certificados X.509 y TLS v1.2 para autenticar el dispositivo. La biblioteca CRT AWS 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 de conexión de su dispositivo IoT Cuenta de AWS

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 servidor MQTT 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.

MQTT a través de WSS

La muestra pubsub.py llama a websockets_with_default_aws_signing (se muestra aquí) en el mqtt_connection_builder para establecer una conexión con AWS IoT Core utilizando el protocolo MQTT sobre WSS. websockets_with_default_aws_signing crea una conexión MQTT sobre WSS utilizando 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 de conexión 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 firma AWS 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 credenciales AWS 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

Opciones del proxy HTTP, si 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. Solo es obligatorio si el servidor MQTT 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

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, se supone que se ha perdido la conexión.

HTTPS

¿Qué pasa con HTTPS? AWS IoT Core admite dispositivos que publican solicitudes HTTPS. Desde el punto de vista de la programación, los dispositivos envían solicitudes HTTPS a AWS IoT Core igual que cualquier otra aplicación. Para ver un ejemplo de un programa de Python que envía un mensaje HTTP desde un dispositivo, consulta el ejemplo de código HTTPS con la biblioteca requests de Python. En este ejemplo, se envía un mensaje a AWS IoT Core mediante HTTPS de forma que AWS IoT Core lo interpreta como un mensaje MQTT.

Si bien AWS IoT Core es compatible con las solicitudes HTTPS de los dispositivos, asegúrese de revisar la información sobre Elección de un protocolo 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 IoTadmite los niveles de QoS 0 y 1 para las operaciones de publicación y suscripción. Para obtener más información acerca de los niveles de QoS en AWS IoT, consulte Opciones de calidad de servicio (QoS) de MQTT.

El tiempo de ejecución CRT de AWS para Python define estas constantes para los niveles de QoS que admite:

Niveles de calidad de servicio de Python
Nivel de QoS de MQTT Valor simbólico de Python utilizado por el 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 documento JSON)

En la aplicación de ejemplo, este se transfiere desde la línea de comandos.

Un documento JSON es un formato de carga útil común y otros servicios AWS IoT 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 servicios AWS IoT solo reconocen JSON y, en algunos casos, CBOR para la mayoría de las operaciones.

qos

El nivel de QoS de este mensaje

Suscripción a mensajes

Para recibir mensajes de AWS IoT y otros servicios 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.

Conecte su dispositivo y comuníquese 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á el cliente de pruebas MQTT de la consola de AWS IoT para ver lo que publica el dispositivo y publicar los mensajes en el dispositivo. Estos ejercicios utilizan el ejemplo pubsub.py del SDK AWS IoT de dispositivo v2 para Python y se basan en su experiencia con los tutoriales Empezar con AWS IoT Core.

Para estos ejercicios, empezará con el programa de ejemplo pubsub.py.

nota

En estos ejercicios se presupone que ha completado los tutoriales Empezar con AWS IoT Core 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.

  1. Antes de empezar el ejercicio, intente ejecutar este comando de los tutoriales Empezar con AWS IoT Core 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.

  2. 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 solo

    agregar

    --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.

  3. 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 }

  4. Con el cliente de prueba de MQTT de la consola AWS IoT, envíe los mensajes descritos en el paso anterior a su dispositivo.

    1. Abra el cliente de prueba de MQTT en la consola de AWS IoT.

    2. En Suscribirse a un tema, en el campo Tema de suscripción escriba device/+/details y, a continuación, elija Suscribirse al tema.

    3. En la columna Suscripciones del cliente de prueba de MQTT, elija device/+/details.

    4. Para cada uno de los temas de la tabla anterior, haga lo siguiente en el cliente de prueba de MQTT:

      1. En Publicar, introduzca el valor de la columna Nombre del tema de la tabla.

      2. 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.

      3. Observe la ventana del terminal en la que pubsub.py se está ejecutando y, en el cliente de prueba de MQTT, elija Publicar en un 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
  1. Copie pubsub.py en pubsub2.py.

  2. Abra pubsub2.py en el editor de texto o IDE.

  3. En pubsub2.py, busque la función on_message_received.

  4. En on_message_received, inserte el siguiente código después de la línea que empieza por print("Received message y antes de la línea que empieza por global 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.")
  5. 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
  6. En la consola de AWS IoT, abra el cliente de prueba MQTT.

  7. En Suscribirse a un tema, en el campo Tema de suscripción escriba device/+/details y, a continuación, elija Suscribirse al tema.

  8. En la columna Suscripciones del cliente de prueba de MQTT, elija device/+/details.

  9. Para cada uno de los temas de la tabla, haga lo siguiente en el cliente de prueba de MQTT:

    Nombre del tema

    Carga útil de mensaje

    device/temp/details

    { "desiredTemp": 20, "currentTemp": 15 }

    device/light/details

    { "desiredLight": 100, "currentLight": 50 }

    1. En Publicar, introduzca el valor de la columna Nombre del tema de la tabla.

    2. 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.

    3. Observe la ventana del terminal en la que pubsub.py se está ejecutando y, en el cliente de prueba de MQTT, elija Publicar en un 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. Aunque publicará los mensajes tal cual, éstos no podrán leerse como documentos JSON. Este ejercicio modifica la app de ejemplo para poder publicar documentos JSON en la carga útil del mensaje que puedan ser leídos por 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 su cliente de pruebas de MQTT para supervisar los mensajes de este ejercicio
  1. En Suscribirse a un tema, en el campo Tema de suscripción escriba device/data y, a continuación, elija Suscribirse al tema.

  2. En la columna Suscripciones del cliente de prueba MQTT, elija device/data.

  3. Mantenga abierta la ventana del cliente de prueba de MQTT para esperar a que lleguen los mensajes de su dispositivo.

Para enviar documentos JSON con la aplicación de ejemplo pubsub.py
  1. En su dispositivo, copie pubsub.py enpubsub3.py.

  2. Edite pubsub3.py para cambiar el formato de los mensajes que publica.

    1. Abra pubsub3.py en un editor de texto.

    2. Localice esta línea de código:

      message = "{} [{}]".format(message_string, publish_count)

    3. Cambie a:

      message = "{}".format(message_string)

    4. Localice esta línea de código:

      message_json = json.dumps(message)

    5. Cambie a:

      message = "{}".json.dumps(json.loads(message))

    6. Guarde los cambios.

  3. 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
  4. En el cliente de prueba de MQTT, compruebe que ha interpretado y formateado el documento JSON de la carga útil del mensaje, de la siguiente manera:

    
                                Imagen que muestra cómo se muestra la carga útil de un mensaje JSON en el cliente MQTT de la consola de AWS IoT.

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

Con esto, su dispositivo puede generar mensajes para enviar a AWS IoT Core para probar la conectividad básica y proporcionar mensajes de dispositivo para AWS IoT Core para procesar. Por ejemplo, puedes usar esta aplicación para enviar datos de prueba desde tu dispositivo para probar las acciones de las reglas AWS IoT.

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 AWS IoT Core, una parte fundamental de su solución AWS IoT. Cuando sus dispositivos pueden comunicarse con AWS IoT Core, pueden enviar mensajes a los servicios AWS y otros dispositivos desde los que pueden actuar. Del mismo modo, los servicios AWS y otros dispositivos pueden procesar información que resulta en el envío de mensajes a tus dispositivos.

Cuando esté listo para seguir explorando AWS IoT Core, pruebe estos tutoriales: