В корзине нет товаров.
Skip to main content
9.1.
9.1.1.
9.1.2. Маска
9.1.4.
9.1.5. Режимы устройства (
9.1.6.
9.1.7.
9.2.
9.2.1.
9.2.2.
9.2.3.
9.2.4.
9.3.
11.2. Коды
Приложение B. Совместимый интерфейс
RESTful документация
Thermozone AB4 — руководство по интеграции через REST API
Руководство для разработчиков внешних систем (BMS, шлюзы, мобильные приложения, системы диспетчеризации), которые подключаются к контроллеру отопления Thermozone AB4 по локальной сети.
| Параметр | Значение |
|---|---|
| Версия контракта API | 2 (поле "v": 2 в каждом ответе) |
| Проверено на прошивке | 2.0131 |
| Дата актуализации документа | 8 ноября 2026 года |
| Транспорт | HTTP/1.1, JSON, UTF-8 |
Содержание
- Назначение и область применения
- Совместимость и версионирование
- Подготовка контроллера
- Подключение к контроллеру
- Авторизация
- Протокол обмена
- Объектная модель
- Чтение состояния
- Справочник данных
- Управление
- Ошибки и статусы
- Сценарии интеграции
- Ограничения и требования
- Чек-лист приёмки интеграции
- Приложение A. Быстрый старт
- Приложение B. Совместимый интерфейс
/apijson
1. Назначение и область применения
Контроллер предоставляет локальный HTTP/JSON-интерфейс, позволяющий внешней системе:
- получать состояние отопления: температуры помещений и полов, уставки, текущую мощность нагрева, режимы работы;
- получать данные датчиков: температуры, влажность, состояние выходов;
- получать данные котла при управлении по OpenTherm: температуры, модуляцию, давление, ошибки, уставки;
- задавать уставки и режимы отдельных устройств (зон) и групп (помещений);
- переключать системные режимы: летний, охлаждение, вентиляция;
- управлять свободными выходами контроллера;
- управлять котлом через OpenTherm.
Интерфейс предназначен для работы внутри локальной сети. Доступ через интернет напрямую не предусмотрен: для удалённого подключения используйте VPN или обратный прокси.
Настройка контроллера (создание устройств, привязка датчиков, конфигурация котла) выполняется монтажником через веб-интерфейс устройства. Внешняя система работает с уже настроенным контроллером: читает конфигурацию и управляет ею в пределах, разрешённых настройками.
Сводка интерфейсов
| Задача | Запрос | Ключ |
|---|---|---|
| Прочитать конфигурацию | GET /api_climate?scope=config | не нужен |
| Прочитать состояние | GET /api_climate?scope=state&cfg_hash=<хеш> | не нужен |
| Прочитать конфигурацию и состояние | GET /api_climate?scope=full | не нужен |
| Управление | POST /apiaction?apikey_rest=<ключ>&... | обязателен |
| Совместимое чтение и управление | GET /apijson?apikey_rest=<ключ>&... | обязателен |
2. Совместимость и версионирование
- Поле
"v"в корне каждого ответа — версия контракта. Текущая версия —2. Несовместимые изменения сопровождаются увеличением этого поля. - Набор полей может дополняться без смены
v. Внешняя система обязана игнорировать неизвестные поля и объекты и не должна падать при их появлении. - Поля, описанные в этом документе, считаются стабильными. Поля, которых нет в документе, стабильными не являются: их наличие, имена и смысл могут меняться без предупреждения.
- Версия прошивки контроллера доступна в
st.sys.fw(строка формата"2.0131"). Используйте её для журналирования и для выбора ветки поведения при необходимости.
3. Подготовка контроллера
Перед подключением внешней системы контроллер должен быть введён в эксплуатацию:
- Контроллер подключён к сети и имеет постоянный адрес (статический IP или резервирование по DHCP), а также, при поддержке сети, имя вида
имя-устройства.local. - Созданы и настроены устройства (зоны): назначены датчики, выходы, режимы работы.
- Созданы группы (помещения) и при необходимости включено «управление группой».
- Задан ключ API на странице основных настроек контроллера (см. раздел 5).
- При использовании OpenTherm модуль включён и связь с котлом установлена.
Особенности, влияющие на интеграцию:
- Устройства в режиме «Отключено» присутствуют в конфигурации, но отсутствуют в состоянии.
- Устройство может быть ведомым (SLAVE): оно исполняет запрос других зон и не имеет собственной уставки.
- Устройство может находиться под управлением группы: прямые команды такому устройству отклоняются, управление выполняется на уровне группы.
4. Подключение к контроллеру
| Параметр | Значение |
|---|---|
| Схема | http:// (TLS не используется) |
| Порт | 80 |
| Адрес | IP-адрес контроллера или его локальное имя |
| Формат данных | JSON, Content-Type: application/json |
| Кодировка | UTF-8 |
Примеры базовых адресов:
http://192.168.1.50
http://iohouse-kitchen.localПоддерживается Connection: keep-alive: одну сессию можно переиспользовать для серии запросов. Если клиент не поддерживает постоянные соединения, каждый запрос выполняется отдельно — это допустимо, но менее эффективно.
5. Авторизация
Ключ доступа задаётся на странице основных настроек контроллера в поле «API» и передаётся в каждом запросе параметром apikey_rest. Допустимая длина ключа — до 63 символов; рекомендуется не менее 16 символов, буквы и цифры.
| Интерфейс | Требуется ключ | Поведение без ключа |
|---|---|---|
GET /api_climate (чтение) | нет | запрос выполняется |
GET /apijson (чтение и совместимые команды) | да | HTTP 401, тело {"ok":0,"err":"auth"} |
GET|POST /apiaction (управление) | да | HTTP 200, тело {"v":2,"ok":0,"err":"auth",...} |
Требования:
- Если поле ключа на контроллере пустое, защита команд не действует. Перед подключением контроллера к общей сети ключ должен быть задан.
- Чтение через
/api_climateключом не защищено и рассчитано на доверенный сегмент сети. Не публикуйте контроллер в интернет и не размещайте его в гостевом сегменте. - Ключ передаётся в строке запроса, поэтому попадает в журналы прокси и серверов. Не журналируйте полные URL с ключом и не передавайте их во внешние сервисы.
6. Протокол обмена
6.1. Методы и параметры
Команды принимаются методами GET и POST (равнозначно). Параметры передаются в строке запроса либо телом application/x-www-form-urlencoded. Для управляющих запросов рекомендуется POST с телом — так ключ и значения не попадают в журналы доступа.
6.2. Формат ответа
Ответ приходит целиком: заголовки с Content-Length, затем JSON-тело. Ответ всегда является корректным JSON, включая ответы с ошибками.
6.3. Кросс-доменные запросы
Заголовки CORS не отдаются. Запрос из браузера со стороннего домена не будет принят. Интеграция должна выполняться на стороне сервера, шлюза или мобильного приложения.
6.4. Типы значений
- Флаги могут приходить как JSON-булевы
true/falseили как числа0/1. Трактуйтеtrueи1как «включено»,falseи0— как «выключено»; не сравнивайте флаги строго с числом. - Температуры зон — °C с точностью 0.1.
- Температуры датчиков — °C с точностью 0.01.
- Влажность — % с точностью 0.01.
- Мощность и проценты — 0…100 с точностью 0.1.
- Время работы контроллера:
st.sys.upm— целые минуты с момента запуска на отдельном 64-битном таймере (переполнение счётчикаst.tsего не сбрасывает);st.sys.up— совместимое поле в миллисекундах, всегда кратно 60 000.st.ts— миллисекунды с момента запуска, только как метка снимка (см. 9.2). - Строки — UTF-8; имена задаёт пользователь, они могут быть пустыми.
6.5. Отсутствие значения
Если измерение недостоверно (датчик не отвечает, значение ещё не получено), соответствующее поле отсутствует в ответе. Не подставляйте вместо него 0 и не считайте нулём температуру: это приведёт к ложным решениям.
6.6. Частота опроса
Контроллер обслуживает запросы одним потоком. Рекомендуемый интервал опроса состояния — 5 секунд и более; период внутреннего регулирования также равен 5 секундам, поэтому более частый опрос не даёт новой информации. Одновременная работа более двух опрашивающих клиентов замедляет ответы всем.
7. Объектная модель
Контроллер описывает систему как группы (помещения) и входящие в них устройства (зоны).
| Идентификатор | Формат | Пример | Свойства |
|---|---|---|---|
unit_id | u_ + 3…29 символов [0-9A-Za-z_] (общая длина 5…31) | u_slot_0 | постоянный, не меняется при переименовании |
group_id | g_ + 6 hex-символов | g_1A2B3C | постоянный |
Ёмкости контроллера:
| Сущность | Количество | Идентификаторы |
|---|---|---|
| Устройства (зоны) | до 11 | unit_id |
| Группы | до 8 | group_id |
| Выходы | 10 | out1…out10 |
| Датчики температуры DS18B20 | 8 | ds1…ds8 |
| Каналы температуры/влажности DHT | 2 | dht1…dht2 |
Все команды адресуются по unit_id или group_id. Числовых индексов зон в интерфейсе нет — не используйте порядок элементов массива как идентификатор.
7.1. Конфигурация и состояние
Ответ разделён на две части:
cfg— конфигурация: группы, устройства, режимы, названия, выходы, датчики. Меняется редко (при настройке контроллера);st— состояние: температуры, уставки, мощность, режимы, показания датчиков, котёл. Меняется постоянно.
cfg_hash — 16 hex-символов, контрольная сумма конфигурации. Внешняя система хранит последнее полученное значение и передаёт его при опросе, чтобы не получать конфигурацию каждый раз.
7.2. Цикл синхронизации
- Первый запрос — получить
cfgиst, запомнитьcfg_hash. - Далее опрашивать только состояние, передавая
cfg_hash. - Если в ответе
cfg_changed = 1, конфигурация изменилась: перечитать её и заново построить карту устройств и групп.
cfg_changed = 1 возвращается только при переданном cfg_hash, который не совпал с текущим. Если cfg_hash не передан, cfg_changed всегда 0.
8. Чтение состояния
8.1. Основной запрос
GET /api_climate?scope=state&cfg_hash=<известный хеш>Это рекомендуемый способ чтения. Ключ не требуется.
| Параметр | Значение | Результат |
|---|---|---|
scope | full или не указан | cfg + st |
scope | config | только cfg |
scope | state | st; cfg добавляется, если cfg_hash не передан или устарел |
cfg | 1 | принудительно включить cfg |
cfg_hash | 16 hex | известная клиенту версия конфигурации |
<unit_id> | 1 | фильтр: включить только перечисленные устройства |
Фильтр по устройствам: если передан хотя бы один параметр, имя которого совпадает с unit_id и значение равно 1, в ответ попадут только эти устройства. Если фильтра нет — все работающие устройства.
Примеры:
GET /api_climate
GET /api_climate?scope=config
GET /api_climate?scope=state&cfg_hash=1a2b3c4d5e6f7081
GET /api_climate?scope=state&cfg_hash=1a2b3c4d5e6f7081&u_slot_0=1&u_slot_3=18.2. Особенности ответа
- Ответ может содержать дополнительные поля, не описанные в этом руководстве. Игнорируйте их и не используйте в логике (см. раздел 2).
- В
st.sysприсутствуютfw(версия прошивки),upd(доступно обновление),uv(версия обновления приupd) иo— массив состояний выходовout1…out10. - Блок
st.otприсутствует в любом ответе, содержащемst: при выключенном OpenTherm он равен{"a": false}. В ответеscope=configблокаstнет вовсе.
8.3. Общий вид ответа
{
"v": 2,
"cfg_hash": "1a2b3c4d5e6f7081",
"cfg_changed": 0,
"cfg": { },
"st": { }
}9. Справочник данных
9.1. cfg — конфигурация
cfg.cc — автоматика климата
| Поле | Тип | Описание |
|---|---|---|
en | флаг | автоматика климата включена |
out | строка | датчик улицы, идентификатор датчика (см. 9.1.3) |
home | строка | датчик присутствия «дома» |
ad | число | задержка ухода, минуты |
hd | число | задержка присутствия, секунды |
hy | число | гистерезис, °C |
st | число | летний порог, °C |
wt | число | зимний порог, °C |
fd | число | отклонение для принудительного прогрева, °C |
cfg.vent — вентиляция по CO₂
| Поле | Тип | Описание |
|---|---|---|
en | флаг | режимы вентиляции разрешены |
off | число | порог CO₂ отключения, ppm |
full | число | порог CO₂ полной скорости, ppm |
9.1.1. cfg.groups[] — группы
| Поле | Тип | Описание |
|---|---|---|
id | строка | group_id |
n | строка | имя группы |
p | флаг | системная защищённая группа (не удаляется и не переименовывается) |
os | строка | датчик открытия окна/двери; поля нет — датчик не назначен |
og | флаг | защита по открытию включена |
co2 | строка | датчик CO₂ группы |
gc | флаг | включено «управление группой» — группа управляется как единое помещение |
gcap | число | битовая маска доступных сущностей группы (см. 9.1.2) |
d | массив | устройства группы |
9.1.2. Маска gcap
| Бит | Значение | Смысл |
|---|---|---|
1 | 0x01 | доступно управление климатом/воздухом (gk=c) |
2 | 0x02 | доступно управление полом (gk=f) |
4 | 0x04 | доступно управление влажностью (gk=h) |
8 | 0x08 | группа поддерживает нагрев и охлаждение |
9.1.3. Идентификаторы датчиков в конфигурации
Ссылки на датчики в полях cc.out, cc.home, groups[].os, groups[].co2 имеют вид <источник>:<слот>:
| Источник | Что это | Слот |
|---|---|---|
ds | проводной датчик DS18B20 | 0…7 |
dht | канал DHT | 0…1 |
mqtt | датчик, полученный по MQTT | 0…7 |
ha | датчик из Home Assistant | 0…7 |
"out": "ds:0" // первый проводной датчик
"co2": "mqtt:1" // второй MQTT-датчикНумерация слотов начинается с нуля. Это не то же самое, что идентификаторы ds1…ds8 в cfg.sens и st.sens, где нумерация начинается с единицы.
9.1.4. cfg.groups[].d[] — устройство
| Поле | Тип | Описание |
|---|---|---|
id | строка | unit_id |
n | строка | отображаемое имя устройства |
m | число | режим устройства, 1…23 (см. 9.1.5) |
t | число | тип устройства: 1 общий, 2 пол, 3 воздух, 4 котёл, 5 вытяжная вентиляция, 6 привод клапана, 7 прочее |
sl | флаг | ведомое устройство (SLAVE) |
hu | флаг | влагоудаление |
fsrc | строка | unit_id источника для вытяжки или клапана, привязанного к фанкойлу |
vp | флаг | участие в вентиляции разрешено |
ord | число | порядок отображения в интерфейсе |
cap | число | класс возможностей: 1 — котловой/центральный, 2 — без самостоятельного регулирования температуры, 3 — местное регулирование температуры |
gl | флаг | устройство под управлением группы |
zone | строка | метка физического входа контроллера: A1, A2, B1, B2 (только для соответствующих устройств) |
9.1.5. Режимы устройства (m)
| Код | Режим | Код | Режим |
|---|---|---|---|
| 1 | Отключено | 13 | Обогрев кровли/стока, включение/выключение |
| 2 | Ручной режим | 14 | Котёл с аналоговым входом |
| 3 | ШИМ-управление | 15 | Насос или котёл, включение/выключение |
| 4 | Трёхходовой клапан, трёхконтактный | 16 | Бойлер косвенного нагрева и рециркуляция ГВС |
| 5 | ШИМ-управление тёплым полом | 17 | Ведомое устройство (SLAVE) |
| 6 | Электрический тёплый пол, включение/выключение | 18 | Ведомый БКН (SLAVE) |
| 7 | Электрический конвектор, включение/выключение | 19 | Медленный ШИМ, включение/выключение |
| 8 | Внутрипольный конвектор с EC-вентилятором | 20 | Электрокотёл до 3 ТЭНов или каскад котлов |
| 9 | Тепловентилятор | 21 | Ведомый электрокотёл, 3 ТЭНа (SLAVE) |
| 10 | Трёхскоростной внутрипольный конвектор | 22 | Виртуальное ШИМ-устройство |
| 11 | Фанкойл (нагрев и охлаждение) | 23 | Виртуальное программное устройство |
| 12 | Влагоудаление, включение/выключение |
Режим влияет на набор доступных команд:
- режим
1— устройство отсутствует в состоянии, команды не применяются; - режим
2— уставка не действует, мощность задаётся командойmpwm; - ведомые устройства (признак
sl, например режимы 17, 18, 21) не имеют собственной уставки: командыtt,aw,ec,ntк ним не применяются.
9.1.6. cfg.out[] — выходы
| Поле | Тип | Описание |
|---|---|---|
id | строка | out1…out10 |
n | строка | имя выхода |
9.1.7. cfg.sens — датчики
| Раздел | Поля | Описание |
|---|---|---|
sens.ds[] | id, n | проводные датчики ds1…ds8 |
sens.dht[] | id, n | каналы DHT dht1…dht2 |
В конфигурацию попадают только назначенные датчики.
9.2. st — состояние
st — снимок состояния на момент ответа. Даты, времени суток и часового пояса в контракте нет: контроллер ведёт только счёт от своего запуска.
Все счётчики работы сбрасываются при перезапуске контроллера. Питание пропало — отсчёт начинается заново; сохранять отметку запуска нужно на стороне интеграции.
st.ts — метка снимка
Миллисекунды с момента запуска контроллера. Счётчик 32-битный: он обнуляется при перезапуске и переполняется примерно через 49.7 суток. Это не время суток и не надёжная мера длительности.
Как использовать:
- сравнивайте
st.tsтолько внутри одного запуска — как признак того, что ответы относятся к одному и тому же сеансу работы; - не вычисляйте длительности как разность
st.tsдвух ответов: после перезапуска или переполнения разность станет отрицательной или огромной; - для вопроса «сколько работает контроллер» берите
st.sys.upm; - метку реального времени ставьте на своей стороне в момент приёма ответа.
st.sys — общесистемные сведения
| Поле | Тип | Описание |
|---|---|---|
sm | флаг | летний режим: отопление выключено |
ce | флаг | режимы охлаждения разрешены в настройках |
cm | флаг | режим охлаждения включён |
vm | флаг | режим вентиляции включён |
ve | флаг | режимы вентиляции разрешены в настройках |
wf | флаг | Wi-Fi подключён |
wr | число | уровень сигнала Wi-Fi, dBm |
upm | число | время работы с момента запуска, целые минуты; 64-битный счётчик на отдельном таймере, переполнение st.ts на него не влияет |
up | число | совместимое поле: то же время в миллисекундах, всегда кратно 60 000 (upm × 60 000), фактическая точность — одна минута; в новых интеграциях используйте upm |
lm | флаг | ручной запуск антилегионеллы включён |
lw | флаг | цикл антилегионеллы выполняется |
fw | строка | версия прошивки |
upd | флаг | доступно обновление прошивки |
uv | строка | версия доступного обновления |
o | массив | состояния выходов out1…out10 (флаги) |
upm и up — одно и то же значение в разных единицах, они передаются вместе и меняются раз в минуту. Внутри минуты оба поля не изменяются, поэтому по ним нельзя отслеживать короткие интервалы: для этого используйте собственные часы клиента.
В прошивках, где поля upm ещё нет, присутствует только up в миллисекундах — читайте его и не полагайтесь на отсутствующие поля.
9.2.1. st.groups[] — группа в состоянии
| Поле | Тип | Описание |
|---|---|---|
id | строка | group_id |
n | строка | имя группы |
ob | число | защита по открытию окна/двери блокирует нагрев/охлаждение группы |
v | объект | вентиляция группы (см. ниже) |
c | объект | агрегированное состояние климата/воздуха |
f | объект | агрегированное состояние пола |
h | объект | агрегированное состояние влажности |
d | массив | устройства группы |
Объекты c, f, h присутствуют только при наличии в группе соответствующего участника. Группы, в которых нет ни одного работающего устройства, в st.groups не попадают — их описание остаётся в cfg.
Объект v (вентиляция по CO₂):
| Поле | Описание |
|---|---|
pwm | требуемая скорость вентиляции, % |
co2 | текущий уровень CO₂, ppm |
fb | вентиляция работает по резервному сценарию |
Поля объектов группы:
| Объект | Поля |
|---|---|
c (климат/воздух) | p, tp, t, tt, pwm, hc, br, hx, aw, ec, nt |
f (пол) | p, t, tt, pwm, br, hx, ov |
h (влажность) | p, tp, t, tt, act |
Смысл полей совпадает с полями устройства (tp, t, tt, pwm, br, hx, aw, ec, nt, p, hc). Особенности:
- в объекте
fполеtt— допустимая (предельная) температура пола,ov— перегрев пола,hxвсегда1; - в объекте
hзначенияtиtt— проценты влажности,act— влажность регулируется в текущий момент.
9.2.2. st.groups[].d[] — устройство в состоянии
| Поле | Тип | Описание |
|---|---|---|
id | строка | unit_id |
gl | число | устройство под управлением группы; прямые команды отклоняются. Поле отсутствует, если групповое управление не действует |
p | флаг | устройство работает в текущий момент (нагрев, охлаждение или вентиляция) |
tp | флаг | задано требование работы |
t | число | температура помещения, °C |
ft | число | температура пола, °C (только при наличии датчика пола) |
fht | число | температура воздуха на нагревателе фанкойла, °C |
tt | число | действующая уставка, °C |
tl | число | уставка заблокирована для прямого управления |
pwm | число | текущая мощность, % |
ol | число | логический процент основного выхода, % |
ca | массив | активность ступеней каскада (для двух- и трёхступенчатых устройств) |
aw | флаг | режим «Не дома» |
nt | флаг | ночной режим |
ec | флаг | эко-режим |
hc | число | готовность регулирования: контроллер накопил достаточно данных, чтобы уверенно управлять устройством |
br | число | нагреватель активен, с учётом нормально замкнутых/разомкнутых выходов |
hx | число | вид работы: 0 — не определён, 1 — отопление, 2 — охлаждение, 3 — вентиляция |
af | флаг | включён догрев пола |
afg | флаг | догрев пола выполняется |
sl | флаг | ведомое устройство |
vp | число | положение клапана, % (только для двухконтактного привода) |
vcl | флаг | клапан закрывается |
vop | флаг | клапан открывается |
vcd | флаг | клапан закрыт |
vod | флаг | клапан открыт |
Различие p и tp:
tp— требование работы, то есть то, что задано пользователем или группой;p— фактическая работа в данный момент.
Требование может быть включено, а фактическая работа отсутствовать: например, при достигнутой температуре, при защите по перегреву пола, при открытом окне или при блокировке датчика.
Различие br и hx:
br— нагреватель физически активен;hx— вид работы, если он определён.
pwm — текущая мощность в процентах и не заменяет br: знак мощности не определяет направление, а нулевая мощность не доказывает, что нагреватель выключен (инерция, задержки).
9.2.3. st.out.d[] — выходы
| Поле | Тип | Описание |
|---|---|---|
id | строка | out1…out10 |
s | число | выход включён |
p | число | скважность, % |
b | число | выход занят устройством; ручное управление недоступно |
uid | строка | unit_id устройства, за которым закреплён выход |
9.2.4. st.sens — датчики
| Раздел | Поля | Описание |
|---|---|---|
sens.ds[] | id, a, e, t | проводные датчики: a — датчик настроен, e — ошибка чтения, t — температура °C |
sens.dht[] | id, a, t, h | каналы DHT: a — данные достоверны, t — температура °C, h — влажность % |
Если t или h отсутствует — значение недостоверно. Значение e = 1 означает ошибку чтения конкретного датчика.
9.3. st.ot — данные котла (OpenTherm)
Блок присутствует в любом ответе, содержащем st. Если модуль выключен, блок равен {"a": false}. В ответе scope=config блока st нет, поэтому нет и st.ot.
9.3.1. Режим и разрешения
| Поле | Тип | Описание |
|---|---|---|
a | флаг | модуль OpenTherm активен |
c | флаг | связь с котлом установлена |
n | строка | имя котла (задаётся пользователем) |
model | строка | модель котла |
chen | флаг | отопление разрешено пользователем |
hwe | флаг | контур ГВС установлен |
dhwon | флаг | ГВС разрешена пользователем |
mode | число | режим управления: 0 — ручной, 1 — автоматический по температуре, 2 — автоматический по мощности |
ais | флаг | управление не ручное |
9.3.2. Уставки и запросы
| Поле | Описание |
|---|---|
tgt | заданная уставка отопления, °C |
dhwtgt | заданная уставка ГВС, °C |
etgt | фактическая (эффективная) уставка отопления с учётом всех источников запроса, °C |
edhwtgt | фактическая уставка ГВС, °C |
hreq | котлу передаётся запрос отопления |
hsrc | источник запроса отопления |
hpwm | запрос отопления, % мощности |
dreq | котлу передаётся запрос ГВС |
dsrc | источник запроса ГВС |
Для отображения пользователю используйте etgt и edhwtgt: при автоматическом управлении tgt и dhwtgt — лишь исходные значения настроек.
9.3.3. Состояние котла
| Поле | Описание |
|---|---|
ch | котёл работает на отопление |
dhw | котёл работает на ГВС |
fl | пламя есть |
f | код ошибки котла |
diag | диагностический код |
cool | активно охлаждение |
coolsp | уставка охлаждения, °C |
9.3.4. Измерения и их достоверность
Значение достоверно только при соответствующем флаге; иначе не используйте его.
| Измерение | Флаг | Единица |
|---|---|---|
cht — температура подачи | chtv | °C |
dhwt — температура ГВС | dhwtv | °C |
ret — температура обратки | retv | °C |
mod — уровень модуляции | modv | % |
pr — давление | prv | бар |
Никогда не подставляйте ноль вместо недостоверного измерения.
9.3.5. Пределы и характеристики
| Поле | Описание |
|---|---|
cbv, cbmin, cbmax | допустимый диапазон уставки отопления и признак его достоверности |
dhwbv, dhwbmin, dhwbmax | допустимый диапазон уставки ГВС |
maxcap, mincap, minmod | максимальная и минимальная мощность и минимальная модуляция |
fcv, ff, fc | достоверность, флаги и код неисправности |
dcv, dc | достоверность и диагностический код |
bh, bs | часы работы и число успешных пусков горелки |
opv, opch, opdhw | достоверность и текущие режимы котла (отопление и ГВС) |
opid, opst | идентификатор и состояние последней команды смены режима |
bhv, bsv | флаги достоверности для bh и bs |
Перед записью уставки через API проверяйте cbv/cbmin/cbmax и dhwbv/dhwbmin/dhwbmax.
9.3.6. Расширенная телеметрия
st.ot.ts — массив дополнительных измерений котла:
[
{ "id": 25, "valid": true, "v": 1.85 },
{ "id": 116, "valid": true, "hi": 12, "lo": 240 },
{ "id": 77, "valid": false }
]| Поле | Описание |
|---|---|
id | идентификатор параметра OpenTherm |
valid | значение достоверно |
v | числовое значение (для числовых параметров) |
hi, lo | старший и младший байты (для параметров типа «пара байтов») |
Невалидная запись не содержит v или hi/lo. Это не системная метка времени st.ts.
10. Управление
Все команды выполняются через один адрес:
POST /apiaction?apikey_rest=<ключ>Параметры передаются в строке запроса или телом формы. Ключ обязателен.
Общие правила:
- одна команда устройства адресуется по
uid(можно указать несколько раз) илиuids=<id1>,<id2>,...; - одна команда группы адресуется по
gidиgk; - команды разных типов можно объединять в одном запросе, кроме команд OpenTherm: они завершают обработку запроса;
- значения проверяются; если команда отклонена, в ответе будет
ok: 0и код вerr; - после команды всегда читайте фактическое состояние из
stв ответе.
10.1. Устройство (зона)
| Параметр | Значение | Действие |
|---|---|---|
uid | unit_id | адрес устройства; можно указывать многократно |
uids | id1,id2,... | адрес нескольких устройств одним параметром |
p | 0/1 | требование работы |
tt | °C | уставка |
aw | 0/1 | режим «Не дома» |
ec | 0/1 | эко-режим |
nt | 0/1 | ночной режим |
mpwm | 0…100 | ручная мощность, % (только для ручного режима) |
bhe | 0/1 | встроенный электрический нагреватель БКН |
bhm | 1…6 | режим нагревателя БКН |
Режимы нагревателя БКН (bhm):
| Значение | Режим |
|---|---|
| 1 | Не используется |
| 2 | Аварийный ГВС |
| 3 | Аварийный полный |
| 4 | Приоритет встроенного нагревателя |
| 5 | Нагреватель в летнем режиме |
| 6 | Только нагреватель |
Примеры:
POST /apiaction?apikey_rest=SECRET&uid=u_slot_0&tt=23.5
POST /apiaction?apikey_rest=SECRET&uid=u_slot_0&p=0
POST /apiaction?apikey_rest=SECRET&uid=u_slot_0&uid=u_slot_3&p=0
POST /apiaction?apikey_rest=SECRET&uids=u_slot_0,u_slot_3&nt=1
POST /apiaction?apikey_rest=SECRET&uid=u_slot_0&bhe=1&bhm=6Что означает «команда не применена»:
| Ситуация | Признак в состоянии | Результат |
|---|---|---|
| Устройство отключено | отсутствует в st | noop |
| Ведомое устройство | sl = true | уставка и режимы не применяются |
| Управление группой | gl = 1 | err: "glock" |
| Уставка заблокирована | tl = 1 | уставка не применяется |
| Ручная мощность у обычного устройства | режим не 2 | mpwm игнорируется |
| Нагреватель БКН у обычного устройства | — | err: "bkn" |
Уставка tt автоматически ограничивается допустимым диапазоном, заданным при настройке устройства. Фактическое принятое значение читайте в st.groups[].d[].tt.
Примечания к нагревателю БКН:
bhe/bhmприменимы только к БКН, который не является ведомым;bhe=0дополнительно переводит режим нагревателя в «не используется» (1);- параметры сохраняются в настройках устройства и действуют после перезагрузки.
10.2. Группа (помещение)
| Параметр | Значение | Действие |
|---|---|---|
gid | group_id | адрес группы |
gk | c, f, h | сущность: климат/воздух, пол, влажность |
tt | °C или % | уставка группы |
p | 0/1 | требование работы (для c и h) |
aw | 0/1 | режим «Не дома» (только c) |
ec | 0/1 | эко-режим (только c) |
nt | 0/1 | ночной режим (только c) |
Смысл tt зависит от сущности:
gk | Значение tt |
|---|---|
c | температура воздуха в помещении, °C |
f | допустимая (предельная) температура пола, °C |
h | порог влажности, % |
POST /apiaction?apikey_rest=SECRET&gid=g_1A2B3C&gk=c&tt=23.0
POST /apiaction?apikey_rest=SECRET&gid=g_1A2B3C&gk=c&p=0
POST /apiaction?apikey_rest=SECRET&gid=g_1A2B3C&gk=c&aw=1
POST /apiaction?apikey_rest=SECRET&gid=g_1A2B3C&gk=f&tt=32
POST /apiaction?apikey_rest=SECRET&gid=g_1A2B3C&gk=h&p=1&tt=55Требования:
- у группы включено «управление группой» (
cfg.groups[].gc = 1); - в маске
gcapустановлен бит нужной сущности.
Иначе команда отклоняется с err: "glock" (управление группой выключено) или err: "gkind" (в группе нет такой сущности).
Для группы с включённым управлением не отправляйте прямые команды дочерним устройствам (gl = 1) — контроллер их отклонит.
10.3. Системные режимы
| Параметр | Значение | Действие |
|---|---|---|
sm | 0/1 | летний режим: 1 — отопление выключено |
cm или coolingmode | 0/1 | режим охлаждения; включение автоматически включает летний режим |
vm или ventilationmode | 0/1 | режим вентиляции |
POST /apiaction?apikey_rest=SECRET&sm=1
POST /apiaction?apikey_rest=SECRET&cm=1
POST /apiaction?apikey_rest=SECRET&vm=0Если охлаждение или вентиляция запрещены в настройках контроллера (st.sys.ce = false или st.sys.ve = false), команда не изменит состояние.
10.4. Ручное управление выходом
| Параметр | Значение | Действие |
|---|---|---|
oid | out1…out10 | выход |
ov | 0/1 | выключить/включить |
POST /apiaction?apikey_rest=SECRET&oid=out9&ov=1Выход, закреплённый за устройством, отклоняется с err: "obusy". Перед ручным управлением проверьте st.out.d[].b.
10.5. Котёл (OpenTherm)
| Параметр | Значение | Действие |
|---|---|---|
ot_ch | 0/1 | разрешение отопления |
ot_dhw | 0/1 | разрешение ГВС |
ot_ch_tt | °C | уставка отопления |
ot_dhw_tt | °C | уставка ГВС |
ot_ch_mode | 0…6 | режим отопления котла |
ot_dhw_mode | 0…6 | режим ГВС котла |
ot_dhw_push | 1 | однократный нагрев ГВС (требуется бак ГВС) |
Правила:
uidне требуется;- запрос с параметрами OpenTherm завершает обработку: не смешивайте его с командами устройств, групп и системных режимов;
- нельзя одновременно передавать
ot_ch_mode/ot_dhw_mode/ot_dhw_pushиot_ch/ot_dhw/ot_ch_tt/ot_dhw_tt; - уставки проверяются по пределам котла и применяются только целиком;
- при автоматическом управлении уставку формирует контроллер: смотрите
etgt/edhwtgt.
POST /apiaction?apikey_rest=SECRET&ot_ch=1
POST /apiaction?apikey_rest=SECRET&ot_ch_tt=55
POST /apiaction?apikey_rest=SECRET&ot_dhw_tt=48
POST /apiaction?apikey_rest=SECRET&ot_ch_mode=2&ot_dhw_mode=110.6. Ответ на команду
{
"v": 2,
"ok": 1,
"cfg_hash": "1a2b3c4d5e6f7081",
"cfg_changed": 0,
"st": {
"ts": 1234567,
"sys": {
"upm": 4312,
"up": 258720000
},
"groups": [ ],
"out": { "d": [ ] },
"sens": { "ds": [ ], "dht": [ ] },
"ot": { "a": false }
}
}| Поле | Описание |
|---|---|
ok | 1 — команда применена, 0 — не применена или отклонена |
err | код причины при ok: 0 (см. раздел 11) |
cfg_hash | версия конфигурации |
cfg_changed | признак изменения конфигурации |
st | состояние только затронутых устройств |
В st.sys приходят только поля, которые контроллер передаёт в ответе на команду; набор может быть уже, чем в /api_climate. Наличие upm проверяйте по ответу, а не по этому примеру.
Важно: st в ответе на команду неполный. Он содержит только те устройства, которых коснулась команда. Если команда адресована системе, выходу или котлу, массив st.groups будет пустым. Для полного состояния используйте /api_climate.
11. Ошибки и статусы
11.1. HTTP-статусы
| Статус | Когда возникает | Что делать |
|---|---|---|
200 | успех; сюда же относятся ответы ok: 0 с кодом в err, в том числе err: "auth" от /apiaction | разобрать ok и err |
401 | неверный или отсутствующий ключ в /apijson | проверить ключ |
409 | контроллер находится в сервисном режиме проверки подключений | повторить позже |
503 | недостаточно ресурсов для формирования ответа (json_overflow) | повторить через 5–10 с |
11.2. Коды err
| Код | Значение |
|---|---|
auth | неверный или отсутствующий ключ |
uid | команда устройства без корректного uid/uids |
gid | группа не найдена |
gkind | у группы нет запрошенной сущности |
glock | управление группой выключено или устройство под управлением группы |
bkn | команда нагревателя адресована не тому устройству |
bkn_value | недопустимое значение bhe/bhm |
ov | недопустимое значение ov |
obusy | выход занят устройством |
ot_value | недопустимое значение команды котла |
ot_unavailable | модуль OpenTherm или контур ГВС недоступны |
ot_mode_unavailable | котёл не подтвердил команду режима |
noop | команда корректна, но ничего не изменила |
testing_active | сервисный режим проверки подключений (HTTP 409) |
json_overflow | не хватило ресурсов на ответ (HTTP 503) |
Рекомендуемая обработка: показывать пользователю понятное сообщение для auth, glock, ot_unavailable; для noop — не считать это ошибкой, а перечитать состояние; для json_overflow и testing_active — повторить запрос с паузой.
12. Сценарии интеграции
12.1. Первый запуск и построение карты
1. GET /api_climate?scope=full
2. Проверить, что "v" = 2.
3. Построить карту:
- groups[]: id, имя, gc, gcap
- groups[].d[]: id, имя, режим m, тип t, признаки sl и gl, класс cap
- out[]: id и имя
- sens: ds[] и dht[]
4. Сохранить cfg_hash.12.2. Циклический опрос
каждые 5 секунд:
GET /api_climate?scope=state&cfg_hash=<сохранённый хеш>
если ответ не получен или получен 503 → подождать 5–10 с и повторить
если cfg_changed = 1 → перечитать конфигурацию (GET /api_climate?scope=config)12.3. Изменение уставки помещения
1. Найти unit_id нужного устройства в карте.
2. POST /apiaction?apikey_rest=<ключ>&uid=<unit_id>&tt=23.5
3. Проверить ok.
4. Взять фактическую уставку из st.groups[].d[].tt ответа
или из ближайшего опроса состояния.Если в ответе ok: 0 с err: "glock" — устройство управляется группой, отправьте команду группе (gid + gk=c).
12.4. Режим «Не дома» для нескольких помещений
POST /apiaction?apikey_rest=<ключ>&uids=u_slot_0,u_slot_3&aw=1Режим «Не дома» и ночной режим меняют целевую температуру, но не снимают требование работы. Чтобы полностью отключить отопление, дополнительно передайте p=0.
12.5. Чтение датчиков
- температуры помещений —
st.groups[].d[].t; - температура пола —
st.groups[].d[].ft; - проводные датчики —
st.sens.ds[]; - температура и влажность DHT —
st.sens.dht[].
Отсутствие t/h означает недостоверное значение.
12.6. Управление помещением как единым объектом
POST /apiaction?apikey_rest=<ключ>&gid=<group_id>&gk=c&tt=23.0
POST /apiaction?apikey_rest=<ключ>&gid=<group_id>&gk=c&p=0Используйте этот способ, если в конфигурации у группы gc = 1. Дочерние устройства такой группы имеют gl = 1; прямые команды им не отправляйте.
12.7. Управление котлом
1. Прочитать st.ot, проверить a = true, c = true.
2. При необходимости изменить разрешения: ot_ch, ot_dhw.
3. Для смены уставки проверить cbmin/cbmax (или dhwbmin/dhwbmax).
4. POST команду с ot_ch_tt (или ot_dhw_tt).
5. Перечитать st.ot: etgt (edhwtgt) — фактическая уставка.13. Ограничения и требования
- Локальная сеть. Интерфейс не использует TLS. Не публикуйте контроллер в интернет; для удалённого доступа применяйте VPN или обратный прокси.
- Один поток. Контроллер обрабатывает запросы последовательно. Держите один клиент на контроллер и интервал опроса не менее 5 секунд.
- Таймауты. Устанавливайте таймаут запроса 10 секунд и корректно обрабатывайте отсутствие ответа: не наращивайте частоту опроса при ошибках.
- Ресурсы. При нехватке памяти контроллер отвечает
503сjson_overflow. Это временная ситуация: повторите запрос позже. - Ключ. Ключ передаётся в URL. Не журналируйте полные URL и не показывайте ключ в интерфейсах. При пустом ключе в настройках защита команд не работает.
- Чтение без ключа.
/api_climateне требует ключа; ограничьте сетевой доступ к контроллеру на уровне инфраструктуры. - Идентификаторы. Не используйте порядок элементов массива и числовые индексы как идентификаторы. Используйте
unit_idиgroup_id. - Не кэшируйте конфигурацию бессрочно. Всегда обрабатывайте
cfg_changed. - Не подставляйте нули. Отсутствующее измерение — недостоверно.
- Не смешивайте команды. OpenTherm-команды выполняются отдельным запросом.
- Ограничения конфигурации. Не более 11 устройств, 8 групп, 10 выходов, 8 проводных датчиков и 2 каналов DHT; часть из них может быть занята.
- Сервисные режимы. Во время проверки подключений команды отклоняются (HTTP 409). Внешняя система должна это корректно переживать и повторять попытку позже.
14. Чек-лист приёмки интеграции
GET /api_climate?scope=fullвозвращает"v": 2и заполненныеcfgиst.- Карта устройств и групп построена по
unit_idиgroup_id. - Циклический опрос идёт с интервалом не менее 5 секунд.
- Обрабатывается
cfg_changed = 1с повторным чтением конфигурации. - Команда уставки возвращает
ok: 1, а новое значение подтверждается вtt. - Обрабатываются
gl = 1,tl = 1,sl = true— прямые команды в этих случаях не отправляются или их отказ корректно показывается пользователю. - Отсутствие
t/hне приводит к подстановке нуля. - Обрабатываются коды
errи HTTP-статусы401,409,503. - Ключ не попадает в журналы и в клиентские интерфейсы.
- Контроллер доступен только из доверенного сегмента сети.
- Проверена работа при перезагрузке контроллера (повторная синхронизация без ошибок).
Приложение A. Быстрый старт
Проверка доступности и версии контракта:
curl -s "http://192.168.1.50/api_climate" | head -c 200Чтение конфигурации:
curl -s "http://192.168.1.50/api_climate?scope=config"Чтение состояния:
curl -s "http://192.168.1.50/api_climate?scope=state&cfg_hash=1a2b3c4d5e6f7081"Чтение одного устройства:
curl -s "http://192.168.1.50/api_climate?scope=state&u_slot_0=1"Установка уставки:
curl -s -X POST "http://192.168.1.50/apiaction" \
-d "apikey_rest=SECRET&uid=u_slot_0&tt=23.5"Отключение отопления помещения:
curl -s -X POST "http://192.168.1.50/apiaction" \
-d "apikey_rest=SECRET&uid=u_slot_0&p=0"Включение летнего режима:
curl -s -X POST "http://192.168.1.50/apiaction" \
-d "apikey_rest=SECRET&sm=1"Приложение B. Совместимый интерфейс /apijson
Интерфейс сохранён для совместимости с ранее выполненными интеграциями. Для новых проектов используйте /api_climate для чтения и /apiaction для управления.
B.1. Чтение
GET /apijson?apikey_rest=<ключ>&scope=full
GET /apijson?apikey_rest=<ключ>&scope=config
GET /apijson?apikey_rest=<ключ>&scope=state&cfg_hash=<хеш>Параметры scope, cfg, cfg_hash работают так же, как в /api_climate. Отличия:
- ключ обязателен;
- фильтр по
unit_idнедоступен — возвращаются все устройства; - в
st.sysнет полейfw,upd,uv,o; - блок
st.otотсутствует.
B.2. Команды
Команды адресуются именем параметра, построенным из unit_id:
| Параметр | Значение | Действие |
|---|---|---|
<unit_id>_power | 0/1 | требование работы |
<unit_id>_target_temp | °C | уставка |
<unit_id>_away_mode | 0/1 | режим «Не дома» |
<unit_id>_night_active | 0/1 | ночной режим |
<unit_id>_eco_mode | 0/1 | эко-режим |
<unit_id>_manual_pwm | 0…100 | ручная мощность, % |
summermode | 0/1 | летний режим |
coolmode / coolingmode | 0/1 | режим охлаждения |
ventmode / ventilationmode | 0/1 | режим вентиляции |
out1…out10 | 0/1 | прямой выход |
legionella_manual | 0/1 | ручной запуск антилегионеллы (при наличии БКН-мастера) |
GET /apijson?apikey_rest=SECRET&u_slot_0_target_temp=23.5
GET /apijson?apikey_rest=SECRET&u_slot_0_power=0&summermode=1Ответ на команду — полный снимок конфигурации и состояния (как scope=full), без st.ot. Из кодов раздела 11 для этого интерфейса актуальны auth (HTTP 401 с телом {"ok":0,"err":"auth"}), testing_active (HTTP 409) и json_overflow (HTTP 503).
B.3. Ограничения
- Прямые команды устройствам, управляемым группой (
gl = 1), не применяются. - Во время сервисного режима проверки подключений команды отклоняются с HTTP
409. - Интерфейс не развивается: новые возможности появляются только в
/apiactionи/api_climate.