TG客服:@SSjiejie — 官方频道:@SSwangluo
三生网络 © 2009-2023 超15年出海经验,跨境项目专家
可以从云直接调用设备的方法,这个方法就叫直接方法,该方法的是类似于的请求,属于应答式的请求,而且要求设备在过期时间范围内应答,否则就会失败。直接方法的应用场景适合于和单个或者少量设备进行交互的场景。
每个直接方法的对象都是单个的设备,如果计划一次性操作大量的设备,那么考虑使用, 它主要可用于:
多个设备上调用直接方法。
规划在掉线设备上线后调用方法。
直接方法的生命周期
直接方法的实际应用是在设备上实现的,设备可以以方法的形式接受参数输入。用户一般从service SDK或者是service侧开始调用设备的直接方法,如果使用rest api, service侧的URI是, 设备通过协议从:iothub/methods/POST//接受请求。(如果是协议,则使用:IoThub-methodname and IoThub-status ), 需要注意的是中只能使用US-ASCII字符。
直接方法是同步方法(注意所有的SDK关于同步的实现), 在设定的超时时间内,要么失败,好么成功。注意默认超时时间是30秒,可设置的值是从5秒到300秒之间。
直接方法使用的协议是:
Service端是HTTPS
设备端是, 或者 +
一定是一个json对象,最大大小是128KB
从后端应用上调用直接方法
后端应用是通过来通过发起直接方法调用的,如果不使用SDK,可以直接调用reset api:
https://fully-qualified-iothubname.azure-devices.net/twins//methods?api-version=2018-06-30
该rest api必须使用来调用,传入body进行调用:
{
"methodName":"reboot",
"responseTimeoutInSeconds":200,
"payload":{
"input1":"someInput",
"input2":"anotherInput"
}
}
我们可以使用来调用:
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
后端应用会接收到一个回复,主要的回复包括如下的字段:
HTTP状态码
200 表示运行成功
404 表示,给出的设备id不合法,或者设备不在线。
504 表示gateway和设备之间的联系超时。
头里包括ETAG, Request Id, Content Type, Content Encoding.
Json格式的消息体:
{
"status":201,
"payload":{...}
}
注意这里的body和body里面的status都是由设备提供,实现自己的逻辑的。
也可以在上调用直接方法,用法一样,但是要提供
设备上处理直接方法
设备上可以通过协议和协议来处理。
MQTT
通过MQTT的topic 来接受直接方法的调用。方法收到的方法体:
{
"input1":"someInput",
"input2":"anotherInput"
}
注意
方法的请求QoS被设置为了0, 也就是说最多发送一次。不保证请求一定到达设备。
Response
设备送回复到topic: iothub/methods/res//?$rid=
属性由设备提供状态
属性是request id,通过后端方法调用传入的。
TG客服:@SSjiejie — 官方频道:@SSwangluo
三生网络 © 2009-2023 超15年出海经验,跨境项目专家