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