1

我正在尝试将 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"
}

我的“参数”数据库结构返回 json 是:

{"lights":0,"switchState":"off"}

我只想更新switchState。

话虽如此,当我在“params”结构下运行上述代码时,它不会更新 switchState 子节点,而是创建一个具有一些随机值的新子节点,例如“-Kyn_TIEItKNNACLuEk5”,并且在该 switchState 下存在“测试” “ 价值。

{"-Kyn_TIEItKNNACLuEk5":{"switchState":"test"},"lights":0,"state":"off"}

我缺少什么来实际更新原始 switchState 孩子而不是创建新的子孩子(-Kyn_TIEItKNNACLuEk5)?

4

2 回答 2

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

于 2017-11-13T04:26:02.373 回答
0

为了将来参考,我在 Smartthings 文档中发现了一个测试版(在撰写本文时)功能,该功能现在允许使用 PATCH 命令。在这里查看http://docs.smartthings.com/en/latest/smartapp-developers-guide/async-http.html

于 2017-11-13T13:28:37.543 回答