项目场景:
使用阿里物联平台的接口修改设备属性
问题描述
阿里云平台提供了外部接口去修改设备的属性值,调用成功后发现设备属性依然不变
平台是已经收到我们的指令了,设备也收到平台转发我们的指令,但是平台的属性值依然不变
package main
import (
"fmt"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
iot "github.com/aliyun/alibaba-cloud-sdk-go/services/iot"
)
func main() {
config := sdk.NewConfig()
credential := credentials.NewAccessKeyCredential("<your-access-key-id>", "<your-access-key-secret>")
/* use STS Token
credential := credentials.NewStsTokenCredential("<your-access-key-id>", "<your-access-key-secret>", "<your-sts-token>")
*/
client, err := iot.NewClientWithOptions("cn-shanghai", config, credential)
if err != nil {
panic(err)
}
request := iot.CreateSetDevicePropertyRequest()
request.Scheme = "https"
request.IotInstanceId = ""
request.ProductKey = ""
request.DeviceName = ""
request.Items = ""
response, err := client.SetDeviceProperty(request)
if err != nil {
fmt.Print(err.Error())
}
fmt.Printf("response is %#v\n", response)
}
原因分析:
因为云端下发属性设置命令和设备收到并执行该命令是异步的,所以调用该接口时,返回的成功结果只表示云端下发属性设置的请求成功,不能保证设备端收到并执行了该请求。即需设备端SDK成功响应云端设置设备属性值的请求,设备属性值才能真正设置成功。
这是官网API文档的原话
可能有点不好理解。通俗来说就是我们只进行了数据下行,没有进行数据上报。数据下行:云端->平台->设备
平台属性值得改变与否只看设备上报的值
解决方案:
很简单,就是在
设备端开发
,收到这条指令后,返回一条属性设置的消息给平台