MiEcosystem / miot-plugin-sdk

MIoT Plugin SDK for Android&iOS(beta)
406 stars 187 forks source link

单条数据的更新或删除操作,该调用哪个接口? #434

Closed dessmann closed 5 years ago

dessmann commented 5 years ago

环境

现象

插件与小米服务器的数据交互,考虑调用以下两个接口: 1、往服务器提交数据,记为接口1 miot/service/smarthome.setDeviceData(params)

2、从服务器拉取数据,记为接口2 miot/service/smarthome.getDeviceData(params)

目前遇到的问题: 1、接口1提交时报错,服务器响应信息如下: 03-23 16:09:18.676 28470 29091 I ReactNativeJS: 'miplugin', '提交保存指纹请求, params= { "did":"1010266952", "uid":"1404769031", "type":"event", "key":"dsm_q3_finger", "time":1553328558.676, "value":{ "fingerId":"00000009", "Name":"new finger", "efficacy":"", "repeat":"", "startTime":"", "endTime":"" } } ' 03-23 16:09:18.933 28470 29091 I ReactNativeJS: 保存指纹失败,{"code":-4,"msg":"server error"}

2、接口1与接口2无法响应单条数据操作,比如针对单条数据的更新或删除操作,该调用哪个接口?

期望

1、接口1提交正常

2、明确单条数据更新或删除操作的接口名称与入参出参等定义

dingshaoran commented 5 years ago

-4是服务端返回的,麻烦您在 android 手机过滤 logcat, core D/MIIO 贴出来

dessmann commented 5 years ago

过滤后的日志如下: 03-25 11:05:05.651 21247 21575 D MIIO : host:api.io.mi.com prefix:nullpath:/user/set_user_device_data method:POST params:[data:{"did":"1010266952","uid":"1404769031","type":"event","key":"dsm_q3_finger","time":1553483105.152,"value":{"fingerId":"00000001","Name":"Depe","efficacy":"","repeat":"","startTime":"2018-09-01 12:20:00","endTime":"2019-03-01 15:10:20"}}] 03-25 11:05:05.651 21247 21575 D MIIO : {"code":-4,"message":"server error","result":false}

dessmann commented 5 years ago

另外,针对单条数据的更新或删除操作,该调用哪个接口?

dingshaoran commented 5 years ago

set_user_device_data 请求参数的不需要startTime 和 endTime,需要 time。 /user/get_user_device_data 请求参数需要 time_start,time_end,不需要 time。 并且两个参数都是 long 类型的。

http://api.io.mi.com/app/user/get_user_device_data

功能:查询用户名下设备上报的属性和事件

查询的是user_device_厂商名 表

data:{

"did":"123" //设备id。 必选参数

"uid":123 //要查询的用户id 。必选参数

"key":"power" //定义与SDS表中key一致。必选参数

"type":"prop" //定义与SDS表中type一致。必选参数。可参考SDS文档中的示例

"time_start":"1473841870" //数据起点。必选参数

"time_end":"1473841880" //数据终点。必选参数

"group": //返回数据的方式,默认raw,可选值为hour、day、week、month。可选参数

"limit": //返回数据的条数,默认20,最大1000。可选参数

}

返回:

ret:{

"code":0,

"message":"ok",

"result":{}

}

http://api.io.mi.com/app/user/set_user_device_data

功能:写入用户的设备数据,支持批量

"data": {

"0": {

    "uid": "xxx",

    "did": "123",

    "time": xxx,

    "type": "xxx",

    "key": "xxx",

    "value": {

        "xxx": "xxx",

        "xxx": xxx,

    }

},

"1": {

    "uid": "xxx",

    "did": "456",

    "time": xxx,

    "type": "xxx",

    "key": "xxx",

    "value": {

        "xxx": "xxx",

        "xxx": xxx,

    }

},

}

dessmann commented 5 years ago

这两个是写入数据和读取数据的,更新数据呢?

dessmann commented 5 years ago

http://api.io.mi.com/app/user/set_user_device_data

功能:写入用户的设备数据,支持批量

"data": {

"0": {

"uid": "xxx",

"did": "123",

"time": xxx,

"type": "xxx",

"key": "xxx",

"value": {

    "xxx": "xxx",

    "xxx": xxx,

}

},

以上,value是自己传入的数据,怎么实现对单条数据的更新? 比如添加的时候value如下:

"value": {

    "name": "111",

    "age": 30,

}

如果需要把这条数据的age更改40,直接value传下面的就可以?

"value": {

    "name": "111",

    "age": 40,

}

数据更新的规则是怎样的?

dessmann commented 5 years ago

不行,还是报错: host:api.io.mi.com prefix:nullpath:/user/set_user_device_data method:POST params: { "did":"1010266952", "uid":1404769031, "type":"event", "key":"dsm_q3_finger", "time":1553503099, "value":{ "fingerId":"00000002", "Name":"Jet", "efficacy":"", "repeat":"" } }

{"code":-4,"message":"server error","result":false}

帮忙看看参数哪里不对?

lvjie0519 commented 5 years ago

我这边代码如下,没发现问题,请再测试下,如有问题,请将设备分享给账号:894158105,同时告知下设备model及设备名称。 image