Подтверждено AVAKS:
if auto == 0 then {
ThermostatPID.enable(0);
relay1 = 0;
} else {
ThermostatPID.enable(1);
}
Замените relay1 и ThermostatPID на реальные ID своей конфигурации.
Подтверждённый принцип:
if auto & (DS18B20outside > 20) then BoilerEnable = 0;
Для исключения ложного срабатывания добавьте проверку допустимого диапазона датчика и продумайте гистерезис включения/выключения.
Предпочтительный вариант — встроенные поля элемента:
term_id = DS18B20room
term_rezerv_id = DS18B20reserve
При отказе основного датчика состояния термостата меняются на «резервный датчик», а при отказе обоих — «ошибка резервного датчика».
Для комнатного датчика:
if (DS18B20room > -20) & (DS18B20room < 60) then {
temperature = DS18B20room;
} else {
temperature = DS18B20reserve;
}
Типичные ошибочные значения: -127 °C — ошибка инициализации/чтения, 85 °C — возможный обрыв DATA. Диапазон подбирается под назначение датчика.
Подтверждено AVAKS. Добавьте таймер bleTimer с CountDown = 300:
if MQTTroom then {
bleTimer.reset();
temperature = MQTTroom;
}
if (bleTimer < 1) & (DS18B20room > -20) & (DS18B20room < 60) then {
temperature = DS18B20room;
}
При каждом новом значении основного датчика таймер сбрасывается. Если данных нет пять минут, используется проводной датчик. Чтобы не отправлять Telegram-сообщение при каждом событии, уведомление нужно привязать к отдельному флагу смены режима.
if DS18B20room < 18 then {
mqttPub("boiler/alarm/temperature", "Падение температуры: " + DS18B20room);
}
Без дополнительного флага сообщение может публиковаться при каждом обновлении датчика. Для однократного уведомления используйте отдельный элемент-флаг и сбрасывайте его после возвращения температуры в норму.
if timer == 0 then {
boiler.command(14, 50);
}
Пример ограничивает максимально разрешённую модуляцию до 50%, только если котёл поддерживает запись ID 14. Неверное ограничение мощности может ухудшить нагрев или работу ГВС.
Рабочий шаблон, составленный из обсуждений:
if DS18B20outside then {
if (DS18B20outside > -50) & (DS18B20outside < 50) then {
target_value = -0.4 * DS18B20outside + 40;
if target_value < 35 then target_value = 35;
if target_value > 80 then target_value = 80;
if dep_btn then OTset1 = target_value;
}
}
Коэффициенты, минимум и максимум являются примером, а не универсальной настройкой. Учитывайте минимальную температуру, при которой конкретный котёл способен стабильно работать.
Подтверждено AVAKS для моделей с особенностями OpenTherm:
boiler.command(24, temperature);
boiler.command(16, set_temperature);
Для диагностики допустимо временно проверить фиксированные значения:
boiler.command(24, 22);
boiler.command(16, 24);
Некоторым ZOTA также требовались boiler.command(14, 100) и идентификатор производителя boiler.command(2, 2) либо boiler.command(2, 4). Это не универсальные команды: применять по симптомам и после проверки актуальной инструкции котла.
По сообщению AVAKS:
if onStart then {
boiler.command(2, 4);
}
Используется только для соответствующей особенности Ampera.
На передающем устройстве элементы должны быть global = 1, MQTT-префикс — одинаковым, на принимающем включён приём событий других устройств:
if VirtRelay1 < 2 then relay1 = VirtRelay1;
if VirtRelay2 < 2 then relay2 = VirtRelay2;
if VirtRelay3 < 2 then relay3 = VirtRelay3;
ID должны совпадать с элементами конкретных панелей. В истории есть пользовательские варианты двусторонней синхронизации; их нельзя копировать без защиты от циклической пересылки.
Подтверждено AVAKS:
if onStart then {
ws2812.disableIndication();
}
if ld2410m then {
ws2812.showLedAll(255, 255, 255);
} else {
ws2812.noShow();
}
Доступно только при наличии соответствующих элементов ws2812 и ld2410m.
Типовой принцип:
if timer == 0 then {
boiler.SetBoilerStatus(BoilerEnable, 1, DHWenable, 0, 0, 0, 0, 0);
boiler.command(1, OTset1);
boiler.command(56, OTset56);
}
Используется для периодической повторной передачи состояния и уставок. Не учащайте опрос без необходимости: контроллер параллельно ведёт интенсивный обмен OpenTherm.
Источник: полное руководство SmartKot OpenTherm на Live-Control, редакция от 20.08.2026.