我正在尝试将Smartthings设备发生的事件记录到Firebase数据库中。我的Smartthings应用程序的功能是:
def reportSwitchOnHandler(evt){
log.debug "reportSwitchOnHandler called: $evt"
def params = [
uri: "https://<project-id>.firebaseio.com/switchStateData/params.json?auth=<key>",
body: [
switchState: "test"
]
]
try {
httpPostJson(params) { resp ->
resp.headers.each {
log.debug "${it.name} : ${it.value}"
}
log.debug "DEBUG (POST FIREBASE): response contentType: ${resp. contentType}"
}
} catch (e) {
log.debug "something went wrong: $e"
}我返回的"params“数据库结构是json:
{"lights":0,"switchState":"off"}我只想更新switchState。
如上所述,当我在"params“结构下运行上面的代码时,它不是更新测试子对象,而是创建一个具有类似"-Kyn_TIEItKNNACLuEk5”这样的随机值的新子对象,而在该switchState下面是具有“switchState”值的子对象。
{"-Kyn_TIEItKNNACLuEk5":{"switchState":"test"},"lights":0,"state":"off"}要让它真正更新原始的switchState子级而不是创建新的子子级(-Kyn_TIEItKNNACLuEk5),你知道我缺少什么吗?
发布于 2017-11-13 12:26:02
使用POST将数据推送到某个位置,您需要使用PATCH更新数据,而不会覆盖丢失的键。
curl -X PATCH -d '{"last":"Jones"}' \
'https://[PROJECT_ID].firebaseio.com/users/jack/name/.json'您可以使用修补程序请求在不覆盖现有数据的情况下更新某个位置的特定子项。使用补丁写入的数据中已命名的子项被覆盖,但忽略的子项不会被删除。
https://firebase.google.com/docs/reference/rest/database/#section-patch
发布于 2017-11-13 21:28:38
为了将来参考,我在Smartthings文档中发现了一个测试版功能(在撰写本文时),它现在允许使用PATCH命令。看看这里,http://docs.smartthings.com/en/latest/smartapp-developers-guide/async-http.html。
https://stackoverflow.com/questions/47256982
复制相似问题