理解 Azure IoT Hub 的直接方法調(diào)用

來源: 騰訊網(wǎng)
作者:AzureDeveloper
時間:2021-11-15
15640
可以從云直接調(diào)用設(shè)備的方法,這個方法就叫直接方法,該方法的是類似于的請求,屬于應(yīng)答式的請求,而且要求設(shè)備在過期時間范圍內(nèi)應(yīng)答,否則就會失敗。直接方法的應(yīng)用場景適合于和單個或者少量設(shè)備進行交互的場景。

可以從云直接調(diào)用設(shè)備的方法,這個方法就叫直接方法,該方法的是類似于的請求,屬于應(yīng)答式的請求,而且要求設(shè)備在過期時間范圍內(nèi)應(yīng)答,否則就會失敗。直接方法的應(yīng)用場景適合于和單個或者少量設(shè)備進行交互的場景。

photo-1558644737-83e2c885c51e.JPG

每個直接方法的對象都是單個的設(shè)備,如果計劃一次性操作大量的設(shè)備,那么考慮使用, 它主要可用于:

多個設(shè)備上調(diào)用直接方法。

規(guī)劃在掉線設(shè)備上線后調(diào)用方法。

直接方法的生命周期

直接方法的實際應(yīng)用是在設(shè)備上實現(xiàn)的,設(shè)備可以以方法的形式接受參數(shù)輸入。用戶一般從service SDK或者是service側(cè)開始調(diào)用設(shè)備的直接方法,如果使用rest api, service側(cè)的URI是, 設(shè)備通過協(xié)議從:iothub/methods/POST//接受請求。(如果是協(xié)議,則使用:IoThub-methodname and IoThub-status ), 需要注意的是中只能使用US-ASCII字符。

直接方法是同步方法(注意所有的SDK關(guān)于同步的實現(xiàn)), 在設(shè)定的超時時間內(nèi),要么失敗,好么成功。注意默認超時時間是30秒,可設(shè)置的值是從5秒到300秒之間。

直接方法使用的協(xié)議是:

Service端是HTTPS

設(shè)備端是, 或者 +

一定是一個json對象,最大大小是128KB

從后端應(yīng)用上調(diào)用直接方法

后端應(yīng)用是通過來通過發(fā)起直接方法調(diào)用的,如果不使用SDK,可以直接調(diào)用reset api:

https://fully-qualified-iothubname.azure-devices.net/twins//methods?api-version=2018-06-30

該rest api必須使用來調(diào)用,傳入body進行調(diào)用:

{

"methodName":"reboot",

"responseTimeoutInSeconds":200,

"payload":{

"input1":"someInput",

"input2":"anotherInput"

}

}

我們可以使用來調(diào)用:

curl-X POST \

https://.azure-devices.net/twins//methods?api-version=2018-06-30 \

-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"

}

}'

認證只需要 Key就可以了。

如果是在IoT Edge module上運行直接方法:

https://.azure-devices.net/twins//modules//methods?api-version=2018-06-30

后端應(yīng)用會接收到一個回復(fù),主要的回復(fù)包括如下的字段:

HTTP狀態(tài)碼

200 表示運行成功

404 表示,給出的設(shè)備id不合法,或者設(shè)備不在線。

504 表示gateway和設(shè)備之間的聯(lián)系超時。

頭里包括ETAG, Request Id, Content Type, Content Encoding.

Json格式的消息體:

{

"status":201,

"payload":{...}

}

注意這里的body和body里面的status都是由設(shè)備提供,實現(xiàn)自己的邏輯的。

也可以在上調(diào)用直接方法,用法一樣,但是要提供

設(shè)備上處理直接方法

設(shè)備上可以通過協(xié)議和協(xié)議來處理。

MQTT

通過MQTT的topic 來接受直接方法的調(diào)用。方法收到的方法體:

{

"input1":"someInput",

"input2":"anotherInput"

}

注意

方法的請求QoS被設(shè)置為了0, 也就是說最多發(fā)送一次。不保證請求一定到達設(shè)備。

Response

設(shè)備送回復(fù)到topic: iothub/methods/res//?$rid=

屬性由設(shè)備提供狀態(tài)

屬性是request id,通過后端方法調(diào)用傳入的。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于騰訊網(wǎng),本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多