Как вытащить значение из JSON в обработчике onDisplay?

203 views
Skip to first unread message

Александр Разживин

unread,
Mar 24, 2021, 9:25:03 AM3/24/21
to Routix
Здравствуйте. 
Подскажите как решить данную задачу:
Итак:
1. Устройство публикует данные с сенсора в виде JSON:
{"status":"OK",
 "temperature":{"value":30.336,"string":"30.34°С"},
 "humidity":{"value":26.470,"string":"26.47%"},
 "time":"24.03.2021 15:42:05",
 "display":"30.34°С 26.47%"
Здесь нам важны два значения:  status  и display

В нормальном режиме ("status":"OK") на плитке отображается значение из "display", то есть "30.34°С 26.47%" с заданным цветом, что есть хорошечно.

Но если статус поменялся например на TIMEOUT, нужно на плитку вывести ошибку вместо значения, поменять цвет на красный и заставить мигать.

Вопрос: как в onDisplay прочитать поле из JSON значения, отличного от того, что задано в параметрах плитки? Конкретно нужно вытащить из event.getLastPayload() значение "status"

То есть мне нужно что-то вроде этого:
if (event.getLastPayload()['status'] != 'OK') {
  бла-бла-бла...
}
Разумеется, это не работает.

event.getLastPayload() выдает всю JSON-строку
event.text выдает пустое значение (в случае сбоя оно будет пустым)

Конечно, можно пихнуть в display статус, но и тогда не получается по нему отловить ошибку - статус "ОК" в этом случае отсутствует как класс, а ошибки могут быть разными (придется перечислять в условиях их все). Некрасиво как-то.

Routix.net

unread,
Mar 24, 2021, 9:29:59 AM3/24/21
to Routix
Добрый день.

var payload = event.getLastPayload();
if (payload) {
    var data = JSON.parse(payload);
    if (data.status != "OK") {
        ...

Александр Разживин

unread,
Mar 24, 2021, 9:32:10 AM3/24/21
to Routix
Ок, большое спасибо, сейчас попробую

среда, 24 марта 2021 г. в 16:29:59 UTC+3, Routix.net:
Reply all
Reply to author
Forward
0 new messages