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 de base et standard/gratuit d’IoT Hub, consultez Choisir le niveau IoT Hub correspondant à votre solution.
IoT Hub implémente les messages appareil-à-cloud à l’aide d’un modèle de messagerie en streaming. Les messages appareil-à-cloud d’IoT Hub s’apparentent plus à des événements Event Hubs qu’à des messages Service Bus, dans la mesure où de nombreux événements passant à travers le service peuvent être lus par plusieurs lecteurs.
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 les guides de développement Guide de protocole MQTT et Guide de 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 ne doivent pas dépasser 256 Ko et peuvent être groupés en 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, IoT Hub permet l’authentification et le contrôle d’accès pour chaque appareil.
Vous pouvez marquer les messages avec des informations qui sont placées dans les propriétés de l’application. Pour plus d’informations, consultez Enrichissements de messages.
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 gérées au niveau de la destination (par exemple, le format JSON est traité en tant que chaîne analysable à la place de données binaires codées au format Base64), indiquez le type de contenu et le charset appropriés du message.
Pour utiliser le corps de votre message dans une requête de routage IoT Hub, fournissez un objet JSON valide pour le message, puis affectez à la propriété du type de contenu du message la valeur 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é | Description | Paramétrable par l'utilisateur ? | Mot clé de la requête de routage |
---|---|---|---|
message-id | Identificateur correspondant au message défini par l’utilisateur utilisé pour les modèles demande-réponse. Format : une chaîne qui respecte la casse (jusqu’à 128 caractères) de caractères alphanumériques 7 bits ASCII, plus - : . + % _ # * ? ! ( ) , = @ ; $ ' . |
Oui | messageId |
iothub-enqueuedtime | Date et heure de réception du message Appareil-à-cloud par IoT Hub. | Non | enqueuedTime |
user-id | 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 | connectionDeviceId |
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 | connectionModuleId |
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 | connectionAuthMethod |
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. | Yes | creation-time-utc |
iothub-creation-time-utc | Permet à l’appareil d’envoyer l’heure de création de l’événement lors de l’envoi d’un message à la fois. | Yes | creation-time-utc |
dt-dataschema | Cette valeur est définie par IoT Hub 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 le moment où le message a été envoyé par l’appareil. 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é | Description | L’utilisateur est-il définissable ? |
---|---|---|
message-id | Identificateur correspondant au message défini par l’utilisateur utilisé pour les modèles demande-réponse. Format : une chaîne qui respecte la casse (jusqu’à 128 caractères) de caractères alphanumériques 7 bits ASCII, plus - : . + % _ # * ? ! ( ) , = @ ; $ ' . |
Oui |
sequence-number | Un numéro (unique par file d’attente d’appareil) affecté par IoT Hub à chaque message cloud-à-appareil. | Non |
to | Une destination spécifiée dans les messages cloud vers appareil . | Non |
absolute-expiry-time | Date et heure d’expiration du message. | Oui |
correlation-id | 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 |
user-id | Un ID utilisé pour spécifier l’origine des messages. Lorsque les messages sont générés par IoT Hub, 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 | Service Bus | Event Grid |
---|---|---|---|---|
ID de message | message-id | messageId | MessageId | message-id |
ID d’utilisateur | user-id | userId | UserId | user-id |
ID de l’appareil de connexion | iothub-connection-device-id | connectionDeviceId | 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 | 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/A | 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 |
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
- iothub-connection-auth-method
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
- Pour plus d’informations sur les limites de taille des messages dans IoT Hub, consultez Quotas et limitations IoT Hub.
- Pour découvrir comment créer et lire des messages IoT Hub dans différents langages de programmation, consultez les Démarrages rapides.
- Pour en savoir plus sur la structure des événements hors télémétrie générés par IoT Hub, consultez schémas d’événements IoT Hub hors télémétrie.