Partager via


Créer et lire des messages IoT Hub

Pour prendre en charge l’interopérabilité entre les protocoles, IoT Hub définit un ensemble commun de fonctionnalités de messagerie disponibles dans tous les protocoles orientés appareil. Ces fonctionnalités peuvent être utilisées à la fois dans des messages appareil-à-cloud et dans des messages cloud-à-appareil.

Remarque

Certaines des fonctionnalités mentionnées dans cet article, comme la messagerie cloud-à-appareil, les jumeaux d’appareil et la gestion des appareils, sont disponibles uniquement dans le niveau Standard d’IoT Hub. Pour plus d’informations sur les niveaux IoT Hub de base et standard/gratuit, consultez Choisir le niveau et la taille ioT Hub appropriés pour votre solution.

IoT Hub implémente les messages appareil-à-cloud à l’aide d’un modèle de messagerie en streaming. Les messages de l'appareil vers le cloud de l'IoT Hub ressemblent davantage aux événements d'Event Hubs qu'aux messages de Service Bus, en ce que le service traite un volume élevé d'événements que plusieurs lecteurs peuvent lire.

Un message IoT Hub comprend les éléments suivants :

  • Un ensemble prédéterminé de propriétés système, comme décrit plus loin dans cet article.

  • Un ensemble de propriétés de l’application. Dictionnaire de propriétés de chaîne que l’application peut définir et auquel elle peut accéder sans avoir à désérialiser le corps du message. IoT Hub ne modifie jamais ces propriétés.

  • Corps d’un message, qui peut être de n’importe quel type de données.

Chaque protocole d’appareil implémente la définition des propriétés de différentes manières. Pour plus d’informations, consultez Communiquer avec un hub IoT à l’aide du protocole MQTT et Communiquer avec votre hub IoT à l’aide du protocole AMQP.

Quand vous envoyez des messages appareil-à-cloud avec le protocole HTTPS ou quand vous envoyez des messages cloud-à-appareil, les valeurs et noms de propriétés peuvent contenir seulement des caractères alphanumériques ASCII, plus les caractères ! # $ % & ' * + - . ^ _ ` | ~.

La messagerie appareil-à-cloud avec IoT Hub présente les caractéristiques suivantes :

  • Les messages appareil-à-cloud sont durables et sont conservés dans le point de terminaison messages/events par défaut d’un hub IoT jusqu’à sept jours.

  • Les messages appareil-à-cloud peuvent être au maximum 256 Ko et peuvent être regroupés par lots pour optimiser les envois. Les lots ne peuvent pas dépasser 256 Ko.

  • IoT Hub n’autorise pas le partitionnement arbitraire. Les messages appareil-à-cloud sont partitionnés selon leur deviceIdd’origine.

  • Comme expliqué dans Contrôler l’accès à IoT Hub à l’aide de l’ID Microsoft Entra, IoT Hub active l’authentification par appareil et le contrôle d’accès.

  • Vous pouvez marquer les messages avec des informations qui sont placées dans les propriétés de l’application. Pour découvrir plus d’informations, reportez-vous à Enrichissements de messages pour les messages IoT Hub appareil-à-cloud.

Remarque

Chaque protocole IoT Hub fournit une propriété de type de contenu de message, qui est respectée lors du routage des données vers des points de terminaison personnalisés. Pour que vos données soient correctement traitées à destination (par exemple, JSON étant traité comme une chaîne analysable plutôt que comme des données binaires encodées en Base64), fournissez le type de contenu et le jeu de caractères appropriés pour le message.

Pour utiliser le corps de votre message dans une requête de routage IoT Hub, fournissez un objet JSON valide pour le message et définissez la propriété de type de contenu du message sur application/json;charset=utf-8.

L’exemple suivant montre un corps de message routable valide :

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

Propriétés système des messages appareil-à-cloud

Propriété Descriptif L’utilisateur est-il définissable ? Mot clé de la
requête de routage
identifiant de message Identificateur correspondant au message défini par l’utilisateur utilisé pour les modèles demande-réponse. Format : chaîne respectant la casse (jusqu’à 128 caractères) de caractères alphanumériques 7 bits ASCII, plus - : . + % _ # * ? ! ( ) , = @ ; $ '. Oui l'identifiant de message
iothub-enqueuedtime Date et heure auxquelles IoT Hub reçoit le message appareil-à-cloud . Non enqueuedTime
identifiant utilisateur Un ID utilisé pour spécifier l’origine des messages. Oui userId
iothub-connection-device-id Un ID défini par IoT Hub sur les messages appareil vers cloud. Elle contient la propriété deviceId de l’appareil qui a envoyé le message. Non identifiantDePériphériqueDeConnexion
iothub-connection-module-id Un ID défini par IoT Hub sur les messages appareil vers cloud. Il contient la propriété moduleId de l’appareil qui a envoyé le message. Non connexionModuleID
iothub-connection-auth-generation-id Un ID défini par IoT Hub sur les messages appareil vers cloud. Il contient la propriété connectionDeviceGenerationId (conformément aux Propriétés d’identité des appareils) de l’appareil qui a envoyé le message. Non connectionDeviceGenerationId
iothub-connection-auth-method Une méthode d’authentification définie par IoT Hub sur les messages appareil-à-cloud. Cette propriété contient des informations sur la méthode d’authentification utilisée pour authentifier l’appareil qui a envoyé le message. Non méthode d'authentification de connexion
iothub-app-iothub-creation-time-utc Permet à l’appareil d’envoyer l’heure de création de l’événement lors de l’envoi de données dans un lot. Oui heure-de-création-utc
iothub-heure-de-création-UTC Permet à l’appareil d’envoyer l’heure de création de l’événement lors de l’envoi d’un message à la fois. Oui heure de création UTC
dt-dataschema Le hub IoT définit cette valeur sur les messages appareil-à-cloud. Elle contient l’ID du modèle d’appareil défini dans la connexion de l’appareil. Non $dt-dataschema
dt-subject Nom du composant qui envoie les messages appareil-à-cloud. Oui $dt-subject

Propriétés d’application des messages appareil-à-cloud

Une utilisation courante des propriétés d’application consiste à envoyer un horodatage à partir de l’appareil à l’aide de la propriété iothub-creation-time-utc pour enregistrer lorsque l’appareil envoie le message. Le format de cet horodatage doit être UTC sans informations de fuseau horaire. Par exemple, 2021-04-21T11:30:16Z est valide, 2021-04-21T11:30:16-07:00 non.

{
  "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":{}
}

Propriétés système des messages cloud-à-appareil

Propriété Descriptif L’utilisateur est-il définissable ?
identifiant de message Identificateur correspondant au message défini par l’utilisateur utilisé pour les modèles demande-réponse. Format : chaîne respectant la casse (jusqu’à 128 caractères) de caractères alphanumériques 7 bits ASCII, plus - : . + % _ # * ? ! ( ) , = @ ; $ '. Oui
numéro de séquence Un numéro (unique par file d’attente d’appareil) affecté par IoT Hub à chaque message cloud-à-appareil. Non
to Destination spécifiée dans les messages cloud-à-appareil . Non
heure d’expiration absolue Date et heure d’expiration du message. Oui
identifiant de corrélation Une propriété de chaîne d’un message de réponse qui contient généralement l'ID du message de la demande dans les modèles demande-réponse. Oui
identifiant utilisateur Un ID utilisé pour spécifier l’origine des messages. Lorsque IoT Hub génère des messages, l’ID utilisateur est le nom du hub IoT. Oui
iothub-ack Un générateur de messages de commentaires. Cette propriété est utilisée dans les messages cloud-à-appareil pour demander à IoT Hub de générer des messages de commentaires à la suite de la consommation du message par l’appareil. Valeurs possibles : none (par défaut) : aucun message de commentaires n’est généré ; positive : recevoir un message de commentaires si le message est achevé ; negative : recevoir un message de commentaires si le message a expiré (ou si le nombre maximal de remises a été atteint) sans être achevé par l’appareil, ou full : propriétés à la fois positive et négative. Oui

Noms des propriétés système

Les noms de propriété système varient en fonction du point de terminaison vers lequel les messages sont acheminés.

Nom de propriété système Event Hubs Stockage Azure Bus de Service Grid d'événements
ID de message identifiant de message messageId Identifiant de message identifiant de message
ID d’utilisateur identifiant utilisateur userId ID utilisateur identifiant utilisateur
ID de l’appareil de connexion iothub-connection-device-id identifiantDePériphériqueConnexion iothub-connection-device-id iothub-connection-device-id
ID du module de connexion iothub-connection-module-id connectionModuleId iothub-connection-module-id iothub-connection-module-id
ID de génération d’authentification de la connexion iothub-connection-auth-generation-id connectionDeviceGenerationId iothub-connection-auth-generation-id iothub-connection-auth-generation-id
Méthode d’authentification de la connexion iothub-connection-auth-method connectionAuthMethod iothub-connection-auth-method méthode d'authentification de connexion iothub
type de contenu type de contenu type de contenu Type de Contenu iothub-content-type
EncodageDuContenu encodage de contenu EncodageDuContenu Encodage du contenu iothub-content-encoding
iothub-enqueuedtime iothub-enqueuedtime enqueuedTime N/A iothub-enqueuedtime
CorrelationId identifiant de corrélation correlationId CorrelationId identifiant de corrélation
dt-dataschema dt-dataschema dt-dataschema dt-dataschema dt-dataschema
dt-subject dt-sujet dt-subject dt-sujet dt-subject

Taille des messages

IoT Hub mesure la taille des messages d’une façon indépendante du protocole, en considérant uniquement la charge utile réelle. La taille en octets est calculée comme la somme des valeurs suivantes :

  • La taille du corps en octets.
  • La taille en octets de toutes les valeurs des propriétés système du message.
  • La taille en octets de tous les noms et valeurs des propriétés des utilisateurs.

Les noms et les valeurs des propriétés sont limités aux caractères ASCII ; ainsi, la longueur des chaînes est égale à la taille en octets.

Propriétés de détection d’usurpation d’identité

Pour éviter l’usurpation d’appareil dans les messages appareil-à-cloud, IoT Hub marque tous les messages avec les propriétés suivantes :

  • iothub-connection-device-id
  • iothub-connection-auth-generation-id
  • méthode d'authentification connexion iothub

Les deux premières propriétés contiennent le deviceId et le generationId de l’appareil d’origine, conformément aux Propriétés d’identité des appareils.

La propriété iothub-connection-auth-method contient un objet sérialisé JSON avec les propriétés suivantes :

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

Étapes suivantes