Comunicación con su DPS mediante el protocolo MQTT

DPS permite que los dispositivos se comuniquen con el punto final del dispositivo DPS mediante:

DPS no es un agente MQTT completo y no admite todos los comportamientos especificados en la norma MQTT v3.1.1. En este artículo se describe la manera en que los dispositivos pueden utilizar comportamientos admitidos de MQTT para comunicarse con DPS.

Toda comunicación de los dispositivos con DPS se debe proteger mediante TLS/SSL. Por lo tanto, DPS no admite conexiones no seguras a través del puerto 1883.

Nota

Actualmente, DPS no admite dispositivos que utilizan el mecanismo de certificación TPM a través del protocolo MQTT.

Conexión a DPS

Un dispositivo puede usar el protocolo MQTT para conectarse a un centro de DPS mediante cualquiera de las opciones siguientes.

Uso del protocolo MQTT directamente (como un dispositivo)

Si un dispositivo no puede usar los SDK de dispositivo, tendrá la posibilidad de conectarse a los puntos de conexión públicos del dispositivo mediante el protocolo MQTT en el puerto 8883. En el paquete CONNECT el dispositivo debe usar los siguientes valores:

  • Para el campo ClientId, use registrationId.

  • Para el campo Nombre de usuario use {idScope}/registrations/{registration_id}/api-version=2019-03-31, donde {idScope} es el idScope del DPS.

  • Para el campo Contraseña , use un token SAS. El formato del token de SAS es el mismo que para los protocolos HTTPS y AMQP:

    SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn=registration El resourceURI debe tener el formato {idScope}/registrations/{registration_id}. El nombre de la directiva debe ser registration.

    Nota

    Las contraseñas de token de SAS no son necesarias si utiliza la autenticación de certificados X.509.

    Para obtener más información sobre cómo generar tokens SAS, consulte la sección de tokens de seguridad de Control de acceso a DPS.

A continuación se muestra una lista de comportamientos específicos de la implementación de DPS:

  • DPS no admite la funcionalidad del indicador CleanSession que se establece en 0.

  • Cuando una aplicación de dispositivo se suscribe a un tema con QoS 2, DPS concede el nivel de QoS máximo 1 en el paquete SUBACK. Después de eso, DPS envía mensajes al dispositivo con QoS 1.

Configuración de TLS/SSL

Para usar el protocolo MQTT directamente, el cliente debe conectarse mediante TLS 1.2. Si intenta omitir este paso, se producirá un error con errores de conexión.

Registro de un dispositivo

Para registrar un dispositivo mediante DPS, un dispositivo debe suscribirse mediante $dps/registrations/res/# como un filtro de tema. El comodín de varios niveles # en el filtro de tema solo se utiliza para permitir que el dispositivo reciba propiedades adicionales en el nombre del tema. DPS no permite el uso de los caracteres comodín # o ? para el filtrado de subtemas. Puesto que DPS no es un agente de mensajería de publicación-suscripción de propósito general, solo admite los filtros de tema y los nombres de tema documentados.

El dispositivo debe publicar un mensaje de registro en DPS mediante $dps/registrations/PUT/iotdps-register/?$rid={request_id} como Nombre del tema. La carga útil debe contener el objeto Registro de dispositivo en formato JSON. En un escenario exitoso, el dispositivo recibirá una respuesta sobre el nombre del tema $dps/registrations/res/202/?$rid={request_id}&retry-after=x donde x es el valor de reintento en segundos. La carga útil de la respuesta contendrá el objeto RegistrationOperationStatus en formato JSON.

Sondeo para el estado de la operación de registro

El dispositivo debe sondear el servicio periódicamente para recibir el resultado de la operación de registro del dispositivo. Suponiendo que el dispositivo ya se ha suscrito al tema $dps/registrations/res/# como se indicó anteriormente, puede publicar un mensaje Get operationstatus en el nombre del tema $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId}. El identificador de operación de este mensaje debe ser el valor recibido en el mensaje de respuesta RegistrationOperationStatus en el paso anterior. En el caso de que se realice correctamente, el servicio responderá en el tema $dps/registrations/res/200/?$rid={request_id}. La carga útil de la respuesta contendrá el objeto RegistrationOperationStatus. El dispositivo debe seguir sondeando el servicio si el código de respuesta es 202 después de un retraso igual al período de reintento. La operación de registro del dispositivo es exitosa si el servicio devuelve un código de estado 200.

Conexión a través de Websocket

Al conectarse a través de Websocket, especifique el subprotocolo como mqtt. Siga RFC 6455.

Pasos siguientes

Para obtener más información sobre el protocolo MQTT, consulte la documentación de MQTT.

Para explorar aún más las funcionalidades de DPS, consulte: