Vysvětlení a volání přímých metod ze služby IoT Hub
IoT Hub umožňuje vyvolat přímé metody na zařízeních z cloudu. Přímé metody představují interakci typu požadavek-odpověď se zařízením, která je podobná volání HTTP v tom, že je ihned (po uplynutí časového limitu zadaného uživatelem) úspěšná nebo neúspěšná. Tento přístup je užitečný v případě scénářů, kdy se průběh okamžité akce liší podle toho, jestli zařízení bylo schopné reagovat.
Poznámka
Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard IoT Hub. Další informace o úrovních IoT Hub Basic a Standard/Free najdete v tématu Volba správné IoT Hub úrovně pro vaše řešení.
Každá metoda zařízení cílí na jedno zařízení. Plánování úloh na více zařízeních ukazuje, jak poskytnout způsob, jak vyvolat přímé metody na více zařízeních, a naplánovat vyvolání metody pro odpojená zařízení.
Každý, kdo má oprávnění k připojení služby na IoT Hub, může vyvolat metodu na zařízení.
Přímé metody se řídí vzorem požadavků a odpovědí a jsou určené pro komunikaci, která vyžaduje okamžité potvrzení výsledku. Například interaktivní ovládání zařízení, například zapnutí ventilátoru.
Pokud máte pochybnosti o použití požadovaných vlastností, přímých metod nebo zpráv z cloudu do zařízení, projděte si pokyny ke komunikaci mezi cloudem a zařízením .
Životní cyklus metody
Přímé metody jsou na zařízení implementované a ke správnému vytvoření instance můžou vyžadovat nula nebo více vstupů v datové části metody. Přímou metodu vyvoláte prostřednictvím identifikátoru URI () směřujícího ke službě ({iot hub}/twins/{device id}/methods/
). Zařízení přijímá přímé metody prostřednictvím tématu MQTT specifického pro zařízení ($iothub/methods/POST/{method name}/
) nebo prostřednictvím odkazů AMQP ( IoThub-methodname
vlastnosti aplikace a IoThub-status
).
Poznámka
Při vyvolání přímé metody na zařízení můžou názvy vlastností a hodnoty obsahovat pouze tištěnou alfanumerickou hodnotu US-ASCII, s výjimkou libovolné v následující sadě: {'$', '(', ')', '<', '>', '@', ',', ';', ':', '\', '"', '/', '[', ']', '?', '=', '{', '}', SP, HT}
Přímé metody jsou synchronní a po uplynutí časového limitu buď proběhnou úspěšně, nebo selžou (výchozí nastavení: 30 sekund, nastavitelné mezi 5 a 300 sekundy). Přímé metody jsou užitečné v interaktivních scénářích, kdy chcete, aby zařízení fungovalo pouze v případě, že je zařízení online a přijímá příkazy. Například zapnutí světla z telefonu. V těchto scénářích chcete vidět okamžitý úspěch nebo selhání, aby cloudová služba co nejdříve reagovala na výsledek. Zařízení může v důsledku metody vrátit část textu zprávy, ale není to nutné, aby to metoda udělala. U volání metod není zaručeno řazení ani sémantiku souběžnosti.
Přímé metody jsou pouze HTTPS ze strany cloudu a MQTT, AMQP, MQTT přes WebSocket nebo AMQP přes WebSocket ze strany zařízení.
Datová část pro požadavky a odpovědi metody je dokument JSON o 128 kB.
Vyvolání přímé metody z back-endové aplikace
Pokud chcete vyvolat přímou metodu z back-endové aplikace, použijte rozhraní REST API pro vyvolání metody zařízení nebo jeho ekvivalent v jedné ze sad SDK služby IoT Hub.
Vyvolání metody
Přímé volání metody na zařízení jsou volání HTTPS, která se skládají z následujících položek:
Identifikátor URI požadavku specifický pro zařízení spolu s verzí rozhraní API:
https://fully-qualified-iothubname.azure-devices.net/twins/{deviceId}/methods?api-version=2021-04-12
Metoda POST
Hlavičky obsahující autorizaci, typ obsahu a kódování obsahu.
Transparentní text JSON v následujícím formátu:
{ "connectTimeoutInSeconds": 200, "methodName": "reboot", "responseTimeoutInSeconds": 200, "payload": { "input1": "someInput", "input2": "anotherInput" } }
Hodnota zadaná jako responseTimeoutInSeconds
v požadavku je doba, po kterou musí služba IoT Hub čekat na dokončení spuštění přímé metody na zařízení. Nastavte tento časový limit tak, aby byl alespoň tak dlouhý jako očekávaná doba spuštění přímé metody zařízením. Pokud časový limit není zadaný, použije se výchozí hodnota 30 sekund. Minimální a maximální hodnota pro responseTimeoutInSeconds
jsou 5 a 300 sekund.
Hodnota zadaná jako connectTimeoutInSeconds
v požadavku je doba po vyvolání přímé metody, kterou IoT Hub služba musí čekat, než odpojené zařízení přejde do režimu online. Výchozí hodnota je 0, což znamená, že zařízení už musí být online při vyvolání přímé metody. Maximální hodnota pro connectTimeoutInSeconds
je 300 sekund.
Příklad
Tento příklad vám umožní bezpečně zahájit požadavek na vyvolání přímé metody na zařízení IoT zaregistrované ve službě Azure IoT Hub.
Začněte tím, že pomocí rozšíření Microsoft Azure IoT pro Azure CLI vytvoříte SharedAccessSignature.
az iot hub generate-sas-token -n <iothubName> --du <duration>
Dále nahraďte hlavičku Authorization nově vygenerovaným parametrem SharedAccessSignature a pak upravte iothubName
parametry , deviceId
methodName
a payload
tak, aby odpovídaly vaší implementaci v následujícím příkladu curl
příkazu.
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"
}
}'
Spuštěním upraveného příkazu vyvoláte zadanou přímou metodu. Úspěšné požadavky vrátí stavový kód HTTP 200.
Poznámka
Výše uvedený příklad ukazuje vyvolání přímé metody na zařízení. Pokud chcete vyvolat přímou metodu v modulu IoT Edge, budete muset upravit požadavek adresy URL, jak je znázorněno níže:
https://<iothubName>.azure-devices.net/twins/<deviceId>/modules/<moduleName>/methods?api-version=2021-04-12
Odpověď
Back-endová aplikace obdrží odpověď, která se skládá z následujících položek:
Stavový kód HTTP:
- 200 označuje úspěšné provedení přímé metody;
- 404 označuje, že id zařízení je neplatné nebo že zařízení nebylo online po vyvolání přímé metody a pro
connectTimeoutInSeconds
poté (použijte doprovodnou chybovou zprávu k pochopení původní příčiny); - 504 označuje časový limit brány způsobený tím, že zařízení nereaguje na přímé volání metody v rámci
responseTimeoutInSeconds
.
Hlavičky , které obsahují ID požadavku, typ obsahu a kódování obsahu.
Text JSON v následujícím formátu:
{ "status" : 201, "payload" : {...} }
Zařízení poskytuje i
status
apayload
slouží k reakci pomocí vlastního stavového kódu zařízení a odpovědi metody.
Vyvolání metody pro moduly IoT Edge
Vyvolání přímých metod v modulu podporuje rozhraní REST API metody Invoke modulu nebo jeho ekvivalent v jedné ze sad SDK služby IoT Hub.
Parametr moduleId
se předá společně s identifikátorem deviceId
URI požadavku při použití rozhraní REST API nebo jako parametr při použití sady SDK služby. Například, https://<iothubName>.azure-devices.net/twins/<deviceId>/modules/<moduleName>/methods?api-version=2021-04-12
. Text požadavku a odpověď jsou podobné jako u přímých metod vyvolaných na zařízení.
Zpracování přímé metody na zařízení
Na zařízení IoT lze přímé metody přijímat přes MQTT, AMQP nebo některý z těchto protokolů přes WebSocket. Sady SDK IoT Hub zařízení vám pomůžou přijímat přímé metody a reagovat na ně na zařízeních, aniž byste si museli dělat starosti s podrobnostmi souvisejícího protokolu.
MQTT
Následující část je určená pro protokol MQTT. Další informace o použití protokolu MQTT přímo s IoT Hub najdete v tématu Podpora protokolu MQTT.
Vyvolání metody
Zařízení přijímají žádosti o přímé metody v tématu MQTT: $iothub/methods/POST/{method name}/?$rid={request id}
. request id
Vygeneruje ho ale IoT Hub a není možné ho předem zjistit, takže se přihlaste k $iothub/methods/POST/#
odběru a potom vyfiltrujte doručované zprávy na základě názvů metod podporovaných vaším zařízením. (K odpovědi použijete request id
příkaz .)
Tělo, které zařízení obdrží, je v následujícím formátu:
{
"input1": "someInput",
"input2": "anotherInput"
}
Požadavky metody jsou QoS 0.
Odpověď
Zařízení odesílá odpovědi na adresu $iothub/methods/res/{status}/?$rid={request id}
, kde:
Vlastnost
status
je stav spuštění metody zadaný zařízením.Vlastnost
$rid
je ID požadavku z vyvolání metody přijaté z IoT Hub. ID požadavku je šestnáctková formátovaná hodnota.
Tělo je nastaveno zařízením a může být jakýkoli stav.
AMQP
Následující část je určena pro protokol AMQP. Další informace o použití protokolu AMQP přímo s IoT Hub najdete v tématu Podpora protokolu AMQP.
Vyvolání metody
Zařízení přijímá žádosti o přímé metody vytvořením odkazu pro příjem na adrese amqps://{hostname}:5671/devices/{deviceId}/methods/deviceBound
.
Zpráva AMQP přijde na odkaz pro příjem, který představuje požadavek metody. Obsahuje následující oddíly:
Vlastnost ID korelace, která obsahuje ID požadavku, které by mělo být předáno zpět s odpovídající odpovědí metody.
Vlastnost aplikace s názvem
IoThub-methodname
, která obsahuje název metody, která je vyvolána.Text zprávy AMQP obsahující datovou část metody jako JSON.
Odpověď
Zařízení vytvoří odesílající odkaz, který vrátí odpověď metody na adrese amqps://{hostname}:5671/devices/{deviceId}/methods/deviceBound
.
Odpověď metody se vrátí na odesílajícím odkazu a je strukturovaná takto:
Vlastnost ID korelace, která obsahuje ID požadavku předané ve zprávě požadavku metody.
Vlastnost aplikace s názvem
IoThub-status
, která obsahuje stav metody zadané uživatelem.Text zprávy AMQP obsahující odpověď metody jako JSON.
Další referenční materiály
Mezi další referenční témata v příručce pro vývojáře IoT Hub patří:
IoT Hub koncových bodů popisuje různé koncové body, které každé centrum IoT zpřístupňuje pro běhové operace a operace správy.
Omezení a kvóty popisují kvóty, které platí, a chování omezování, které lze očekávat při použití IoT Hub.
Sady SDK pro zařízení a služby Azure IoT obsahuje seznam různých jazykových sad SDK, které můžete použít při vývoji aplikací zařízení i služeb, které komunikují s IoT Hub.
IoT Hub dotazovací jazyk pro dvojčata zařízení, úlohy a směrování zpráv popisuje IoT Hub dotazovací jazyk, který můžete použít k načtení informací z IoT Hub o dvojčatech a úlohách zařízení.
IoT Hub podpora MQTT poskytuje další informace o podpoře IoT Hub pro protokol MQTT.
Další kroky
Teď jste se naučili používat přímé metody a mohl by vás zajímat následující článek IoT Hub příručce pro vývojáře:
Pokud si chcete vyzkoušet některé koncepty popsané v tomto článku, mohly by vás zajímat následující IoT Hub kurzu: