Tutorial: Conexión de un dispositivo a AWS IoT Core mediante el AWS IoT dispositivo SDK - 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 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.

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:

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

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

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

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

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) proporciona compatibilidad con el protocolo de comunicación de bajo nivel y se incluye con AWS IoT Device SDK v2 para Python.

MQTT

El pubsub.py ejemplo de llamadas mtls_from_path (que se muestra aquí) es mqtt_connection_builderpara establecer una conexión AWS IoT Core mediante el MQTT protocolo. mtls_from_pathutiliza 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_builderpara establecer una conexión con el AWS IoT Core uso del MQTT protocolo overWSS. websockets_with_default_aws_signingcrea 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:

Niveles de calidad de servicio de Python
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 prueba de la AWS IoT consola para ver lo que publica el dispositivo y publicar los mensajes en el dispositivo. Estos ejercicios utilizan el pubsub.pyejemplo de AWS IoT Device SDK v2 para Python y se basan en su experiencia con Cómo empezar con AWS IoT Core los tutoriales los tutoriales.

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.

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

  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 MQTT prueba de la AWS IoT consola, envíe los mensajes descritos en el paso anterior a su dispositivo.

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

    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 MQTT prueba, selecciona device/+/details.

    4. Para cada uno de los temas de la tabla anterior, haga lo siguiente en el cliente de prueba: 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 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
  1. Copie pubsub.py en pubsub2.py.

  2. Ábrelo pubsub2.py en tu editor de texto favorito oIDE.

  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 AWS IoT consola, abre el cliente MQTT de prueba.

  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 MQTT prueba, selecciona device/+/details.

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

    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 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
  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 MQTT prueba, selecciona dispositivo/datos.

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

    Imagen que muestra cómo se muestra la carga útil de un JSON mensaje en el MQTT cliente de la consola. 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

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: