Creación y lectura de mensajes de IoT Hub

Para admitir la interoperabilidad entre protocolos, IoT Hub define un conjunto común de características de mensajería que están disponibles en todos los protocolos accesibles desde el dispositivo. Estas características se pueden usar en mensajes de dispositivo a nube y mensajes de nube a dispositivo.

Nota:

Algunas de las características que se mencionan en este artículo, como la mensajería de la nube al dispositivo, los dispositivos gemelos y la administración de dispositivos, solo están disponibles en el nivel estándar de IoT Hub. Para obtener más información sobre los niveles Básico y Estándar o Gratis de IoT Hub, consulte Elección del nivel adecuado de IoT Hub para la solución.

IoT Hub implementa mensajería de dispositivo a nube mediante un patrón de mensajería de streaming. Los mensajes de dispositivo a nube de IoT Hub son más parecidos a eventos de Event Hubs que a mensajes de Service Bus en que hay un gran volumen de eventos que se pasan mediante el servicio que pueden leer varios lectores.

Un mensaje IoT Hub consta de:

  • Un conjunto predeterminado de propiedades del sistema, como se describe más adelante en este artículo.

  • Un conjunto de propiedades de la aplicación. Diccionario de propiedades de cadena que la aplicación puede definir y a las que puede acceder sin necesidad de deserializar el cuerpo del mensaje. IoT Hub nunca modifica estas propiedades.

  • Un cuerpo de mensaje, que puede contener cualquier tipo de datos.

Cada protocolo de dispositivo implementa las propiedades de configuración de maneras diferentes. Para más información, consulte las guías para desarrolladores Guía del protocolo MQTT y Guía del protocolo AMQP.

Cuando envíe mensajes de dispositivo a nube usando el protocolo HTTPS o envíe mensajes de nube a dispositivo, los nombres y valores de las propiedades solo pueden contener caracteres alfanuméricos ASCII, además de ! # $ % & ' * + - . ^ _ ` | ~.

La mensajería de dispositivo a nube con IoT Hub tiene las siguientes características:

  • Los mensajes de dispositivo a nube son duraderos y se conservan en el punto de conexión messages/events predeterminado de una instancia de IoT Hub hasta siete días.

  • Los mensajes de dispositivo a nube pueden tener como máximo 256 KB y se pueden agrupar en lotes para optimizar los envíos. Los lotes pueden tener un tamaño máximo de 256 KB.

  • IoT Hub no permite el particionamiento arbitrario. Los mensajes de dispositivo a nube se dividen en particiones en función de su valor de deviceIdde origen.

  • Como se explica en Control del acceso a IoT Hub, IoT Hub habilita la autenticación y el control de acceso por dispositivo.

  • Puede marcar los mensajes con información que se incluye en las propiedades de la aplicación. Para más información, consulte el artículo sobre el enriquecimiento de mensajes.

Nota:

Cada protocolo de IoT Hub proporciona una propiedad de tipo de contenido del mensaje que se respeta al enrutar datos a puntos de conexión personalizados. Para que los datos se controlen correctamente en el destino (por ejemplo, un objeto JSON tratado como una cadena analizable en lugar de datos binarios codificados en Base64), proporciona el tipo de contenido y el conjunto de caracteres adecuados para el mensaje.

Para usar el cuerpo del mensaje en una consulta de enrutamiento de IoT Hub, proporciona un objeto JSON válido para el mensaje y establece la propiedad de tipo de contenido del mensaje en application/json;charset=utf-8.

En el ejemplo siguiente se muestra un cuerpo de mensaje enrutable válido:

{
    "timestamp": "2022-02-08T20:10:46Z",
    "tag_name": "spindle_speed",
    "tag_value": 100
}

Propiedades del sistema de mensajes de dispositivo a nube

Propiedad Descripción ¿Lo puede establecer el usuario? Palabra clave para el
enrutamiento de la consulta
message-id Un identificador configurable por el usuario para el mensaje utilizado para patrones de solicitud y respuesta. Formato: una cadena que distingue mayúsculas y minúsculas (de hasta 128 caracteres) de caracteres alfanuméricos ASCII de 7 bits además de - : . + % _ # * ? ! ( ) , = @ ; $ '. messageId
iothub-enqueuedtime Fecha y hora en la que IoT Hub recibió el mensaje del dispositivo a la nube. No enqueuedTime
user-id Un identificador que se utiliza para especificar el origen de los mensajes. userId
iothub-connection-device-id Un identificador establecido por IoT Hub en los mensajes de dispositivo a nube. Contiene el deviceId del dispositivo que envió el mensaje. No connectionDeviceId
iothub-connection-module-id Un identificador establecido por IoT Hub en los mensajes de dispositivo a nube. Contiene el moduleId del dispositivo que envió el mensaje. No connectionModuleId
iothub-connection-auth-generation-id Un identificador establecido por IoT Hub en los mensajes de dispositivo a nube. Contiene el valor connectionDeviceGenerationId (como se indica en Propiedades de identidad del dispositivo) del dispositivo que envió el mensaje. No connectionDeviceGenerationId
iothub-connection-auth-method Un método de autenticación establecido por IoT Hub en los mensajes de dispositivo a nube. Esta propiedad contiene información sobre el método de autenticación usado para autenticar el dispositivo que envía el mensaje. No connectionAuthMethod
iothub-app-iothub-creation-time-utc Permite al dispositivo enviar la hora de creación de eventos al enviar datos en un lote. Yes creation-time-utc
iothub-creation-time-utc Permite al dispositivo enviar la hora de creación de eventos al enviar un único mensaje a la vez. Yes creation-time-utc
dt-dataschema El centro de IoT establece este valor en mensajes de dispositivo a la nube. Contiene el id. de modelo del dispositivo establecido en la conexión del dispositivo. No $dt-dataschema
dt-subject Nombre del componente que envía los mensajes del dispositivo a la nube. $dt-subject

Propiedades de la aplicación de mensajes de dispositivo a nube

Un uso común de las propiedades de aplicación es enviar una marca de tiempo desde el dispositivo mediante la propiedad iothub-creation-time-utc para registrar cuándo el dispositivo envió el mensaje. El formato de esta marca de tiempo debe ser UTC sin información de zona horaria. Por ejemplo, 2021-04-21T11:30:16Z es válido, pero 2021-04-21T11:30:16-07:00 no lo es.

{
  "applicationId":"00001111-aaaa-2222-bbbb-3333cccc4444",
  "messageSource":"telemetry",
  "deviceId":"sample-device-01",
  "schema":"default@v1",
  "templateId":"urn:modelDefinition:mkuyqxzgea:e14m1ukpn",
  "enqueuedTime":"2021-01-29T16:45:39.143Z",
  "telemetry":{
    "temperature":8.341033560421833
  },
  "messageProperties":{
    "iothub-creation-time-utc":"2021-01-29T16:45:39.021Z"
  },
  "enrichments":{}
}

Propiedades del sistema de mensajes de nube a dispositivo

Propiedad Descripción ¿La puede definir el usuario?
message-id Un identificador configurable por el usuario para el mensaje utilizado para patrones de solicitud y respuesta. Formato: una cadena que distingue mayúsculas y minúsculas (de hasta 128 caracteres) de caracteres alfanuméricos ASCII de 7 bits además de - : . + % _ # * ? ! ( ) , = @ ; $ '.
sequence-number Un número (exclusivo para cada cola de dispositivo) asignado por IoT Hub a cada mensaje de nube a dispositivo. No
to Un destino especificado en los mensajes de nube a dispositivo . No
absolute-expiry-time Fecha y hora de la expiración del mensaje.
correlation-id Cadena de propiedad en un mensaje de respuesta que normalmente contiene el identificador del mensaje de la solicitud en los patrones de solicitud y respuesta.
user-id Un identificador que se utiliza para especificar el origen de los mensajes. Cuando IoT Hub genera mensajes, el identificador de usuario es el nombre del centro de IoT.
iothub-ack Un generador de mensajes de comentarios. Esta propiedad se usa en los mensajes de nube a dispositivo para solicitar a IoT Hub que genere mensajes de comentarios debido al consumo del mensaje por el dispositivo. Valores posibles: none (valor predeterminado): no se genera ningún mensaje de comentarios, positive: recibe un mensaje de comentarios si el mensaje se completó, negative: recibe un mensaje de comentarios si el mensaje expiró (o si se alcanzó el número máximo de entregas) sin que se complete en el dispositivo, y full: comentarios positivos y negativos.

Nombres de las propiedades del sistema

Los nombres de las propiedades del sistema varían en función del punto de conexión al que se enrutan los mensajes.

Nombre de la propiedad del sistema Event Hubs Azure Storage Azure Service Bus Event Grid
Id. del mensaje message-id messageId MessageId message-id
Id. de usuario user-id userId UserId user-id
Id. de dispositivo de conexión iothub-connection-device-id connectionDeviceId iothub-connection-device-id iothub-connection-device-id
Id. de módulo de conexión iothub-connection-module-id connectionModuleId iothub-connection-module-id iothub-connection-module-id
Id. de generación de la autenticación de conexión iothub-connection-auth-generation-id connectionDeviceGenerationId iothub-connection-auth-generation-id iothub-connection-auth-generation-id
Método de autenticación de conexión iothub-connection-auth-method connectionAuthMethod iothub-connection-auth-method iothub-connection-auth-method
contentType content-type contentType ContentType iothub-content-type
contentEncoding content-encoding contentEncoding ContentEncoding iothub-content-encoding
iothub-enqueuedtime iothub-enqueuedtime enqueuedTime N/D iothub-enqueuedtime
CorrelationId correlation-id correlationId CorrelationId correlation-id
dt-dataschema dt-dataschema dt-dataschema dt-dataschema dt-dataschema
dt-subject dt-subject dt-subject dt-subject dt-subject

Tamaño del mensaje

IoT Hub mide el tamaño de los mensajes de una manera independiente del protocolo, teniendo en cuenta solo la carga real. El tamaño en bytes se calcula como la suma de los siguientes valores:

  • El tamaño del cuerpo en bytes.
  • El tamaño en bytes de todos los valores de las propiedades del sistema de mensajes.
  • El tamaño en bytes de todos los valores y nombres de propiedades del usuario.

Solamente se pueden usar caracteres ASCII para los valores y los nombres de propiedades, por lo que la longitud de las cadenas es igual al tamaño en bytes.

Propiedades contra la suplantación

Para evitar la suplantación de dispositivos en los mensajes de dispositivo a nube, Azure IoT Hub marca todos los mensajes con las siguientes propiedades:

  • iothub-connection-device-id
  • iothub-connection-auth-generation-id
  • iothub-connection-auth-method

Las dos primeras contienen los valores deviceId y generationId del dispositivo de origen, tal como se indicó en Propiedades de identidad del dispositivo.

La propiedad iothub-connection-auth-method contiene un objeto JSON serializado con las siguientes propiedades:

{
  "scope": "{ hub | device | module }",
  "type": "{ symkey | sas | x509 }",
  "issuer": "iothub"
}

Pasos siguientes