Идентификаторы, команды и системные функции чувствительны к регистру:
ThermostatPID.enable(1); # правильно, если ID элемента ThermostatPID
thermostatPID.enable(1); # другой ID
mqttIsConnect(); # правильное имя системной функции
mqttisconnect(); # не сработает
ID в сценарии должен полностью совпадать с полем id элемента конфигурации. Нельзя без проверки менять DS18B20room на ds18b20room, OTset1 на otset1 и т. п.
Правильный термин — синтаксис или точное написание, а не транскрипция.
if условие then действие;
if условие then {
действие1;
действие2;
}
if условие then {
действие1;
} else {
действие2;
}
Ключевые слова пишутся строчными буквами: if, then, else.
Символ # комментирует остаток строки:
# Эта строка не выполняется
if onStart then reboot(); # комментарий после команды
Если поставить # перед if, весь блок на этой строке будет отключён.
() — параметры функций и группировка выражений;{} — несколько действий в одном блоке;, — разделитель аргументов функции;; — разделитель команд; интерпретатор также пропускает переводы строк, но ; рекомендуется ставить явно;"...".Внутри строк поддерживаются \n, \" и \\.
ID начинается с латинской буквы или _, далее допускаются латинские буквы, цифры и _:
DS18B20room
cron_1h
relay2
_temp
Пробелы, дефисы и кириллица в ID не используются.
relay1 = 1; # присвоить значение и создать событие
relay1 == 1 # проверить равенство
relay1 != 1 # проверить неравенство
value := 10; # присвоить без генерации события
= и == имеют разный смысл. Ошибка между ними может привести к неожиданному переключению элемента или циклу событий.
Оператор := существует в исходном интерпретаторе и устанавливает значение без генерации события. Он полезен для разрыва циклов, но перед применением на конкретной сборке его нужно проверить в тестовой конфигурации.
< > <= >= == !=
& # И
| # ИЛИ
Пример:
if auto & DS18B20room < 18 then relay1 = 1;
Для сложных выражений ставьте круглые скобки явно:
if auto & (DS18B20room > -50) & (DS18B20room < 80) then {
temperature = DS18B20room;
}
Поддерживаются +, -, *, /.
target_value = -0.4 * DS18B20outside + 40;
message = "Температура: " + DS18B20room;
Для чисел используется точка: 1.2, а не 1,2.
Для строк + выполняет склейку. В строковом сравнении символ * работает как подстановка одного символа.
0 — ложь;Поэтому конструкция if temperature не подходит для датчика, у которого реальное значение может быть 0 °C.
Источник: полное руководство SmartKot OpenTherm на Live-Control, редакция от 20.08.2026.