Az alkalmazások két elsődleges mechanizmussal küldik el a parancsokat az IoT-eszközökre, a felhőből az eszközre irányuló üzenetküldést és a közvetlen metódusokat.
Az alkalmazások felhőből eszközre irányuló üzeneteket küldenek az IoT-platform eszközspecifikus üzenetsoraiba, hogy az eszközök felolvassák őket, amikor csatlakoznak. Az eszközök eldöntik, hogy mikor olvassák el az üzeneteket.
Az alkalmazások közvetlen metódusokat hívnak meg közvetlenül a csatlakoztatott eszközökön a dedikált IoT-eszközvégpontokon keresztüli kérés-válasz mintával.
Ez a cikk a felhőalapú üzenetküldés és a közvetlen módszerek jellemzőit ismerteti. A cikk azt is ismerteti, hogyan használhat közvetlen metódusokat protokollátjárókkal és csatlakoztatott készenléti eszközökkel.
Felhőből eszközre irányuló üzenetkezelés
Az alkalmazások az adott eszközökhöz tartozó felhőalapú parancsüzeneteket küldenek Azure IoT Hub, amelyek eszközspecifikus üzenetsorokban tárolják az üzeneteket. IoT Hub kézbesíti az üzeneteket az eszközspecifikus üzenetsoroknak, függetlenül attól, hogy az eszközök csatlakoznak-e.
A felhőből az eszközre irányuló üzenetküldés használatakor a következő szempontokat kell figyelembe venni:
- Az üzenetsorok hatékonyan működnek postaládáként az eszközök számára, és az eszközök felelősek az üzenetsorok lekérdezéséért az új üzenetekhez, amikor csatlakoznak.
- Az eszközök első lépésben, elsőként fogadják az üzeneteket, így a felhőből az eszközre irányuló üzenetküldés ideális az üzenetek egymás utáni olvasásához és kezeléséhez.
- Az üzenetek lejárata konfigurálható, így az olvasatlan üzenetek végül eltávolíthatók az eszköz üzenetsorából.
- Az állapotalapú kommunikációhoz az alkalmazások visszajelzés-fogadóval figyelhetik az üzenetek kézbesítését és nyugtázását. Az alkalmazás egyetlen visszajelzési fogadóval figyelheti az összes eszköz összes üzenetsorát.
Közvetlen metódusok
Az alkalmazások közvetlen metódusokat hívnak meg közvetlenül a csatlakoztatott IoT-eszközökön, és elvárják, hogy az eszközök végrehajtsák a metódusokat, és regisztrálják őket a IoT Hub. IoT Hub közvetlen csatornákon keresztül hívja meg a közvetlen metódusokat a csatlakoztatott eszközökön, és az eszközök felelősek a függvények végrehajtásáért és az azonnali eredmények visszaadásáért.
A közvetlen metódusok használatakor a következő szempontokat kell figyelembe venni:
- A közvetlen metódusok meghiúsulnak, ha a kapcsolat megszakadt a IoT Hub és az eszköz között a metódus befejeződése előtt. Az alkalmazások észlelhetik és kezelhetik a parancsok újrapróbálkozási hibáit.
- Mivel nincs üzenetsor, a közvetlen metódusok szekvenálását igénylő alkalmazásoknak kezelnie kell a metódushívások szekvenálását, így az előző metódus befejezése meghívja a következő metódust.
- A közvetlen metódusok meghívásával az alkalmazások két időtúllépést állíthatnak be. Az egyik időtúllépés azt határozza meg, hogy a IoT Hub mennyi ideig várjon az eszköz csatlakozására a feladás előtt, a másik időtúllépés pedig azt határozza meg, hogy a hívó mennyi ideig várjon a metódus befejezésére, és válaszoljon a feladás előtt.
Közvetlen metódusok protokollátjárókkal
A protokollátjárókat használó IoT-alkalmazások kihasználhatják a közvetlen metódusok kapcsolat-kényszerítési és kérés-válasz modelljét. A felhő- vagy protokollátjárók lehetővé teszik a meglévő és különböző eszközök IoT Hub való összekapcsolását azáltal, hogy az eszközök nevében eljárva egyéni protokollkommunikációt közvetítenek. A protokollátjárók hasonlóképpen elvonhatják a közvetlen metódusmodellt azáltal, hogy eszközkompatibilis protokollüzenetekbe szerializálják a metódusokat.
- Az alkalmazás meghívja a közvetlen metódust az eszköz nevében a protokollátjáróban.
- A metódus implementálásához az átjáró egy eszközspecifikus protokollra fordítja le a metódust, és elküldi az üzenetet az eszköznek. Az eszköz nem tud a felhőbeli implementáció változásairól.
- Amikor az eszköz befejezi az üzenetet, és válaszol, az átjáró lefordítja az eszközspecifikus állapotot a metódus válaszára.
- A IoT Hub befejezi a közvetlen metódust a hívó metóduseredményének feltöltésével.
Az Azure Protocol Gateway nyílt forráskódú projektje natív módon fordítja le a közvetlen metódusokat az MQTT protokollüzenetekre, könnyen bővíthető, és ezt a programozási modellt más protokolladapterekhez is bemutatja.
Csatlakoztatott készenléti eszközök
Az IoT-parancsforgatókönyvek olyan csatlakoztatott készenléti eszközöket tartalmazhatnak, amelyek alacsony energiaigényű, tétlen állapotban vannak, ha nem aktívak. Az olyan mechanizmusok, mint a mobil rövid üzenetszolgáltatás (SMS) képesek ébresztési jeleket küldeni az eszközök teljes működési állapotba való átviteléhez.
- Az alkalmazás parancsokat küld az eszközöknek a ServiceClient API használatával. A ServiceClient egy példánya üzeneteket küldhet, és metódusokat hívhat meg több eszközhöz.
- Az alkalmazás SMS ébresztési hívásokat is küld készenléti eszközökre a mobilszolgáltató SMS-átjáróján keresztül.
- Ébresztéskor a készenléti eszközök a DeviceClient API használatával csatlakoznak IoT Hub és fogadják a parancsokat. A DeviceClient egy példánya egyetlen, IoT Hub csatlakoztatott eszközt jelöl.
Közvetlen metódusok használata az eszköz kapcsolati állapotának meghatározásához
A szükségtelen ébresztési üzenetek SMS-átjárókon keresztül történő küldése költséges. Mielőtt tényleges parancsokat küldene egy eszközre, a kapcsolat és a metódus időtúllépésével állapítsa meg, hogy az eszköz csatlakoztatva van-e, és szükség esetén küldjön ébresztést.
TimeSpan connTimeOut = FromSeconds(0); // Period to wait for device to connect.
TimeSpan funcTimeOut = FromSeconds(30); // Period to wait for method to execute.
while (true) {
// Send the command via direct method. Initially use a timeout of zero
// for the connection, which determines whether the device is connected to
// IoT Hub or needs an SMS wakeup sent to it.
var method = new CloudToDeviceMethod("RemoteCommand", funcTimeOut, connTimeOut);
methodInvocation1.SetPayloadJson(CommandPayload);
var response = await serviceClient.InvokeDeviceMethodAsync(deviceId, method);
// [DeviceNotConnected] represents a return value from the CloudToDeviceMethod
// method. That method is not implemented in this sample.
if (response == [DeviceNotConnected] && connTimeOut == 0) {
// The device is not currently connected and needs an SMS wakeup. This
// device should wake up within a period of < 30 seconds. Send the wakeup
// and retry the method request with a 30 second timeout on waiting for
// the device to connect.
connTimeOut = FromSeconds(30); // Set a 30 second connection timeout.
SendAsyncSMSWakeUpToDevice(); // Send SMS wakeup through mobile gateway.
continue; // Retry with new connection timeout.
} else {
// The method either succeeded or failed.
ActOnMethodResult(var);
break;
}
}
A kapcsolat egyszerű ellenőrzéséhez használjon egy üres metódust nulla kapcsolati időtúllépéssel egy egyszerű ping végrehajtásához. Például:
var method = new CloudToDeviceMethod("Ping", 0, 0);
Közreműködők
Ezt a cikket a Microsoft tartja karban. Eredetileg a következő közreműködők írták.
Fő szerző:
- Jason Wadsworth | Vezető szoftvermérnök
Következő lépések
- A felhőalapú kommunikációval kapcsolatos útmutató forgatókönyvalapú útmutatást nyújt arról, hogy mikor érdemes felhőből eszközre irányuló üzeneteket vagy közvetlen metódusokat használni.