我正在尝试将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”结构下,而不是更新switchState子节点,它会创建一个具有一些随机值的新子节点,如“-Kyn_TIEItKNNACLuEk5”,并且在那下,switchState与“测试”值。
{"-Kyn_TIEItKNNACLuEk5":{"switchState":"test"},"lights":0,"state":"off"}
我缺少什么想法来实际更新原始的switchState子节点而不是创建一个新的子子节点(-Kyn_TIEItKNNACLuEk5)?
答案 0 :(得分:1)
使用POST
将数据推送到某个位置,您需要使用PATCH
更新数据,而不会覆盖丢失的密钥。
curl -X PATCH -d '{"last":"Jones"}' \
'https://[PROJECT_ID].firebaseio.com/users/jack/name/.json'
您可以使用PATCH请求更新某个位置的特定子项,而不会覆盖现有数据。
中将删除使用PATCH写入的数据中的已命名子项
https://firebase.google.com/docs/reference/rest/database/#section-patch
答案 1 :(得分:0)
为了将来参考,我在Smartthings文档中找到了一个测试版(在撰写本文时),现在允许使用PATCH命令。点击此处http://docs.smartthings.com/en/latest/smartapp-developers-guide/async-http.html。