Инструкция по работе со сценарием 2

IoTManager · Техническая документация
Сценарии прошивки
Инструкция и справочник языка
Версия документа 1.0 · основано на анализе ветки ver4stable
github.com/IoTManagerProject/IoTManager

1. Что такое сценарии

Сценарии — это пользовательская логика работы контроллера: набор правил «при каком событии и при каких условиях что сделать». Они позволяют реализовать индивидуальный алгоритм, не меняя прошивку. В основе языка лежит выражение вида: «Если условие истинно — выполнить одно действие, иначе — другое».

Сценарий пишется в текстовом редакторе прямо в веб-интерфейсе устройства (вкладка «Сценарий») и сохраняется в файл /scenario.txt. При сохранении ядро заново загружает и разбирает его.

Где это выполняется: движок сценариев встроен в прошивку (файл IoTScenario.cpp). Это полноценный интерпретатор небольшого языка выражений: он читает текст, строит дерево и исполняет его прямо на ESP.

2. Главный принцип: событийность

Это самое важное для понимания. Сценарий не выполняется постоянно в цикле. Отдельное выражение проверяется только тогда, когда произошло событие с элементом, который в этом выражении упомянут.

Событие возникает каждый раз, когда какой-либо элемент регистрирует новое значение: датчик считал температуру, пользователь нажал кнопку в приложении, сработал таймер. Ядро берёт имя этого элемента и прогоняет через сценарий только те выражения, где оно встречается.

# это выражение проверится ТОЛЬКО когда обновится temp1
if (temp1 > 25) then relay1 = 0 else relay1 = 1
Почему это удобно: не нужно заботиться о частоте проверок — логика срабатывает ровно в момент изменения данных. Это экономит память и процессор: сценарий из сотен строк не нагружает ESP, потому что при каждом событии работают лишь релевантные строки.
Следствие, о котором забывают: если в условии не упомянут ни один «живой» элемент (например, только время getHours()), выражение может никогда не сработать само по себе — его нечему запустить. Такие проверки привязывают к регулярно обновляющемуся элементу (например, к таймеру или датчику), чьё событие и будет триггером.

3. Основы синтаксиса

Выражение может состоять из перечисленных ниже элементов. Любое выражение при вычислении возвращает значение (число или строку).

ЭлементПримерПояснение
Идентификатор элементаtemp1Подставляется текущее значение элемента с этим ID
Число25, 3.14, -7Целые, дробные и отрицательные
Строка"перегрев"Текст в двойных кавычках
Присваиваниеrelay1 = 1Записать значение в элемент (с генерацией события)
Блок{ a=1 b=2 }Группа выражений в фигурных скобках
Комментарий# текстВсё после # до конца строки игнорируется
Функцияreboot()Системная или функция модуля (см. справочник)

Строки, кавычки и переносы

Строки заключаются в двойные кавычки. Если внутри строки нужна кавычка или перенос строки — их экранируют. В параметрах функций можно передавать любые допустимые выражения, включая другие функции и идентификаторы элементов.

4. Операторы и приоритеты

Ниже — полный список операторов, поддерживаемых движком, в порядке возрастания приоритета (чем выше приоритет, тем раньше выполняется). Значения приоритетов взяты напрямую из кода интерпретатора.

ОператорНазначениеПриоритет
:=«Тихое» присваивание — записать значение без генерации события1 (низший)
=Присваивание значения элементу (с событием)2
|Логическое ИЛИ5
&Логическое И6
==Равно10
!=Не равно11
<=Меньше или равно15
>=Больше или равно16
<Меньше20
>Больше21
+Сложение (и склейка со строкой)25
-Вычитание26
/Деление27
*Умножение28 (высший)
Про := (тихое присваивание): обычное = меняет значение и порождает событие, которое дальше пойдёт по сценариям (может вызвать цепную реакцию). Оператор := меняет значение молча — полезно, когда нужно обновить служебную переменную и не запускать связанные с ней правила.
Приоритет — не замена скобок: в сложных условиях всегда группируйте части круглыми скобками (...). Это надёжнее, чем полагаться на порядок операций, и делает сценарий читаемым.

5. Ветвление if / then / else

Конструкция ветвления — основа сценариев. Формат:

if (условие) then действие_если_истина else действие_если_ложь

Ветка else необязательна. Действием может быть как одно выражение, так и блок в фигурных скобках:

if (temperature > 25) then {
    relay = 0                    # выключить нагрев
    telegram.sendMsg("Жарко")    # уведомить
} else {
    relay = 1                    # включить нагрев
}

Условие — это любое выражение. Ноль считается ложью, ненулевое значение — истиной. Логические условия можно комбинировать через & and |:

if (temp > 30 & humidity < 40) then fan = 1

Ветвления можно вкладывать друг в друга внутри блоков для более сложной логики.

6. Обращение к элементам и вызов функций

Значение элемента

Просто напишите ID элемента — подставится его текущее значение. Присваивание ID = значение отправляет элементу команду изменить значение (например, включить реле).

Два вида функций

В языке есть функции двух типов, и они вызываются по-разному:

ТипСинтаксисПример
Системная (глобальная)функция(аргументы)reboot(), digitalWrite(2, 1)
Функция элемента (модуля)ID.функция(аргументы)lcd.prefix("T="), t1.setInterval(5)
Важно: функции модуля вызываются от имени конкретного элемента через точку. Слева от точки — ID вашего элемента (например, реле, дисплея, Telegram-бота), а не название модуля. Какие функции доступны у элемента — зависит от его типа (см. раздел 9).

Аргументы

В качестве аргументов можно передавать числа, строки, идентификаторы других элементов и даже вложенные функции. Многие функции, принимающие «сообщение» (например, Telegram), понимают как строку, так и ID элемента — тогда подставится его значение.

7. Рецепты: типовые примеры

Термостат с гистерезисом

# реле включается ниже 22, выключается выше 24
if (temp < 22) then heater = 1
if (temp > 24) then heater = 0

Уведомление в Telegram по событию

if (door == 1) then tlg.sendMsg("Открыта дверь!")

Работа по расписанию (привязка к таймеру)

# timer1 — элемент-таймер, генерирует событие ежеминутно и запускает проверку
if (timer1) then {
    if (getHours() == 22) then light = 0    # выключить свет в 22:00
    if (getHours() == 7)  then light = 1    # включить в 7:00
}

Вывод значения на дисплей

if (temp) then {
    lcd.prefix("T=")
    lcd.postfix(" C")
    lcd.id2show("temp")
    lcd.display()
}

Тихое обновление служебной переменной

# обновляем счётчик, но НЕ запускаем правила, где он используется
if (motion == 1) then counter := counter + 1

Реакция на диапазон времени

if (motion == 1) then {
    if (nowInTimePeriod("23:00", "06:00")) then light = 1
}

8. Справочник: системные функции

Системные функции вызываются глобально: функция(...). Функции даты/времени работают, только если время получено из интернета (NTP) или внешних часов RTC; иначе условие с ними пропускается.

Управление элементами и устройством

ФункцияParametersDescription
getIntFromNet—Получаем количество секунд доверия к значениям элемента. При -2 доверие полное, при -1 время доверия истекло. При >0 время обратного отсчета. Используется только совместно с ИД элемента: ID.getIntFromNet()
setIntervalСекундыМеняем интервал выполнения периодиеских операций элемента в секундах. Используется только совместно с ИД элемента: ID.setInterval(5)
doByInterval—Выполняем интервальное действие модуля вне плана. Используется только совместно с ИД элемента: ID.doByInterval()
exitПричинаПрерываем работу сценария и выводим в консоль причину. Причина не обязательна.
reboot—Перезагружаем ESP
deepSleepЧислоСекундПогрузить ESP в глубокий сон. Вывод из сна с перезагрузкой. Для ESP8266 необходимо соединить gpio 16 и RST

Работа с пинами (GPIO)

ФункцияParametersDescription
digitalReadНомерПинаЧитаем состояние пина, результат возвращается
analogReadНомерПинаЧитаем состояние аналогового пина, результат возвращается
digitalWriteНомерПина, ЗначениеУстанавливаем статус пина
digitalInvertНомерПинаИнвертируем значение пина

Сеть и MQTT

ФункцияParametersDescription
getRSSI—Получить величину уровня принимаемого сигнала WI-FI.
getIP—Получить строку IP ESP
getUptime—Получить строку со временем работы устройства hh:mm:ss
mqttPubТопик, ЗначениеОтправить значение в топик MQTT
mqttIsConnect—Получить состояние подключения к MQTT

Дата и время

ФункцияParametersDescription
getHours—Получить текущее число часов. Если время не получено из сети Интернет или внешнего RTC, то условие пропускается
getMinutes—Получить текущее число минут. Если время не получено из сети Интернет или внешнего RTC, то условие пропускается
getSeconds—Получить текущее число секунд. Если время не получено из сети Интернет или внешнего RTC, то условие пропускается
getMonth—Получить номер текущего месяца. Если время не получено из сети Интернет или внешнего RTC, то условие пропускается
getDay—Получить номер текущего дня месяца. Если время не получено из сети Интернет или внешнего RTC, то условие пропускается
gethhmm—Получить строку вида hh:mm. Если время не получено из сети Интернет или внешнего RTC, то условие пропускается
gethhmmss—Получить строку вида hh:mm:ss. Если время не получено из сети Интернет или внешнего RTC, то условие пропускается
getTime—Получить строку вида dd.mm.yy hh:mm:ss. Если время не получено из сети Интернет или внешнего RTC, то условие пропускается
Функции с префиксом элемента: getIntFromNet, setInterval and doByInterval вызываются от имени элемента: ID.setInterval(5). Остальные из таблиц выше — глобальные.

9. Справочник: функции модулей

Эти функции доступны, только если в конфигурации есть соответствующий элемент. Вызываются от его имени через точку: ID_элемента.функция(...). Разделы соответствуют категориям модулей. Нажмите на название модуля, чтобы раскрыть список его функций.

Как читать: «Функция» — имя метода; «Параметры» — что передавать по порядку; «—» означает, что параметров нет. Точные значения и единицы уточняйте во всплывающих подсказках самого веб-интерфейса при редактировании элемента.

Исполнительные устройства

ButtonOut (2)
ФункцияParametersDescription
change—Инвертирует значение переключателя
pulseДлительность (ms)Генерирует одиночный импульс
Buzzer (5)
ФункцияParametersDescription
toneЧастота, Длительность (ms)Проигрывание одиночного сигнала (без индикации)
tonesЧастота 1-го сигнала, Длительность 1-го сигнала (ms), Частота 2-го сигала, Длительность 2-го сигнала, ….итдПроигрывание серии сигналов, до 128
melodyКод 1-ой ноты, Код 2-й ноты, и тдПроигрывание мелодии, до 256 нот. Кодировка 'YYX.ZZZ'. Научная нотация: YY — обозначение ноты (C,CS,D,DS,E,F,FS,G,GS,A,AS,B), X — номер октавы (0-9), ZZZ — д…
notone—Остановка звучания сигнала/ноты/мелодии
melodySettingДолей в такте, Оригинальный темп, Коррекция темпа, Пауза между нот, Коррекция тональности, Повтор мелодии/серии сигналовПеренастройка параметров мелодии: Долей в такте — (обычно 4), Оригинальный темп -(40-208 bpm), Коррекция темпа — в k раз быстрее/медленнее, Пауза между нот (с…
EctoControlAdapter (30)
ФункцияParametersDescription
getModelVersion—Запрос модели и версии адаптера и бойлера
getBoilerInfo—Запрос состояния связи с котлом, типа адаптера и код перезагрузки адаптера
getBoilerStatus—Запрос состояния контуров котла и горелки
getCodeError—Код ошибки котла (основной). Зависит от марки и модели котла.
getCodeErrorExt—Код ошибки котла (дополнительный). Зависит от марки и модели котла.
getFlagErrorOT—Стандартные флаги ошибок котла (только для котлов с интерфейсом OpenTherm)
getFlowRate—Текущий расхода ГВС
getMaxSetCH—Верхний предел уставки теплоносителя
getMaxSetDHW—Верхний предел уставки ГВС
getMinSetCH—Нижний предел уставки теплоносителя
getMinSetDHW—Нижний предел уставки ГВС
getModLevel—Текущая модуляция горелки
getPressure—Текущее Давление в контуре
getTempCH—Текущая температура теплоносителя
getTempDHW—Текущая температура ГВС
getTempOutside—Температура уличного датчика котла
setTypeConnectТип подключенияУстановить тип внешних подключений (сохраняется в EPROM Адаптера): 0 — адаптер подключен к котлу, 1 — котел подключен к внешнему устройству (панель или перемы…
setTCHтемпература передаётся до десятых градусаУставка температуры теплоносителя (сохраняется в EPROM Адаптера)
setTDHWтемпература передаётся до десятых градусаУставка температуры ГВС (сохраняется в EPROM Адаптера)
setTCHFaultConnтемпература передаётся до десятых градусаУставка теплоносителя в аварийном режиме (сохраняется в EPROM Адаптера). Будет передана котлу в случае отсутствия связи адаптера с управляющим устройством
setMinCHтемпература от 0 до 100Задать нижний предел уставки теплоносителя
setMaxCHтемпература от 0 до 100Задать верхний предел уставки теплоносителя
setMinDHWтемпература от 0 до 100Задать нижний предел уставки ГВС
setMaxDHWтемпература от 0 до 100Задать верхний предел уставки ГВС
setMaxModLevelуровень модуляции 0-100%Уставка максимальной модуляции горелки (сохраняется в EPROM Адаптера)
setStatusCHвкл/откл отопленияУстановить режим (Включить) контура отопления; 0 — отключен, 1 — включен
setStatusDHWвкл/откл ГВСУстановить режим (Включить) ГВС; 0 — отключен, 1 — включен
setStatusCH2вкл/откл второго контура отопленияУстановить режим (Включить) второго контура отопления; 0 — отключен, 1 — включен. используется только некоторыми котлами с интерфейсом OpenTherm и может отвеч…
lockOutReset—Сброс ошибок котла
rebootAdapter—Перезагрузка адаптера
EspCam (5)
ФункцияParametersDescription
save—Сохранить снимок на SD
sendFotoОтправить фото с esp-CAM в телеграмм
editFotoОтредактировать последнее отправленное фото в телеграмм
flashOn—Включить вспышку
flashOff—Отключить вспышку
HttpGet (2)
ФункцияParametersDescription
getURLОтправить http запрос методом GET.
postURL, messageОтправить http запрос методом POST.
IRremote (12)
ФункцияParametersDescription
on—Включить конциционер
off—Выключить конциционер
cool—Режим охлаждения
heat—Режим нагрева
dry—Режим осушения
speedmin—Минимальная скорость вентилятора
speedmed—Средняя скорость вентилятора
speedmh—Средне — высокая скорость вентилятора
speedhigh—Высокая скорость вентилятора
speedmax—Максимальная скорость вентилятора
setTemp—Установленная температура
swing—Управление шторкой вентилятора
IoTServo (1)
ФункцияParametersDescription
rotateЧисловое значениеПовернуть привод на значение
Mp3 (9)
ФункцияParametersDescription
enableLoop—Включить бесконечное повторение
disableLoop—Выключить бесконечное повторение
randomAll—Запустить случайны трек
stop—Остановить проигрывание трека
volumeЗначение громкостиУстановить громкость
playFolderНомер папки, Номер файлаПроиграть файл из папки
play—Запустить проигрывание первого файла
next—Запустить проигрывание следующего файла
previous—Запустить проигрывание предыдущего файла
SIM800 (4)
ФункцияParametersDescription
smsСтрока текста, Номер телефона, если не указывать будет отправлено на номер number из конфигурацииОтправить sms сообщение. Например sim.sms("сообщение") или sim.sms("сообщение", "+7999999")
printСтрока текста, ID Виджета или любое значение, не обязательно, 1 — обернуть строку в кавычки, 0 — отправить без кавычек (При наличии второго параметра оборачивает только его)Отправить в UART строку текста (AT-команду). Например sim.print("AT",0)
printlnСтрока текста, ID Виджета или любое значение, не обязательно, 1 — обернуть строку в кавычки, 0 — отправить без кавычек (Пр наличии второго параметра оборачивает только его)Отправить в UART строку текста (AT-команду) и признак завершения строки (перевод строки). Например sim.println("AT+CMGS=", "+799999", 1);
printHexHEX-строка.Отправить в UART HEX-строку.
SmartBoiler (7)
ФункцияParametersDescription
CHSetтепмература СО (подачи) — bolier.CHSet(60)Установить целевую температуру СО
CHEnablebolier.CHEnable(1) — вкл, bolier.CHEnable(0) — выкл, включить / выключить отопление
SetDHWтепмература ГВС — dhw.SetDHW(40)Установить целевую температуру ГВС
DHWEnabledhw.DHWEnable(1) — вкл, dhw.DHWEnable(0) — выкл включить / выключить ГВС
addStepPowerbolier.addStepPower(1, 3, rele1) — шаг №1 в 3kW на первом реле, bolier.addStepPower(4, 24, rele1, rele3, rele4) — шаг 4 в 24Квт на 1+3+4 реле Добавить Шаг Нагрева: мощность Шага кВт, ID реле на данном шаге
onStepPowerbolier.onStepPower(2) включить определенный шаг нагрева, указывается номер шага, Включит Ручной Режим!
autoPowerbolier.autoPower()включить автоматический режим работы котла (по умолчанию включен)
Telegram (2)
ФункцияParametersDescription
sendMsgСообщение, может быть строкой, числом или ИД другого элемента для получения значенияОтправить сообщение без повторений.
sendOftenMsgСообщение, может быть строкой, числом или ИД другого элемента для получения значенияОтправить сообщение в любом случае, даж если отправляли такое ранее.
TelegramLT (2)
ФункцияParametersDescription
sendMsgСообщение, может быть строкой, числом или ИД другого элемента для получения значенияОтправить сообщение без повторений.
sendOftenMsgСообщение, может быть строкой, числом или ИД другого элемента для получения значенияОтправить сообщение в любом случае, даж если отправляли такое ранее.
Telegram_v2 (16)
ФункцияParametersDescription
sendMsgСообщение, может быть строкой, числом или ИД другого элемента для получения значенияОтправить сообщение без повторений.
sendOftenMsgСообщение, может быть строкой, числом или ИД другого элемента для получения значенияОтправить сообщение в любом случае, даже если отправляли такое ранее.
sendPinMsgСообщение, может быть строкой, числом или ИД другого элемента для получения значенияОтправить закрепленное сообщение в любом случае, даже если отправляли такое ранее.
unpinAllMsg—Открепить все сообщения в чате.
editMsgСообщение, может быть строкой, числом или ИД другого элемента для получения значенияОтредактировать последнее отправленное ботом сообщение.
sendFileПуть к файлу (/test.png), Тип файла/информации (число)Отправить файл в телеграмм, с указанием типа файла: 0-фото, 1-аудио, 2-документ, 3-видео, 4-анимация, 5-голос
editFileПуть к файлу (/test.png), Тип файла/информации (число)Отредактировать последний отправленный файл, с указанием типа файла: 0-фото, 1-аудио, 2-документ, 3-видео, 4-анимация, 5-голос
btnMenuName — название кнопки отображается ботом, message — Произвольное сообщения присылается в ответ на кнопку, Id — Вернет значение элементаОписание кнопки меню. По нажатию запросит значение ID и отправит сообщение. ID УКАЗЫВАТЬ В КАВЫЧКАХ! Пример: btnMenu(Темп.Дома, Текущая температура, IDbme280)
btnMenuName — название кнопки отображается ботом, message — Произвольное сообщения присылается в ответ на кнопку, getId — Вернет значение элемента, setId — Установит значение элементу, value — Устанавливаемое значениеОписание кнопки меню. Установит значение value в setID. При необходимости запросит значение getID и отправит сообщение. ID УКАЗЫВАТЬ В КАВЫЧКАХ! Пример: btn…
showMenu—Отобразить меню, созданное в сценарии
closeMenu—Закрыть мменю
btnInlineName — название кнопки отображается ботом, message — Произвольное сообщения присылается в ответ на кнопку, Id — Вернет значение элементаОписание кнопки встроенного (inline) меню. Запросит значение ID и отправит сообщение. ID УКАЗЫВАТЬ В КАВЫЧКАХ! Пример: btnInline(Темп.Дома, Текущая температур…
btnInlineName — название кнопки отображается ботом, message — Произвольное сообщения присылается в ответ на кнопку, getId — Вернет значение элемента, setId — Установит значение элементу, value — Устанавливаемое значениеОписание кнопки встроенного (inline) меню выводит. Установит значение value в setID. Запросит значение getID (если указан) и отправит сообщение. ID УКАЗЫВАТЬ …
showInline—Отобразить встроенное (inline) меню, созданное в сценарии
clearInline—Очистить встроенное (inline) меню, вызвать для изменения, перед созданием новых кнопок
clearMenu—Очистить меню, вызвать для изменения, перед созданием новых кнопок
Thermostat (6)
ФункцияParametersDescription
enablethermostat.enable(1) — вкл, thermostat.enable(0) — выкл, включить / выключить термостатирование (режим AUTO) применим к PID и Гистере́зис
KPthermostat.KP(1) — задает значение коэффициентаПропорциональный коэффициент PID .
KIthermostat.KI(1) — задает значение коэффициентаИнтегральный коэффициент PID .
KDthermostat.KD(1) — задает значение коэффициентаДифференциальный коэффициент PID .
setLimitsMIN / setLimitsMAXthermostat.setLimitsMIN(1) — задает минимальное значение PIDлимит выходной величины (например для ШИМ ставим 0-255).
setDirectionthermostat.setDirection(1) — задает реверсное регулированиенаправление регулирования: NORMAL (0) или REVERSE (1).

Экраны и индикация

Lcd2004 (10)
ФункцияParametersDescription
noBacklight—Выключить подсветку
backlight—Включить подсветку
noDisplay—Спрятать все данные
display—Показать данные на экране
toggle—Переключает видимость значений на экране
xНомер строки первого символаУстанавливает первую координату
yНомер столбца первого символаУстанавливает вторую координату
prefixСтрокаЗадает приставку слева от значения
postfixСтрокаЗадает приставку справа от значения
id2showИмя элемента конфигурацииЗадает ИД элемента, значение которого хотим отображать на экране
LedFX (14)
ФункцияParametersDescription
noShowOneномер пикселяВыключить один светодиод на ленте
showLedномер пикселя, цвет в формате 0xRRGGBBЗажечь один диод
setBrightnessяркость от 0 до 255Устанавливает общую яркость ленты от 0 до 255
vuMeterКоличество каналов для отображения на ленте, Список ID датчиков через запятую (если указать пустую строку, то каналы будут заполняться случайными числами от 0 до 255)Включает режим VU Meter. Важно что бы элемент ленты был ниже в списке чем элемент с датчиком, ИД которого нужно будет мониторить.
setColorцвет в формате 0xRRGGBBУстанавливает цвет ленты в формате 0xRRGGBB, например, 0xFF0000 — красный, 0x00FF00 — зеленый, 0x0000FF — синий.
setEffectномер эффекта от 0 до 79Устанавливает эффект ленты. 0-79. 0 — Статичный цвет.
setSpeedскорость от 0 до 255Устанавливает скорость эффекта от 0 до 255
fadeOutЦелевое значение яркости, до которого будет затухать, Шаг затуханияПлавное затухание яркости
fadeInЦелевое значение яркости, до которого будет нарастать, Шаг нарастанияПлавное нарастание яркости
stop—Останавливает эффект
start—Запускает эффект
pause—Пауза эффекта
resume—Возобновляет эффект
setSegmentномер сегмента от 0 до 7, глобальный номер первого пикселя в сегменте, глобальный номер последнего пикселя в сегменте, номер эффекта от 0 до 79, цвет в формате 0xRRGGBB, например, 0xFF0000 — красный, 0x00FF00 — зеленый, 0x0000FF — синий., скоростьУстанавливает сегмент ленты
Nextion (5)
ФункцияParametersDescription
Update—Функция сценария для загрузки прошивки с сервера LiveServer или другого по ip
printFFFСтрока текста, 1 — обернуть строку в кавычки, 0 — отправить без кавычекОтправить в UART текстовую строку и hex метку 3 байта 0xFF0xFF0xFF. Напимер nex.printFFF("auto.val=1",0)
printFFFСтрока текста, ID Виджета или любое значение, 1 — обернуть строку в кавычки, 0 — отправить без кавычекОтправить в UART текстовую строку и hex метку 3 байта 0xFF0xFF0xFF. Напимер nex.printFFF("t1.txt=", ID_vidget + " °", 1);
printRusFFFСтрока текста, 1 — обернуть строку в кавычки, 0 — отправить без кавычекОтправить в UART текстовую строку и hex метку 3 байта 0xFF0xFF0xFF. С предварительной конвертацией русских букв (преобразуем в кодировку ISO-8859-5)
printRusFFFСтрока текста, ID Виджета или любое значение, 1 — обернуть строку в кавычки, 0 — отправить без кавычекОтправить в UART текстовую строку и hex метку 3 байта 0xFF0xFF0xFF. С предварительной конвертацией русских букв (преобразуем в кодировку ISO-8859-5)
Oled128 (5)
ФункцияParametersDescription
xНомер строки первого символаУстанавливает первую координату
yНомер столбца первого символаУстанавливает вторую координату
descrСтрокаЗадает приставку слева от значения, если none значит пусто
descr1СтрокаЗадает приставку справа от значения. Если descr none , то не выводится
id2showИмя элемента конфигурацииЗадает ИД элемента, значение которого хотим отображать на экране
Oled64 (5)
ФункцияParametersDescription
xНомер строки первого символаУстанавливает первую координату
yНомер столбца первого символаУстанавливает вторую координату
descrСтрокаЗадает приставку слева от значения
descr1Строка
id2showИмя элемента конфигурацииЗадает ИД элемента, значение которого хотим отображать на экране
Smi2_m (2)
ФункцияParametersDescription
descrСтрокаЗадает приставку слева от значения
id2showИмя элемента конфигурацииЗадает ИД элемента, значение которого хотим отображать на экране
TM16XX (5)
ФункцияParametersDescription
setLEDsЗначение байтаЗажигает верхние светодиоды через установку байта, где каждый разряд соответствует диоду. От 0 до 255
onLEDНомер диодаВключить один диод
offLEDНомер диодаВыключить один диод
setParamLEDВкл/Выкл, ЯркостьВключить/выключить (1/0) и установить яркость от 0 до 7 дисплея
id2showИмя элемента конфигурацииЗадает ИД элемента, значение которого хотим отображать на экране
U8g2lib (5)
ФункцияParametersDescription
nextPage—Переключиться на следующую страницу
prevPage—Переключиться на предыдущую страницу
rotPage—Переключиться на следующую страницу с ротацией
gotoPageНомер страницыПереключиться на указанную страницу. Если номер не указать, то переключится на страницу закрепленную за элементом конфигурации.
setAutoPage1 — включить, 0 — выключитьУстановить автоматическую смену страниц.
Ws2812b (8)
ФункцияParametersDescription
noShowномер пикселяВыключить ленту
noShowOne—Выключить один светодиод на ленте
test—для проверки всех светодиодов ленты
showLedномер пикселя, цвет 255,255,255 или red,greenЗажечь один диод
showLedAllЦвет красного светодиода от 0 до 255, Цвет зеленого светодиода от 0 до 255, Цвет синего светодиода от 0 до 255Зажечь все диоды
Brightnessяркость от 0 до 255Устанавливает общую яркость ленты от 0 до 255
enableIndication—Включает работу индикации по idshow по дэфолту включено всегда
disableIndication—Выключает работу индикации по idshow

Сенсоры

BL0937 (1)
ФункцияParametersDescription
calibrationНапряжение, Ток, МощностьРасчет коэффициентов калибровки. Вызывать от имени BL0937 настройка. bl_set.calibration(220, 16, 3.5). Полученный коэффициенты искать в логе и ввести в конфиг…
BL0942 (1)
ФункцияParametersDescription
calibrationНапряжение, Ток, МощностьРасчет коэффициентов калибровки. Вызывать от имени BL0942 настройка. bl_set.calibration(220, 16, 3.5). Полученный коэффициенты искать в логе и ввести в конфиг…
ExampleModule (3)
ФункцияParametersDescription
expampleFuncID стороннего модуляПример функции вызываемой из сценария. Принимает Id другого модуля и смотрит его значение
expample2Описание педедаваемого параметра, параметр 2Второй Пример функции вызываемой из сценария.
expampleAnyОписание педедаваемых параметровТретий Пример функции вызываемой из сценария. С неограниченным числом параметров
Hx710 (1)
ФункцияParametersDescription
read—Прочитать текущее значение. Полезно использовать при Int=0 и считывать RAW-data по событию.
Hx711 (3)
ФункцияParametersDescription
tare—Авто установка нуля
sleepMode=1 режим сна, =0 проснутьсяПеревести в режим сна
read—Прочитать текущее значение. Полезно использовать при Int=0 и считывать вес по событию.
Ina219 (1)
ФункцияParametersDescription
sleep1- вкл сна/ 0-выкл снаINA219 Настройки. Установка / снятие режима сна датчика INA219
Ina226 (1)
ФункцияParametersDescription
sleep1- вкл сна/ 0-выкл снаINA226 Настройки. Установка / снятие режима сна датчика INA226
MQgas (8)
ФункцияParametersDescription
calibrate—Калибровка с параметрами по умолчанию
calibrateR0Ro in clean airКалибровка с установкой номинального сопротивления сенсора на чистом воздухе
calibrateRlRoRl/Ro in clean airКалибровка с установкой соотношения сопротивления делителя напряжения к номинальному на чистом воздухе.
calibratePPMPPM in clean airКалибровка с установкой значения концентрации газа в чистом воздухе
setAutoCalibration0 — Выкл. 1 — Вкл.Включение/Выключение автокалибровки
runAutoCalibration—Принудительная автоматическая калибровка (с обнулением максимального сопротивления сенсора и перезапуском счетчика автокалибровки)
lastCalibration—Возврат время последней калибровки
TempHumCorrectionTemperature, HumidityПередача значений темературы и влажности для расчета поправки
ModbusRTU (8)
ФункцияParametersDescription
readCoilsАдрес, Регистр, Кличество битЧтение койла (битового поля). Функция 0х01 протокола. Читает не более 16 бит за раз. Пример: mb.readCoils(1, "0х0000", 1)
readDiscreteInputsАдрес, Регистр, Кличество битЧтение дискретного выхода (битового поля). Функция 0х02 протокола. Читает не более 16 бит за раз. Пример: mb.readDiscreteInputs(1, "0х0000", 8)
readHoldingRegistersАдрес, Регистр, Кличество регистров, 1-float, 0-longЗапрос данных регистра. Функция 0х03 протокола. Читает не более двух регистров за раз. Пример: mb.readHoldingRegisters(1, "0х0000", 1, 0)
readInputRegistersАдрес, Регистр, Кличество регистров, 1-float, 0-longЗапрос данных регистра. Функция 0х04 протокола. Читает не более двух регистров за раз. Пример: mb.readInputRegisters(1, "0х0000", 1, 0)
writeSingleCoilsАдрес, Регистр, ДанныеЗапись в койл (битовое поле) одного бита. Функция 0х05 протокола. Пример: mb.writeSingleCoils(1, "0х0000", 1)
writeSingleRegisterАдрес, Регистр, ДанныеЗапись данных в один регистр. Функция 0х06 протокола. Пример: mb.writeSingleRegister(1, "0х0000", 128)
writeMultipleCoilsАдрес, Регистр, Кличество койлов (бит), ДанныеЗапись данных в несколько койлов до 16 (число от 0 до 65535). Функция 0x0F протокола. Пример: mb.writeMultipleCoils(1, "0х0000", 4, 3) — будут записаны в четы…
writeMultipleRegistersАдрес, Регистр, ДанныеЗапись данных в несколько регистров. На данный момент записывает 2(два) регистра!!!!! Подходит для записи float?? Функция 0х10 протокола. Пример: mb.writeMult…
ModbusRTUasync (5)
ФункцияParametersDescription
writeSingleCoilsАдрес, Регистр, ДанныеЗапись в койл (битовое поле) одного бита, вызывать из ModbusAsunc. Функция 0х05 протокола. Пример: mb.writeSingleCoils(1, "0х0000", 1)
writeSingleRegisterАдрес, Регистр, ДанныеЗапись данных в один регистр, вызывать из ModbusAsunc. Функция 0х06 протокола. Пример: mb.writeSingleRegister(1, "0х0000", 128)
writeMultipleCoilsАдрес, Регистр, Кличество койлов (бит), ДанныеВ разработке! Запись данных в несколько койлов до 16 (число от 0 до 65535), вызывать из ModbusAsunc. Функция 0x0F протокола. Пример: mb.writeMultipleCoils(1, …
writeMultipleRegistersАдрес, Регистр, ДанныеВ разработке! Запись данных в несколько регистров, вызывать из ModbusAsunc. Записывает 2(два) регистра!!!!! Подходит для записи float?? Функция 0х10 протокола…
getBitsиндекс битаПолучить из ModbusNode бит по его номеру, если ранее считали из слейва F0x01 или F0x02 более одного бита. Вернёт -1 если данных нет. Пример: mbNode.getCoil(0)…
RCswitch (3)
ФункцияParametersDescription
sendBitStrСтрока 000000000001010100010001Отправляем строку вида 000000000001010100010001
sendTriStateСтрока 00000FFF0F0Fотправляем строку вида 00000FFF0F0F
sendDecimalКод в виде числа, Количество бит чтоб заполнить нулямиотправляем строку вида 5393
RTC (4)
ФункцияParametersDescription
getTimeФормат как у функции date() в PHPПолучить строковое значение времени по указанному формату.
setTimeсек, мин, час, день, мес, годУстановить время через сценарии в формате сек, мин, час, день, мес, год.
setUnixTimertc.setUnixTime('46489234') — параметр в виде строкиУстановить время через сценарий в формате юникстайм
getTimeFloats — Вернуть секунды, i — Вернуть минуты, H — Вернуть часы в 24-часовом формате, d — Вернуть день месяца, w — Вернуть день недели, m — Вернуть месяц, Y — Вернуть год(4 знака)Получить числовое значение времени по указанному формату
UART (4)
ФункцияParametersDescription
printlnСтрока текстаОтправить в UART строку текста и признак завершения строки (перевод строки).
printСтрока текстаОтправить в UART строку текста.
printHexHEX-строка.Отправить в UART HEX-строку.
printFFFСтрока текста, 1 — обернуть строку в кавычки, 0 — отправить без кавычекОтправить в UART текстовую строку и hex метку 3 байта 0xFF0xFF0xFF.

Виртуальные элементы

Cron (2)
ФункцияParametersDescription
stop—Поставить процесс на паузу, при этом не будет событий.
continue—Продолжить выполнение с момента остановки.
GoogleSheet (2)
ФункцияParametersDescription
logGoogleid Идентификатор 1-го элеменета, id Идентификатор N-го элеменетаИспользовать не чаще раз в минуту! Логирование элементов в GoogleSheet, ID элементов указывать через запятую, от одного до N (проверено на 16шт). В данной фун…
logGoogleAnyНаименование данных, Значение для записиИспользовать не чаще раз в минуту! Запись произвольных данных в GoogleSheet
IoTMath (3)
ФункцияParametersDescription
mapЗначение1, Значение2, Значение3, Значение4Аналог функции map
convertTimetm.convertTime(13, 08, 2023, 16, 24); — передаем пять целых чисел. секунды подставятся в нольПеревести время из формата d-m-Y H:i:s например, 13-08-2023 16:24:00 в юникс-время
nowInTimePeriodНачало периода в формате HH:MM, Конец периода в формате HH:MMПроверяет входит ли текущее время в указанный период. Возвращает 1 если входит, 0 если нет.
Ping (1)
ФункцияParametersDescription
pingIP адрес или имя хостаПроверить пинг. после вызова данной функции из сценария результат будет в значении самого модуля. if ping21==1 then ЕСТЬ_пинг else НЕТ_пинга
Timer (5)
ФункцияParametersDescription
stop—Поставить процесс на паузу, при этом не будет событий и не будет уменьшаться счетчик.
reset—Вернуть таймер к началу, установленному в countDown.
continue—Продолжить выполнение с момента остановки.
intЧисло в секундахМожно изменить шаг тиков.
setInitCountDownЧисло в секундахМеняем начальное значение счетчика, устанавливаемое после сброса.
owmWeather (3)
ФункцияParametersDescription
sunriseколичество минут до(-)/после(+) рассветаФункция астрологического таймера, можно задать время до/после рассвета, вернётся количество минут до сработки или после (-). После заката будет возвращать +99…
sunsetколичество минут до(-)/после(+) закатаФункция астрологического таймера, можно задать время до/после заката, вернётся количество минут до сработки или после (-), когда 0 — значит время подошло
night—Вернет 1 если ночь (уже закат) и 0 если день (рассвет)

10. Частые ошибки

СимптомПричинаРешение
Правило никогда не срабатываетВ условии нет элемента, который порождал бы событие (например, только время)Привязать проверку к регулярному элементу — таймеру или датчику
Бесконечная цепная реакцияПрисваивание = порождает событие, запускающее то же правилоИспользовать «тихое» присваивание := для служебных переменных
Функция модуля не работаетВызов от имени модуля, а не от ID элемента; или элемента нет в конфигеПисать ID.func(), где ID — идентификатор вашего элемента
Условие со временем игнорируетсяНе получено время (нет NTP / RTC)Настроить синхронизацию времени; проверить связь
Неверный порядок вычисленийРасчёт на приоритеты операторов без скобокГруппировать части условия скобками (...)
Сценарий не применилсяНе сохранён / ошибка синтаксисаПересохранить; проверить парность скобок и кавычек, смотреть консоль
Отладка: устройство выводит ход выполнения сценария в консоль (лог). Функция exit("причина") прерывает сценарий и печатает причину — удобно для точечной диагностики.
IoTManager — Сценарии: инструкция и справочник · основано на анализе ветки ver4stable
Справочник функций собран из описаний модулей проекта · Исходный код: github.com/IoTManagerProject/IoTManager

Supported the project — saved a DIY maker! And we accept gifts...

X