Firebase RT数据库子项未从httpPostJson更新

时间:2017-11-13 04:16:59

标签: firebase firebase-realtime-database smartthings

我正在尝试将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)?

2 个答案:

答案 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