可以從云直接調(diào)用設(shè)備的方法,這個(gè)方法就叫直接方法,該方法的是類似于的請(qǐng)求,屬于應(yīng)答式的請(qǐng)求,而且要求設(shè)備在過期時(shí)間范圍內(nèi)應(yīng)答,否則就會(huì)失敗。直接方法的應(yīng)用場(chǎng)景適合于和單個(gè)或者少量設(shè)備進(jìn)行交互的場(chǎng)景。
每個(gè)直接方法的對(duì)象都是單個(gè)的設(shè)備,如果計(jì)劃一次性操作大量的設(shè)備,那么考慮使用, 它主要可用于:
多個(gè)設(shè)備上調(diào)用直接方法。
規(guī)劃在掉線設(shè)備上線后調(diào)用方法。
直接方法的生命周期
直接方法的實(shí)際應(yīng)用是在設(shè)備上實(shí)現(xiàn)的,設(shè)備可以以方法的形式接受參數(shù)輸入。用戶一般從service SDK或者是service側(cè)開始調(diào)用設(shè)備的直接方法,如果使用rest api, service側(cè)的URI是, 設(shè)備通過協(xié)議從:iothub/methods/POST//接受請(qǐng)求。(如果是協(xié)議,則使用:IoThub-methodname and IoThub-status ), 需要注意的是中只能使用US-ASCII字符。
直接方法是同步方法(注意所有的SDK關(guān)于同步的實(shí)現(xiàn)), 在設(shè)定的超時(shí)時(shí)間內(nèi),要么失敗,好么成功。注意默認(rèn)超時(shí)時(shí)間是30秒,可設(shè)置的值是從5秒到300秒之間。
直接方法使用的協(xié)議是:
Service端是HTTPS
設(shè)備端是, 或者 +
一定是一個(gè)json對(duì)象,最大大小是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進(jìn)行調(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"
}
}'
認(rèn)證只需要 Key就可以了。
如果是在IoT Edge module上運(yùn)行直接方法:
https://.azure-devices.net/twins//modules//methods?api-version=2018-06-30
后端應(yīng)用會(huì)接收到一個(gè)回復(fù),主要的回復(fù)包括如下的字段:
HTTP狀態(tài)碼
200 表示運(yùn)行成功
404 表示,給出的設(shè)備id不合法,或者設(shè)備不在線。
504 表示gateway和設(shè)備之間的聯(lián)系超時(shí)。
頭里包括ETAG, Request Id, Content Type, Content Encoding.
Json格式的消息體:
{
"status":201,
"payload":{...}
}
注意這里的body和body里面的status都是由設(shè)備提供,實(shí)現(xiàn)自己的邏輯的。
也可以在上調(diào)用直接方法,用法一樣,但是要提供
設(shè)備上處理直接方法
設(shè)備上可以通過協(xié)議和協(xié)議來處理。
MQTT
通過MQTT的topic 來接受直接方法的調(diào)用。方法收到的方法體:
{
"input1":"someInput",
"input2":"anotherInput"
}
注意
方法的請(qǐng)求QoS被設(shè)置為了0, 也就是說最多發(fā)送一次。不保證請(qǐng)求一定到達(dá)設(shè)備。
Response
設(shè)備送回復(fù)到topic: iothub/methods/res//?$rid=
屬性由設(shè)備提供狀態(tài)
屬性是request id,通過后端方法調(diào)用傳入的。