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 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.
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 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 aplicables a cualquier dispositivo que se conecte a AWS IoT Core.
Para conectar un dispositivo a AWS IoT Core:
-
Debe tener una Cuenta de AWS.
El procedimiento de Configurar Cuenta de AWS describe cómo crear una Cuenta de AWS si aún no dispone de una.
-
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.
-
-
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
. -
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 Elegir un protocolo de aplicación para la comunicación de su dispositivo.
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.
La aplicación de ejemplo pubsub.py muestra estos aspectos de una conexión MQTT 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
MQTT
Las llamadas de ejemplo pubsub.py
mtls_from_path
(mostradas aquí) en el mqtt_connection_builder
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
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 Elegir un protocolo de aplicación para la comunicación de su dispositivo 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 MQTTsesiones persistentes.
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 MQTTOpciones de calidad de servicio (QoS).
El tiempo de ejecución CRT de AWS para Python define estas constantes para los niveles de QoS que admite:
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 MQTTpubsub.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 prueba de MQTT de la consola AWS IoT, envíe los mensajes descritos en el paso anterior a su dispositivo.
-
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 prueba de MQTT, elija device/+/details.
-
Para cada uno de los temas de la tabla anterior, haga lo siguiente en el cliente de prueba de 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 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
-
Copie
pubsub.py
enpubsub2.py
. -
Abra
pubsub2.py
en el editor de texto o IDE. -
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 consola de AWS IoT, abra el cliente de prueba MQTT
. -
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 prueba de MQTT, elija device/+/details.
-
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 }
-
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 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
-
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 prueba MQTT, elija device/data.
-
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
-
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 prueba de MQTT, compruebe que ha interpretado y formateado el documento JSON de la carga útil del mensaje, de la siguiente manera:
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: