IoT Hub-berichten maken en lezen

IoT Hub definieert een gemeenschappelijke set berichtenfuncties die beschikbaar zijn in alle apparaatgerichte protocollen om interoperabiliteit tussen protocollen te ondersteunen. Deze functies kunnen worden gebruikt in zowel apparaat-naar-cloud-berichten als cloud-naar-apparaat-berichten.

Notitie

Sommige van de functies die in dit artikel worden genoemd, zoals cloud-naar-apparaat-berichten, apparaatdubbels en apparaatbeheer, zijn alleen beschikbaar in de standaardlaag van IoT Hub. Zie De juiste IoT Hub-laag en -grootte kiezen voor uw oplossing voor meer informatie over de Basic- en Standard/gratis IoT Hub-lagen.

IoT Hub implementeert apparaat-naar-cloud-berichten met behulp van een streamingberichtenpatroon. De apparaat-naar-cloud-berichten van IoT Hub lijken meer op Event Hubs-gebeurtenissen dan Service Bus-berichten, omdat er een groot aantal gebeurtenissen is dat via de service wordt doorgegeven die meerdere lezers kunnen lezen.

Een IoT Hub-bericht bestaat uit:

  • Een vooraf bepaalde set systeemeigenschappen , zoals verderop in dit artikel wordt beschreven.

  • Een set toepassingseigenschappen. Een woordenlijst met tekenreekseigenschappen die de toepassing kan definiëren en openen, zonder de hoofdtekst van het bericht te hoeven deserialiseren. IoT Hub wijzigt deze eigenschappen nooit.

  • Een berichttekst die elk soort gegevens kan bevatten.

Elk apparaatprotocol implementeert instellingseigenschappen op verschillende manieren. Zie Communiceren met een IoT-hub met behulp van het MQTT-protocol en communiceren met uw IoT-hub met behulp van het AMQP-protocol voor meer informatie.

Wanneer u apparaat-naar-cloud-berichten verzendt met behulp van het HTTPS-protocol of cloud-naar-apparaat-berichten verzendt, kunnen eigenschapsnamen en -waarden alleen alfanumerieke ASCII-tekens bevatten, plus ! # $ % & ' * + - . ^ _ ` | ~ .

Apparaat-naar-cloud-berichten met IoT Hub hebben de volgende kenmerken:

  • Apparaat-naar-cloud-berichten zijn duurzaam en worden gedurende maximaal zeven dagen bewaard in het standaardeindpunt voor berichten/gebeurtenissen van een IoT-hub.

  • Apparaat-naar-cloud-berichten kunnen maximaal 256 kB zijn en kunnen worden gegroepeerd in batches om verzendingen te optimaliseren. Batches kunnen maximaal 256 kB zijn.

  • IoT Hub staat geen willekeurige partitionering toe. Apparaat-naar-cloud-berichten worden gepartitioneerd op basis van hun oorspronkelijke deviceId.

  • Zoals uitgelegd in Toegang tot IoT Hub beheren met behulp van Microsoft Entra ID, maakt IoT Hub verificatie en toegangsbeheer per apparaat mogelijk.

  • U kunt berichten stempelen met informatie die in de eigenschappen van de toepassing wordt geplaatst. Voor meer informatie, zie Berichtverrijkingen voor apparaat-naar-cloud IoT Hub-berichten.

Notitie

Elk IoT Hub-protocol biedt een eigenschap voor het inhoudstype van een bericht, die wordt gerespecteerd bij het routeren van gegevens naar aangepaste eindpunten. Als u uw gegevens op de juiste manier wilt laten verwerken op de bestemming (bijvoorbeeld JSON die wordt behandeld als een tekenreeks die kan worden geparseerd in plaats van met Base64 gecodeerde binaire gegevens), geeft u het juiste inhoudstype en tekenset voor het bericht op.

Als u de berichttekst in een IoT Hub-routeringsquery wilt gebruiken, geeft u een geldig JSON-object voor het bericht op en stelt u de eigenschap van het inhoudstype van het bericht in op application/json;charset=utf-8.

In het volgende voorbeeld ziet u een geldige, routeerbare berichttekst:

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

Systeemeigenschappen van apparaat-naar-cloud-berichten

Eigenschap Beschrijving Door gebruiker instelbaar? Trefwoord voor
routeringsquery
bericht-ID Een door de gebruiker ingestelde id voor het bericht dat wordt gebruikt voor aanvraag-antwoordpatronen. Opmaak: Een hoofdlettergevoelige tekenreeks (maximaal 128 tekens lang) van ASCII 7-bits alfanumerieke tekens plus - : . + % _ # * ? ! ( ) , = @ ; $ '. Ja bericht-ID
iothub-enqueuedtime De datum en tijd waarop IoT Hub het apparaat-naar-cloud-bericht ontvangt. Nee enqueuedTime
gebruikers-ID Een id die wordt gebruikt om de oorsprong van berichten op te geven. Ja gebruikers-ID
iothub-verbinding-apparaat-id Een ID die is ingesteld door IoT Hub op apparaat-naar-cloud-berichten. Het bevat de deviceId van het apparaat dat het bericht heeft verzonden. Nee verbindingsapparaatId
iothub-verbinding-module-id Een ID die is ingesteld door IoT Hub op apparaat-naar-cloud-berichten. Het bevat de moduleId van het apparaat dat het bericht heeft verzonden. Nee verbindingsModuleId
iothub-connection-auth-generation-id Een ID die is ingesteld door IoT Hub op apparaat-naar-cloud-berichten. Het bevat de connectionDeviceGenerationId (volgens apparaat-id-eigenschappen) van het apparaat dat het bericht heeft verzonden. Nee verbindingsapparaatGeneratieId
iothub-verbinding-authenticatiemethode Een verificatiemethode die is ingesteld door IoT Hub op apparaat-naar-cloud-berichten. Deze eigenschap bevat informatie over de verificatiemethode die wordt gebruikt om het apparaat te verifiëren dat het bericht verzendt. Nee verbindingsauthenticatiemethode
iothub-app-iothub-aanmaak-tijd-utc Hiermee kan het apparaat de aanmaaktijd van gebeurtenissen verzenden bij het verzenden van gegevens in een batch. Ja aanmaakdatum-utc
iothub-creatietijd-utc Hiermee kan het apparaat de aanmaaktijd van gebeurtenissen verzenden wanneer er één bericht tegelijk wordt verzonden. Ja aanmaakdatum-utc
dt-gegevensschema De IoT-hub stelt deze waarde in op apparaat-naar-cloud-berichten. Het bevat de apparaatmodel-id die is ingesteld in de apparaatverbinding. Nee $dt-dataschema
dt-onderwerp De naam van het onderdeel dat de apparaat-naar-cloud-berichten verzendt. Ja $dt onderwerp

Toepassingseigenschappen van apparaat-naar-cloud-berichten

Een veelvoorkomend gebruik van toepassingseigenschappen is het verzenden van een tijdstempel van het apparaat met behulp van de iothub-creation-time-utc eigenschap die moet worden vastgelegd wanneer het apparaat het bericht verzendt. De notatie van deze tijdstempel moet UTC zijn zonder tijdzonegegevens. Is bijvoorbeeld 2021-04-21T11:30:16Z geldig, maar 2021-04-21T11:30:16-07:00 is ongeldig.

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

Systeemeigenschappen van cloud-naar-apparaat-berichten

Eigenschap Beschrijving Door gebruiker instelbaar?
bericht-ID Een door de gebruiker ingestelde id voor het bericht dat wordt gebruikt voor aanvraag-antwoordpatronen. Opmaak: Een hoofdlettergevoelige tekenreeks (maximaal 128 tekens lang) van ASCII 7-bits alfanumerieke tekens plus - : . + % _ # * ? ! ( ) , = @ ; $ '. Ja
reeksnummer Een nummer (uniek per apparaatwachtrij) dat door IoT Hub is toegewezen aan elk cloud-naar-apparaat-bericht. Nee
naar Een bestemming die is opgegeven in cloud-naar-apparaat-berichten . Nee
absolute verlooptijd De datum en tijd waarop het bericht verloopt. Ja
correlatie-id Een tekenreekseigenschap in een antwoordbericht dat doorgaans de MessageId van de aanvraag bevat, in aanvraag-antwoordpatronen. Ja
gebruikers-ID Een id die wordt gebruikt om de oorsprong van berichten op te geven. Wanneer IoT Hub berichten genereert, is de gebruikers-id de naam van de IoT-hub. Ja
iothub-ack Een generator voor feedbackberichten. Deze eigenschap wordt gebruikt in cloud-naar-apparaat-berichten om IoT Hub aan te vragen om feedbackberichten te genereren als gevolg van het verbruik van het bericht door het apparaat. Mogelijke waarden: geen (standaard): er wordt geen feedbackbericht gegenereerd, positief: ontvang een feedbackbericht als het bericht is voltooid, negatief: ontvang een feedbackbericht als het bericht is verlopen (of het maximum aantal bezorgingen is bereikt) zonder dat het apparaat is voltooid of volledig: zowel positief als negatief. Ja

Systeemeigenschapsnamen

De namen van de systeemeigenschappen variëren op basis van het eindpunt waarnaar de berichten worden gerouteerd.

Naam van systeemeigenschap Event Hubs Azure-opslag Dienstbus Gebeurtenisgrid
Bericht-id bericht-ID bericht-ID Bericht-id bericht-ID
Gebruikers-id gebruikers-ID gebruikers-ID Gebruikers-id gebruikers-ID
Apparaat-id van verbinding iothub-verbinding-apparaat-id verbindingsapparaatId iothub-verbinding-apparaat-id iothub-verbinding-apparaat-id
Verbindingsmodule-id iothub-verbinding-module-id verbindingsModuleId iothub-verbinding-module-id iothub-verbinding-module-id
Generatie-id van verbindingsverificatie iothub-connection-auth-generation-id verbindingsapparaatGeneratieId iothub-connection-auth-generation-id iothub-connection-auth-generation-id
Verificatiemethode voor verbinding iothub-verbinding-authenticatiemethode verbindingsauthenticatiemethode iothub-verbinding-authenticatiemethode iothub-verbinding-authenticatiemethode
inhoudstype inhoudstype inhoudstype Inhoudstype iothub-content-type
inhoudcodering inhoudscodering inhoudcodering InhoudsCodering iothub-content-encoding
iothub-enqueuedtime iothub-enqueuedtime enqueuedTime N.v.t. iothub-enqueuedtime
CorrelationId correlatie-id correlationId CorrelationId correlatie-id
dt-gegevensschema dt-gegevensschema dt-gegevensschema dt-gegevensschema dt-gegevensschema
dt-onderwerp dt-onderwerp dt-onderwerp dt-onderwerp dt-onderwerp

Berichtschema bij routeringseindpunten

Wanneer IoT Hub een apparaat-naar-cloud-bericht naar een aangepast eindpunt stuurt, levert het het bericht in drie delen:

  • Body: De berichtbody wordt as-is (niet base64-gecodeerd) geleverd aan Event Hubs, Service Bus wachtrijen en Service Bus onderwerpen. Voor Azure Storage en Azure Cosmos DB hangt de codering af van het type bericht en de eigenschappen van het contentcoderingssysteem. Zie IoT Hub eindpunten voor meer informatie.

  • Systeemeigenschappen: Systeemeigenschappen van IoT Hub verschijnen op het eindpunt door gebruik te maken van de bestemmingsspecifieke namen die in systeemeigenschapsnamen staan. Deze eigenschappen behouden de apparaatidentiteit en de metadata van berichten. Bijvoorbeeld iothub-connection-device-id identificeert het oorspronkelijke apparaat.

  • Applicatie-eigenschappen: Applicatie-eigenschappen die het apparaat instelt of die je toevoegt via berichtverrijkingen worden ongewijzigd doorgegeven.

Het volgende voorbeeld toont een logische weergave van een telemetriebericht dat naar een Event Hubs-eindpunt wordt gerouteerd:

{
  "body": {
    "timestamp": "2022-02-08T20:10:46Z",
    "tag_name": "spindle_speed",
    "tag_value": 100
  },
  "systemProperties": {
    "message-id": "a1b2c3d4-0000-1111-2222-333344445555",
    "iothub-connection-device-id": "sample-device-01",
    "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\"}",
    "iothub-enqueuedtime": "2022-02-08T20:10:46.143Z",
    "content-type": "application/json",
    "content-encoding": "utf-8"
  },
  "applicationProperties": {
    "iothub-creation-time-utc": "2022-02-08T20:10:46.021Z"
  }
}

Notitie

Routing naar een Microsoft Fabric Eventstream-eindpunt gebruikt het CloudEvents-schema in plaats van het hier beschreven schema. Voor meer informatie, zie Microsoft Fabric Eventstreams als routeringseindpunt.

Berichtgrootte

IoT Hub meet de berichtgrootte op een protocolagnostische manier, waarbij alleen de werkelijke nettolading wordt overwogen. De grootte in bytes wordt berekend als de som van de volgende waarden:

  • De grootte van de hoofdtekst in bytes.
  • De grootte in bytes van alle waarden van de berichtsysteemeigenschappen.
  • De grootte in bytes van alle namen en waarden van gebruikerseigenschappen.

Eigenschapsnamen en -waarden zijn beperkt tot ASCII-tekens, dus de lengte van de tekenreeksen is gelijk aan de grootte in bytes.

Anti-adresvervalsingseigenschappen

Om apparaatvervalsing in apparaat-naar-cloud-berichten te voorkomen, stempelt IoT Hub alle berichten met de volgende eigenschappen:

  • iothub-connection-device-id
  • iothub-connection-auth-generation-id
  • iothub-connection-auth-method (authenticatiemethode voor iothub-verbinding)

De eerste twee bevatten de deviceId en generationId van het oorspronkelijke apparaat, volgens de eigenschappen van de apparaat-id.

De eigenschap iothub-connection-auth-method bevat een geserialiseerd JSON-object met de volgende eigenschappen:

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

Volgende stappen