Közvetlen metódusok megismerése és meghívása az IoT Hubból
Az IoT Hub lehetővé teszi, hogy az eszközökön közvetlen metódusokat hívjon meg a felhőből. A közvetlen metódusok kérés-válasz jellegű kapcsolatot valósítanak meg az eszközzel, amely a HTTP-hívásokhoz hasonló annyiban, hogy vagy sikeres, vagy azonnal meghiúsul (a felhasználó által megadott idő túllépése után). Ez a módszer olyan helyzetekben hasznos, amikor az azonnali művelet végrehajtása eltérő attól függően, hogy az eszköz válaszképes volt-e.
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.
Minden eszközmetódus egyetlen eszközt céloz meg. A feladatok ütemezése több eszközön bemutatja, hogyan hívhat meg közvetlen metódusokat több eszközön, és hogyan ütemezhet metódushívást a leválasztott eszközökhöz.
Bárki, aki szolgáltatáscsatlakozási engedéllyel rendelkezik a IoT Hub meghívhat egy metódust egy eszközön.
A közvetlen metódusok egy kérés-válasz mintát követnek, és olyan kommunikációra szolgálnak, amelyek azonnali megerősítést igényelnek az eredményükről. Például az eszköz interaktív vezérlése, például egy ventilátor bekapcsolása.
Ha kétségei vannak a kívánt tulajdonságok, a közvetlen módszerek vagy a felhőből az eszközre irányuló üzenetek használata között, tekintse meg a felhőből eszközre irányuló kommunikációs útmutatót .
Metódus életciklusa
A közvetlen metódusok implementálva vannak az eszközön, és a helyes példányosításhoz nulla vagy több bemenetre lehet szükség a metódus hasznos adataiban. Közvetlen metódust hív meg egy szolgáltatással elérhető URI-n ({iot hub}/twins/{device id}/methods/
). Az eszközök közvetlen metódusokat kapnak egy eszközspecifikus MQTT-témakörön ($iothub/methods/POST/{method name}/
) vagy AMQP-hivatkozásokon (az és IoThub-status
az IoThub-methodname
alkalmazás tulajdonságain) keresztül.
Megjegyzés
Amikor közvetlen metódust hív meg egy eszközön, a tulajdonságnevek és -értékek csak az US-ASCII nyomtatható alfanumerikus elemeket tartalmazhatják, kivéve az alábbi készlet bármelyikét: {'$', '(', ')', '<', '>', '@', ',', ';', ':', '\', '"', '/', '[', ']', '?', '=', '{', '}', SP, HT}
A közvetlen metódusok szinkronok, és az időtúllépési időszak után sikeresek vagy sikertelenek (alapértelmezett: 30 másodperc, 5 és 300 másodperc közötti beállítás). A közvetlen metódusok olyan interaktív forgatókönyvekben hasznosak, ahol azt szeretné, hogy az eszköz csak akkor és csak akkor működjön, ha az eszköz online állapotban van, és parancsokat fogad. Kapcsoljon be például egy lámpát egy telefonról. Ezekben a forgatókönyvekben azonnali sikert vagy hibát szeretne látni, hogy a felhőszolgáltatás a lehető leghamarabb reagáljon az eredményre. Előfordulhat, hogy az eszköz egy üzenettörzset ad vissza a metódus eredményeként, de ehhez nincs szükség rá. A metódushívások megrendelésére és egyidejűségére nincs garancia.
A közvetlen metódusok https-onlyek a felhő oldaláról, az MQTT, az AMQP, a WebSockets MQTT vagy az eszközoldali WebSocketeken keresztüli AMQP.
A metóduskérések és -válaszok hasznos adata egy legfeljebb 128 KB-os JSON-dokumentum.
Közvetlen metódus meghívása háttéralkalmazásból
Ha közvetlen metódust szeretne meghívni egy háttéralkalmazásból, használja az Eszköz metódusának MEGHÍVÁSa REST API-t vagy annak megfelelőjét az IoT Hub szolgáltatás SDK-k egyikében.
Metódushívás
Az eszközön a közvetlen metódushívások olyan HTTPS-hívások, amelyek a következő elemekből állnak:
Az eszközre vonatkozó kérés URI-ja az API-verzióval együtt:
https://fully-qualified-iothubname.azure-devices.net/twins/{deviceId}/methods?api-version=2021-04-12
A POST metódus
Az engedélyezést, a tartalomtípust és a tartalomkódolást tartalmazó fejlécek.
Transzparens JSON-törzs a következő formátumban:
{ "connectTimeoutInSeconds": 200, "methodName": "reboot", "responseTimeoutInSeconds": 200, "payload": { "input1": "someInput", "input2": "anotherInput" } }
A kérelemben megadott responseTimeoutInSeconds
érték az az idő, amelyet IoT Hub szolgáltatásnak várnia kell egy közvetlen metódus végrehajtásának befejezésére az eszközön. Állítsa ezt az időtúllépést legalább addig, amíg az eszköz egy közvetlen metódusának várt végrehajtási ideje. Ha nincs megadva időtúllépés, a rendszer az alapértelmezett 30 másodperces értéket használja. A minimális és maximális értékek responseTimeoutInSeconds
5 és 300 másodperc.
A kérésben megadott connectTimeoutInSeconds
érték az a közvetlen metódus meghívásakor eltelt idő, amelyet IoT Hub szolgáltatásnak várnia kell a leválasztott eszköz online állapotba helyezésére. Az alapértelmezett érték 0, ami azt jelenti, hogy az eszközöknek már online állapotban kell lenniük egy közvetlen metódus meghívásakor. A maximális érték connectTimeoutInSeconds
300 másodperc.
Példa
Ez a példa lehetővé teszi egy közvetlen metódus meghívására irányuló kérés biztonságos kezdeményezését egy Azure IoT Hubban regisztrált IoT-eszközön.
Első lépésként használja az Azure CLI-hez készült Microsoft Azure IoT-bővítményt a SharedAccessSignature létrehozásához.
az iot hub generate-sas-token -n <iothubName> --du <duration>
Ezután cserélje le az Engedélyezés fejlécet az újonnan létrehozott SharedAccessSignature-ra, majd módosítsa a iothubName
, methodName
deviceId
és payload
paramétert, hogy megfeleljen az alábbi példaparancs curl
implementációjának.
curl -X POST \
https://<iothubName>.azure-devices.net/twins/<deviceId>/methods?api-version=2021-04-12\
-H 'Authorization: SharedAccessSignature sr=iothubname.azure-devices.net&sig=x&se=x&skn=iothubowner' \
-H 'Content-Type: application/json' \
-d '{
"methodName": "reboot",
"responseTimeoutInSeconds": 200,
"payload": {
"input1": "someInput",
"input2": "anotherInput"
}
}'
Futtassa a módosított parancsot a megadott közvetlen metódus meghívásához. A sikeres kérések HTTP 200 állapotkódot adnak vissza.
Megjegyzés
A fenti példa egy közvetlen metódus meghívását mutatja be egy eszközön. Ha közvetlen metódust szeretne meghívni egy IoT Edge modulban, módosítania kell az URL-kérést az alábbiak szerint:
https://<iothubName>.azure-devices.net/twins/<deviceId>/modules/<moduleName>/methods?api-version=2021-04-12
Reagálás
A háttéralkalmazás a következő elemekből álló választ kapja:
HTTP-állapotkód:
- A 200 a közvetlen módszer sikeres végrehajtását jelzi;
- A 404 azt jelzi, hogy bármelyik eszközazonosító érvénytelen, vagy hogy az eszköz nem volt online egy közvetlen módszer meghívásakor és
connectTimeoutInSeconds
azt követően (a kiváltó ok megértéséhez használja a mellékelt hibaüzenetet); - Az 504 azt jelzi, hogy az átjáró időtúllépését az okozza, hogy az eszköz nem válaszol a rendszeren belüli
responseTimeoutInSeconds
közvetlen metódushívásra.
A kérelemazonosítót , a tartalomtípust és a tartalomkódolást tartalmazó fejlécek.
JSON-törzs a következő formátumban:
{ "status" : 201, "payload" : {...} }
payload
Mindkettőtstatus
az eszköz biztosítja, és az eszköz saját állapotkódjával és a metódus válaszával válaszol.
Metódushívás IoT Edge modulokhoz
A közvetlen metódusok modulon való meghívását a REST API meghívása modulmetódus vagy annak megfelelője támogatja az egyik IoT Hub szolgáltatás SDK-jában.
A moduleId
rendszer a deviceId
kérelem URI-jával együtt adja át a rest API használatakor vagy paraméterként a szolgáltatás SDK használatakor. Például: https://<iothubName>.azure-devices.net/twins/<deviceId>/modules/<moduleName>/methods?api-version=2021-04-12
. A kérés törzse és válasza hasonló az eszközön meghívott közvetlen metódusokhoz.
Közvetlen metódus kezelése egy eszközön
IoT-eszközön közvetlen metódusok fogadhatók MQTT- vagy AMQP-protokollon keresztül, vagy ezek bármelyike websocketeken keresztül. Az IoT Hub eszközoldali SDK-k segítenek a közvetlen metódusok fogadásában és megválaszolásában az eszközökön anélkül, hogy a mögöttes protokoll részletei miatt kellene aggódnia.
MQTT
Az alábbi szakasz az MQTT protokollt ismerteti. Az MQTT protokoll IoT Hub való közvetlen használatáról az MQTT-protokoll támogatásáról szóló cikkben olvashat bővebben.
Metódushívás
Az eszközök közvetlen metóduskéréseket kapnak az MQTT témakörében: $iothub/methods/POST/{method name}/?$rid={request id}
. Azonban a request id
IoT Hub hozza létre, és nem ismert előre, ezért iratkozzon fel$iothub/methods/POST/#
, majd szűrje a kézbesített üzeneteket az eszköz által támogatott metódusnevek alapján. (A válaszhoz a request id
következőt fogja használni.)
Az eszköz által kapott törzs formátuma a következő:
{
"input1": "someInput",
"input2": "anotherInput"
}
A metóduskérelmek a QoS 0.
Reagálás
Az eszköz a következő helyre $iothub/methods/res/{status}/?$rid={request id}
küld válaszokat:
A
status
tulajdonság a metódus végrehajtásának eszköz által megadott állapota.A
$rid
tulajdonság a IoT Hub kapott metódushívás kérésazonosítója. A kérelem azonosítója hexadecimális formátumú érték.
A törzset az eszköz állítja be, és bármilyen állapotú lehet.
AMQP
A következő szakasz az AMQP protokollhoz tartozik. Az AMQP protokoll közvetlenül a IoT Hub való használatáról az AMQP protokoll támogatásáról szóló cikkben olvashat bővebben.
Metódushívás
Az eszköz közvetlen metóduskéréseket fogad egy fogadási hivatkozás létrehozásával a címen amqps://{hostname}:5671/devices/{deviceId}/methods/deviceBound
.
Az AMQP üzenet a metóduskérést jelképező fogadási hivatkozásra érkezik. A következő szakaszokat tartalmazza:
A korrelációs azonosító tulajdonság, amely egy kérésazonosítót tartalmaz, amelyet vissza kell adni a megfelelő metódus válaszával.
A nevű
IoThub-methodname
alkalmazástulajdonság, amely a meghívandó metódus nevét tartalmazza.Az AMQP üzenettörzse, amely a metódus hasznos adatait tartalmazza JSON-ként.
Reagálás
Az eszköz létrehoz egy küldő hivatkozást, amely visszaadja a metódus válaszát a címen amqps://{hostname}:5671/devices/{deviceId}/methods/deviceBound
.
A metódus válasza a küldő hivatkozáson lesz visszaadva, és a következőképpen van strukturálva:
A korrelációs azonosító tulajdonság, amely a metódus kérésüzenetében átadott kérelemazonosítót tartalmazza.
A nevű
IoThub-status
alkalmazástulajdonság, amely tartalmazza a felhasználó által megadott metódus állapotát.Az AMQP üzenettörzse, amely a metódus válaszát tartalmazza JSON-ként.
További referenciaanyag
A IoT Hub fejlesztői útmutató további referenciatémakörök a következők:
IoT Hub végpontok ismertetik azokat a végpontokat, amelyeket az egyes IoT Hubok a futásidejű és felügyeleti műveletekhez elérhetővé tesz.
A szabályozás és a kvóták a IoT Hub használatakor alkalmazandó kvótákat és szabályozási viselkedést ismertetik.
Az Azure IoT-eszköz- és szolgáltatásoldali SDK-k felsorolják a különböző nyelvi SDK-kat, amelyeket a IoT Hub használó eszköz- és szolgáltatásalkalmazások fejlesztésekor is használhat.
IoT Hub ikereszközök, feladatok és üzenet-útválasztás lekérdezési nyelve azt a IoT Hub lekérdezési nyelvet ismerteti, a IoT Hub az ikereszközökkel és feladatokkal kapcsolatos információk lekéréséhez.
IoT Hub MQTT-támogatás további információt nyújt az MQTT protokoll IoT Hub támogatásáról.
Következő lépések
Most, hogy megismerte a közvetlen metódusok használatát, a következő IoT Hub fejlesztői útmutatót ismertető cikk érdekelheti:
Ha ki szeretné próbálni a cikkben ismertetett fogalmakat, az alábbi IoT Hub oktatóanyag érdekelheti: