Дочерняя база данных Firebase RT не обновляется с httpPostJson

Я пытаюсь записать событие, которое происходит с устройством 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 имеется "test " значение.

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

Любые идеи, что мне не хватает, чтобы на самом деле обновить оригинальный дочерний элемент switchState, а не создавать новый дочерний дочерний элемент (-Kyn_TIEItKNNACLuEk5)?

2 ответа

С помощью 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/

Для дальнейшего использования в документах Smartthings я обнаружил бета-версию (на момент написания этой статьи), которая теперь позволяет использовать команду PATCH. Проверьте здесь, http://docs.smartthings.com/en/latest/smartapp-developers-guide/async-http.html.

Другие вопросы по тегам