Felhőből eszközre irányuló üzenetek küldése IoT Hubról

Ha egyirányú értesítéseket szeretne küldeni egy eszközalkalmazásnak a megoldás háttérrendszeréből, küldjön felhőből eszközre irányuló üzeneteket az IoT Hubról az eszközére. A Azure IoT Hub által támogatott egyéb felhő-eszköz lehetőségekről a Felhőről eszközre vonatkozó kommunikációs útmutató című témakörben olvashat.

Megjegyzés

A cikkben ismertetett funkciók csak a IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub szintekkel kapcsolatos további információkért lásd: A megoldáshoz megfelelő IoT Hub szint kiválasztása.

A felhőből az eszközre irányuló üzeneteket egy szolgáltatáshoz kapcsolódó végponton keresztül küldi el, /messages/devicebound. Az eszközök ezután egy eszközspecifikus végponton keresztül fogadják az üzeneteket, /devices/{deviceId}/messages/devicebound.

Ha az egyes felhőből eszközre irányuló üzeneteket egyetlen eszközön szeretné megcélzni, az IoT Hub a tulajdonságot /devices/{deviceId}/messages/devicebound értékre állítja.

Az egyes eszközsorok legfeljebb 50 felhőből eszközre irányuló üzenetet tárolnak. Hiba történik, ha több üzenetet próbál elküldeni ugyanarra az eszközre.

A felhőből az eszközre irányuló üzenet életciklusa

A legalább egyszeri üzenetkézbesítés garantálása érdekében az IoT Hub az eszközönkénti üzenetsorokban továbbra is megőrzi a felhőből az eszközre irányuló üzeneteket. Az eszközöknek kifejezetten el kell fogadniuk egy üzenet befejezését , mielőtt az IoT Hub eltávolítja az üzenetet az üzenetsorból. Ez a megközelítés biztosítja a csatlakozási és eszközhibák elleni rugalmasságot.

Az életciklus állapotdiagramja az alábbi ábrán jelenik meg:

A felhőből az eszközre irányuló üzenetek életciklus-állapotdiagramját ábrázoló ábra.

Amikor az IoT Hub szolgáltatás üzenetet küld egy eszköznek, a szolgáltatás az üzenet állapotát Enqueued értékre állítja. Amikor egy eszköz üzenetet szeretne kapni , az IoT Hub zárolja az üzenetet úgy, hogy az állapotot Láthatatlan értékre állítja. Ez az állapot lehetővé teszi, hogy az eszközön lévő többi szál más üzeneteket fogadjon. Amikor egy eszközszál befejezi egy üzenet feldolgozását, az üzenet befejezésével értesíti az IoT Hubot . Az IoT Hub ezután Befejezve értékre állítja az állapotot.

Az eszközök a következőket is megtehetik:

  • Utasítsa el az üzenetet, ami miatt az IoT Hub Holt betűs állapotba állítja . A Message Queuing Telemetry Transport (MQTT) protokollon keresztül csatlakozó eszközök nem utasíthatják el a felhőből az eszközre irányuló üzeneteket.

  • Hagyja abba az üzenetet, ami miatt az IoT Hub visszaállítja az üzenetet az üzenetsorba, és az állapot enqueued értékre van állítva. Az MQTT protokollon keresztül csatlakozó eszközök nem hagyhatják fel a felhőből az eszközre irányuló üzeneteket.

Előfordulhat, hogy egy szál nem tudja feldolgozni az üzeneteket az IoT Hub értesítése nélkül. Ebben az esetben az üzenetek automatikusan visszaállnak a Láthatatlan állapotról az Enqueued állapotra a láthatóság időtúllépése (vagy az időtúllépés zárolása ) után. Ennek az időtúllépésnek az értéke egy perc, és nem módosítható.

Az IoT Hub maximális kézbesítésszám tulajdonsága határozza meg, hogy egy üzenet legfeljebb hányszor válthat át az Enqueued és a Láthatatlan állapot között. Az áttűnések száma után az IoT Hub az üzenet állapotát Holt betűsre állítja. Hasonlóképpen, az IoT Hub egy üzenet állapotát Holt betűre állítja a lejárati idő után. További információ: Üzenet lejárata (élettartam).

A Felhőalapú üzenetek küldése IoT Hub című cikk bemutatja, hogyan küldhet felhőből eszközre irányuló üzeneteket a felhőből, és hogyan fogadhatja őket egy eszközön.

Az eszközök általában akkor hajtanak végre felhőből eszközre irányuló üzenetet, ha az üzenet elvesztése nem befolyásolja az alkalmazás logikáját. Erre a befejezésre példa lehet, ha az eszköz helyileg megőrizte az üzenet tartalmát, vagy sikeresen végrehajtott egy műveletet. Az üzenet átmeneti információkat is hordozhat, amelyek elvesztése nem befolyásolja az alkalmazás működését. A hosszú ideig futó feladatok esetében néha a következő műveleteket végezheti el:

  • Töltse ki a felhőből az eszközre irányuló üzenetet, miután az eszköz megőrizte a feladat leírását a helyi tárolóban.

  • Értesítse a megoldás háttérrendszerét egy vagy több eszközről felhőbe irányuló üzenettel a feladat különböző fázisaiban.

Üzenet lejárata (élettartam)

Minden felhőből eszközre irányuló üzenetnek lejárati ideje van. Ezt az időpontot az alábbi lehetőségek közül választhatja ki:

  • A szolgáltatás ExpiryTimeUtc tulajdonsága
  • Az IoT Hub az IoT Hub tulajdonságként megadott alapértelmezett élettartam használatával

További információ az üzenetek lejáratáról: Felhőből eszközre történő konfigurációs beállítások.

Az üzenetek lejáratának kihasználása és az üzenetek leválasztott eszközökre való küldésének elkerülése érdekében gyakran előfordul, hogy rövid időt állít be élő értékekre . Ez a megközelítés ugyanazt az eredményt éri el, mint az eszköz kapcsolati állapotának fenntartása, de hatékonyabb. Amikor üzenet nyugtázást kér, az IoT Hub értesíti, hogy mely eszközök a következők:

  • Képes üzeneteket fogadni.
  • Nincs online állapotban, vagy nem sikerült.

Üzenetre adott visszajelzés

Amikor felhőből eszközre irányuló üzenetet küld, a szolgáltatás kérheti az üzenetenkénti visszajelzés kézbesítését az üzenet végleges állapotáról. Az üzenetvisszajelzést úgy konfigurálhatja, hogy beállítja az iothub-ack alkalmazás tulajdonságot a felhőből az eszközre irányuló üzenetben, amelyet a következő négy érték egyikére küld:

Ack tulajdonságérték Működés
Nincs Default (Alapértelmezett): Az IoT Hub nem hoz létre visszajelzési üzenetet.
pozitív Ha a felhőből az eszközre irányuló üzenet eléri a Kész állapotot, az IoT Hub visszajelzési üzenetet hoz létre.
negatív Ha a felhőből az eszközre irányuló üzenet eléri a Holt betűs állapotot , az IoT Hub visszajelzési üzenetet hoz létre.
Teljes Az IoT Hub mindkét esetben létrehoz egy visszajelzési üzenetet.

Ha az Ack tulajdonság értéke megtelt, és nem kap visszajelzési üzenetet, az azt jelenti, hogy a visszajelzési üzenet lejárt. A szolgáltatás nem tudja, mi történt az eredeti üzenetben. A gyakorlatban a szolgáltatásnak gondoskodnia kell arról, hogy a szolgáltatás feldolgozni tudja a visszajelzést, mielőtt lejár. A maximális lejárati idő két nap, ami időt hagy arra, hogy hiba esetén a szolgáltatás újra fusson.

A Végpontok című témakörben leírtak szerint az IoT Hub üzenetként küld visszajelzést egy szolgáltatáshoz kapcsolódó végponton keresztül, /messages/servicebound/feedback. A visszajelzések fogadásának szemantikája megegyezik a felhőből az eszközre irányuló üzenetek esetében. Amikor csak lehetséges, az üzenetvisszajelzések egyetlen üzenetben lesznek kötegelve, a következő formátumban:

Tulajdonság Leírás
EnqueuedTime Időbélyeg, amely azt jelzi, hogy mikor érkezett a visszajelzési üzenet a központhoz.
UserId (Felhasználóazonosító) {iot hub name}
ContentType application/vnd.microsoft.iothub.feedback.json

A rendszer akkor küldi el a visszajelzést, ha a köteg eléri a 64 üzenetet, vagy 15 másodperc múlva az utolsó elküldéstől, attól függően, hogy melyik az első.

A törzs egy JSON-szerializált rekordtömb, amelyek mindegyike a következő tulajdonságokkal rendelkezik:

Tulajdonság Leírás
enqueuedTimeUtc Időbélyeg, amely azt jelzi, hogy mikor történt az üzenet eredménye. Például egy időbélyeg, amely azt jelzi, hogy a központ mikor kapta meg a visszajelzési üzenetet, vagy az eredeti üzenet lejárt.
originalMessageId Annak a felhőalapú üzenetnek a MessageId azonosítója , amelyhez ez a visszajelzési információ kapcsolódik.
statusCode Az IoT Hub által létrehozott visszajelzési üzenetekben használt kötelező sztring:
Siker
Lejárt
DeliveryCountExceeded
Elutasítva
Kiürült
leírás A StatusCode sztringértékei.
deviceId Annak a felhőből eszközre irányuló üzenet céleszközének DeviceId azonosítója, amelyhez ez a visszajelzés kapcsolódik.
deviceGenerationId Annak a felhőből eszközre irányuló üzenet céleszközének DeviceGenerationId azonosítója, amelyhez ez a visszajelzés kapcsolódik.

A szolgáltatásnak meg kell adnia egy MessageId azonosítót , hogy a felhőből az eszközre irányuló üzenet össze tudja hasonlítani a visszajelzést az eredeti üzenettel.

A visszajelzési üzenet törzse az alábbi példakódban jelenik meg:

[
  {
    "originalMessageId": "0987654321",
    "enqueuedTimeUtc": "2015-07-28T16:24:48.789Z",
    "statusCode": "Success",
    "description": "Success",
    "deviceId": "123",
    "deviceGenerationId": "abcdefghijklmnopqrstuvwxyz"
  },
  {
    ...
  },
  ...
]

Visszajelzés függőben a törölt eszközökről

Az eszköz törlésekor a függőben lévő visszajelzések is törlődnek. Az eszköz visszajelzését kötegekben küldi el a rendszer. Egy keskeny, gyakran egy másodpercnél rövidebb ablak akkor fordulhat elő, ha egy eszköz megerősíti az üzenet fogadását, és amikor a következő visszajelzési köteg elkészül. Ha egy eszköz törlődik a szűk ablakban, a visszajelzés nem történik meg.

Ezt a viselkedést úgy oldhatja meg, hogy vár egy ideig, amíg a függőben lévő visszajelzések megérkeznek az eszköz törlése előtt. A kapcsolódó üzenetvisszajelzéseket az eszköz törlése után kell feltételezni.

Felhőből eszközre történő konfigurációs beállítások

Minden IoT Hub a következő konfigurációs lehetőségeket teszi elérhetővé a felhőből az eszközre irányuló üzenetküldéshez:

Tulajdonság Leírás Tartomány és alapértelmezett
defaultTtlAsIso8601 Alapértelmezett TTL a felhőből az eszközre irányuló üzenetekhez ISO_8601 intervallum legfeljebb két nap (legalább egy perc); alapértelmezett: egy óra
maxDeliveryCount A felhőből az eszközre irányuló üzenetsorok maximális kézbesítési száma 1–100; alapértelmezett: 10
feedback.ttlAsIso8601 Szolgáltatáshoz kötött visszajelzési üzenetek megőrzése ISO_8601 intervallum legfeljebb két nap (legalább egy perc); alapértelmezett: egy óra
feedback.maxDeliveryCount A visszajelzési üzenetsor maximális kézbesítési száma 1–100; alapértelmezett: 10
feedback.lockDurationAsIso8601 A visszajelzési üzenetsor zárolási időtartama ISO_8601 5 és 300 másodperc közötti időköz (legalább öt másodperc); alapértelmezett: 60 másodperc.

A konfigurációs beállításokat az alábbi módok egyikével állíthatja be:

  • Azure Portal: Az IoT Hub hubbeállításai alatt válassza a Beépített végpontok lehetőséget, és lépjen a Felhőből az eszközüzenetek szolgáltatásba. (A feedback.maxDeliveryCount és a feedback.lockDurationAsIso8601 tulajdonságok beállítása jelenleg nem támogatott a Azure Portal.)

Konfigurációs beállítások megadása a felhőből az eszközre irányuló üzenetküldéshez a portálon

  • Azure CLI: Használja az az iot hub update parancsot:

    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.defaultTtlAsIso8601=PT1H0M0S
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.maxDeliveryCount=10
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.ttlAsIso8601=PT1H0M0S
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.maxDeliveryCount=10
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.lockDurationAsIso8601=PT0H1M0S
    

Következő lépések

A felhőalapú üzenetek fogadásához használható SDK-kkal kapcsolatos információkért lásd: Azure IoT Hub SDK-k.

A felhőből az eszközre irányuló üzenetek fogadásának kipróbálásához tekintse meg a Felhőből eszközre küldése oktatóanyagot.