Обработка ответа¶
При получении строкового ответа от устройства, зачастую требуется извлечь часть данных, как значение юнита. Для этого можно использовать 3 метода обработки ответа: шаблон, парсинг json и регулярное выражение.
Template¶
Для простой обработки ответа можно использовать шаблон. В качестве примера рассмотрим 2 ответа контроллера MegaD.
Запрос значения 1wire датчика температуры¶
Пример обработки ответа с помощью шаблона

Запрос http://10.35.16.11/sec/?pt=30&cmd=get возвращает ответ вида temp:24.93. Для того чтобы извлечь из ответа только значение (без "temp: ") необходлимо целевую часть ответа (в данном случае значение 24.93) заменить плейсхолдером {{.}}.
Запрос состояние входного порта¶
Пример обработки ответа с помощью шаблона

В первом примере ответ всегда представлен одинаковой структурой, но бывают случаи когда ответ содержит целевое значени, а также динамически меняющиеся данные. Запрос http://10.35.16.11/sec/?pt=0&cmd=get возвращает ответ вида OFF/19, где OFF - текущее состояние, а 19 - количество нажатий/активаций . Поэтому мы не можем использовать шаблон {{.}}/19, т.к. при новых сработках порта значение 19 изменится и шаблон не сработает. Чтобы игнорировать часть ответа, его нужно заменить символом * {{.}}/*. В этом случае система будет игнорировать значение после /.
JSON¶
Если ответ представляет собой json структуру, то к данным можно обратиться по имени ключа.
Предположим, что ответ имеет следующую структуру:
Чтобы получить номер порта, необходимо указать ключ port. Также поддерживаются вложенные ключи, поэтому для получения значения температуры нужно указать value.temp (вложенный ключ отделяется от родительского точкой).
Пример обработки ответа в виде json

Regex¶
Регулярные выражения могут применяться и как замена указанным выше способам, и как решение для сложных и нестандартных обработок.
Предположим, что ответ имеет следующую структуру:
{
"device_id": "TH-204",
"timestamp": "2026-07-10T14:32:00Z",
"diagnostics": {
"log": "[INFO] boot ok\n[INFO] calibration offset=+0.3\n[DATA] reading: temp:23.47;hum:41;ts=1720613520\n"
}
}
Из этого ответа требуется получить значение температуры, которое находиться в значении ключа log. Получить значение с помощью способов выше не получиться. Но можем использовать регулярное выражение (?:temp:)(-?\d+(?:.\d+)?).