IoT Hub-üzenetek létrehozása és olvasása

A protokollok közötti zökkenőmentes együttműködés támogatása érdekében az IoT Hub az összes eszközoldali protokollban elérhető üzenetkezelési funkciók közös készletét határozza meg. Ezek mind az eszközről a felhőbe irányuló üzenetek útválasztásában, mind a felhőből az eszközre irányuló üzenetekben használhatók.

Feljegyzés

A cikkben említett egyes funkciók, például a felhő–eszköz irányú üzenetküldés, az ikereszközök és az eszközfelügyelet csak a standard szintű IoT Hubon érhető el. Az alapszintű és standard/ingyenes IoT Hub-szintekről további információt a megoldáshoz megfelelő IoT Hub-szint kiválasztása című témakörben talál.

Az IoT Hub streamelési üzenetkezelési mintával valósítja meg az eszközről a felhőbe irányuló üzenetküldést. Az IoT Hub eszközről felhőbe irányuló üzenetei jobban hasonlítanak az Event Hubs-eseményekre, mint a Service Bus-üzenetekre, mivel nagy mennyiségű esemény halad át a szolgáltatáson, amelyet több olvasó is elolvashat.

Az IoT Hub-üzenetek a következőkből állnak:

  • A rendszertulajdonságok előre meghatározott készlete az alábbiak szerint.

  • Alkalmazástulajdonságok halmaza. Az alkalmazás által definiálható és elérhető sztringtulajdonságok szótára anélkül, hogy deszerializálnia kellene az üzenettörzset. Az IoT Hub soha nem módosítja ezeket a tulajdonságokat.

  • Üzenettörzs, amely bármilyen típusú adat lehet.

Minden eszközprotokoll különböző módokon valósítja meg a beállítási tulajdonságokat. A részletekért tekintse meg a kapcsolódó MQTT és AMQP fejlesztői útmutatókat.

A tulajdonságnevek és értékek csak ASCII alfanumerikus karaktereket tartalmazhatnak, valamint {'!', '#', '$', '%, '&', ''', '*', '+', '-', '.', '^', '_', '`', '|', '~'} ha https protokoll használatával küld eszközről felhőbe irányuló üzeneteket, vagy felhőből eszközre irányuló üzeneteket küld.

Az IoT Hubon keresztüli eszközről felhőbe irányuló üzenetkezelés a következő jellemzőkkel rendelkezik:

  • Az eszközről a felhőbe irányuló üzenetek tartósak, és legfeljebb hét napig megmaradnak az IoT Hub alapértelmezett üzenet-/eseményvégpontjaiban .

  • Az eszközről a felhőbe irányuló üzenetek legfeljebb 256 KB méretűek lehetnek, és kötegekbe csoportosíthatók az üzenetek optimalizálása érdekében. A kötegek legfeljebb 256 KB-osak lehetnek.

  • Az IoT Hub nem engedélyezi az tetszőleges particionálást. Az eszközről a felhőbe irányuló üzenetek particionálása a kiinduló eszközazonosítójuk alapján van.

  • Az IoT Hubhoz való hozzáférés szabályozása című szakaszban leírtak szerint az IoT Hub eszközalapú hitelesítést és hozzáférés-vezérlést tesz lehetővé.

  • Az alkalmazás tulajdonságaiba beemelhető információkkal bélyegzheti az üzeneteket. További információkért tekintse meg az üzenet bővítését.

A különböző protokollokkal küldött üzenetek kódolásáról és dekódolásáról további információt az Azure IoT SDK-kban talál.

Feljegyzés

Minden IoT Hub-protokoll egy üzenet tartalomtípus-tulajdonságot biztosít, amelyet tiszteletben kell tartani az adatok egyéni végpontokra való átirányításakor. Ha megfelelően szeretné kezelni az adatokat a célhelyen (például a JSON-t a Base64 kódolású bináris adatok helyett elemezhető sztringként kezeli), meg kell adnia az üzenet megfelelő tartalomtípusát és karakterkészletét.

Ha az üzenet törzsét egy IoT Hub-útválasztási lekérdezésben szeretné használni, meg kell adnia egy érvényes JSON-objektumot az üzenethez, és be kell állítania az üzenet application/json;charset=utf-8tartalomtípus-tulajdonságát.

Egy érvényes, nem módosítható üzenettörzs az alábbihoz hasonlóan nézhet ki:

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

A D2C IoT Hub-üzenetek rendszertulajdonságai

Tulajdonság Leírás Felhasználói beállítástábla? Útválasztási
lekérdezés kulcsszója
üzenetazonosító A kérelem-válasz mintákhoz használt üzenet felhasználó által beállított azonosítója. Formátum: A kis- és nagybetűk megkülönböztetése (legfeljebb 128 karakter hosszú) ASCII 7 bites alfanumerikus karakterek + {'-', ':', '.', '+', '%', '_', '#', '*', '?', '!', '(', ')', ',', '=', '@', ';', '$', '''}. Igen messageId
iothub-enqueuedtime Az IoT Hub az eszközről a felhőbe üzenet fogadásának dátuma és időpontja. Nem enqueuedTime
felhasználó-azonosító Az üzenetek eredetének megadására használt azonosító. Amikor az IoT Hub létrehozza az üzeneteket, a rendszer a következőre állítja be az üzeneteket {iot hub name}: . Igen Felhasználói azonosító
iothub-connection-device-id Az IoT Hub által az eszközről a felhőbe irányuló üzenetekre beállított azonosító. Az üzenetet küldő eszköz eszközazonosítóját tartalmazza. Nem connectionDeviceId
iothub-connection-module-id Az IoT Hub által az eszközről a felhőbe irányuló üzenetekre beállított azonosító. Tartalmazza az üzenetet küldő eszköz modulazonosítóját . Nem connectionModuleId
iothub-connection-auth-generation-id Az IoT Hub által az eszközről a felhőbe irányuló üzenetekre beállított azonosító. Tartalmazza az üzenetet küldő eszköz connectionDeviceGenerationId azonosítóját (az eszköz identitástulajdonságainak megfelelően). Nem connectionDeviceGenerationId
iothub-connection-auth-method Az IoT Hub által az eszközről a felhőbe irányuló üzeneteken beállított hitelesítési módszer. Ez a tulajdonság információkat tartalmaz az üzenetet küldő eszköz hitelesítéséhez használt hitelesítési módszerről. Nem connectionAuthMethod
iothub-app-iothub-creation-time-utc Lehetővé teszi az eszköz számára, hogy eseménylétrehozás idejének elküldése során adatokat küldjön egy kötegben. Igen létrehozás-idő-utc
iothub-creation-time-utc Lehetővé teszi az eszköz számára, hogy egyszerre egy üzenet küldésekor küldjön eseménylétrehozési időt. Igen létrehozás-idő-utc
dt-dataschema Ezt az értéket az IoT Hub állítja be az eszközről a felhőbe irányuló üzenetekben. Az eszközkapcsolatban beállított eszközmodell-azonosítót tartalmazza. Nem $dt-dataschema
dt-subject Az eszközről a felhőbe irányuló üzeneteket küldő összetevő neve. Igen $dt tárgy

A D2C IoT Hub-üzenetek alkalmazástulajdonságai

Az alkalmazástulajdonságok gyakori használata, ha az eszközről időbélyeget küld a iothub-creation-time-utc tulajdonság használatával, amely rögzíti, hogy az eszköz mikor küldte el az üzenetet. Az időbélyeg formátumának utc-nek kell lennie, és nincs időzónára vonatkozó információ. Például 2021-04-21T11:30:16Z érvényes, 2021-04-21T11:30:16-07:00 érvénytelen:

{
  "applicationId":"5782ed70-b703-4f13-bda3-1f5f0f5c678e",
  "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":{}
}

A C2D IoT Hub-üzenetek rendszertulajdonságai

Tulajdonság Leírás Felhasználói beállítástábla?
üzenetazonosító A kérelem-válasz mintákhoz használt üzenet felhasználó által beállított azonosítója. Formátum: A kis- és nagybetűk megkülönböztetése (legfeljebb 128 karakter hosszú) ASCII 7 bites alfanumerikus karakterek + {'-', ':', '.', '+', '%', '_', '#', '*', '?', '!', '(', ')', ',', '=', '@', ';', '$', '''}. Igen
sorszám Az IoT Hub által az egyes felhőből eszközre irányuló üzenetekhez hozzárendelt szám (eszközsoronként egyedi). Nem
felhasználóként a(z) A felhőből az eszközre irányuló üzenetekben megadott célhely. Nem
abszolút lejárati idő Az üzenet lejáratának dátuma és időpontja. Igen
korrelációs azonosító Egy válaszüzenet sztringtulajdonsága, amely általában a kérés MessageId azonosítóját tartalmazza, kérés-válasz mintákban. Igen
felhasználó-azonosító Az üzenetek eredetének megadására használt azonosító. Amikor az IoT Hub létrehozza az üzeneteket, a rendszer a következőre állítja be az üzeneteket {iot hub name}: . Igen
iothub-ack Visszajelzési üzenetgenerátor. Ez a tulajdonság a felhőből az eszközre irányuló üzenetekben arra szolgál, hogy kérje meg az IoT Hubot, hogy visszajelzési üzeneteket hozzon létre az üzenet eszköz általi felhasználása miatt. Lehetséges értékek: nincs (alapértelmezett): nem jön létre visszajelzési üzenet, pozitív: visszajelzést kap, ha az üzenet befejeződött, negatív: visszajelzést kap, ha az üzenet lejárt (vagy elérte a maximális kézbesítési számot) anélkül, hogy az eszköz befejezte volna, vagy megtelt: pozitív és negatív is. Igen

Rendszertulajdonságok nevei

A rendszertulajdonságok neve attól függően változik, hogy melyik végpontra irányítják az üzeneteket. A nevek részleteiért tekintse meg az alábbi táblázatot.

Rendszertulajdonság neve Event Hubs Azure Storage Szolgáltatásbusz Event Grid
Üzenetazonosító üzenetazonosító messageId MessageId üzenetazonosító
Felhasználói azonosító felhasználó-azonosító Felhasználói azonosító UserId felhasználó-azonosító
Csatlakozás ion eszközazonosító iothub-connection-device-id connectionDeviceId iothub-connection-device-id iothub-connection-device-id
Csatlakozás ion modul azonosítója iothub-connection-module-id connectionModuleId iothub-connection-module-id iothub-connection-module-id
Csatlakozás ion auth generation id iothub-connection-auth-generation-id connectionDeviceGenerationId iothub-connection-auth-generation-id iothub-connection-auth-generation-id
Csatlakozás ion auth metódus iothub-connection-auth-method connectionAuthMethod iothub-connection-auth-method iothub-connection-auth-method
contentType tartalomtípus contentType ContentType iothub-content-type
contentEncoding tartalomkódolás contentEncoding ContentEncoding iothub-content-encoding
iothub-enqueuedtime iothub-enqueuedtime enqueuedTime n/a iothub-enqueuedtime
CorrelationId korrelációs azonosító correlationId CorrelationId korrelációs azonosító
dt-dataschema dt-dataschema dt-dataschema dt-dataschema dt-dataschema
dt-subject dt-subject dt-subject dt-subject dt-subject

Üzenet mérete

Az IoT Hub protokollalapú módon méri az üzenetek méretét, csak a tényleges hasznos adatokat figyelembe véve. A bájtokban megadott méret kiszámítása a következő értékek összegeként történik:

  • A törzs mérete bájtban.
  • Az üzenetrendszer-tulajdonságok összes értékének bájtban megadott mérete.
  • A felhasználói tulajdonságnevek és -értékek bájtban megadott mérete.

A tulajdonságnevek és -értékek ASCII-karakterekre korlátozódnak, így a sztringek hossza bájtban egyenlő.

Hamisítás elleni tulajdonságok

Az eszközhamisítás elkerülése érdekében az IoT Hub az alábbi tulajdonságokkal bélyegezi az összes üzenetet:

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

Az első kettő az eszköz identitástulajdonságainak megfelelően tartalmazza a származó eszköz deviceId és generationId azonosítóját.

Az iothub-connection-auth metódus tulajdonság egy szerializált JSON-objektumot tartalmaz a következő tulajdonságokkal:

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

Következő lépések