Инструкция по работе со сценарием 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                    # включить нагрев
}

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

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; иначе условие с ними пропускается.

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

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

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

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

Сеть и MQTT

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

Дата и время

ФункцияПараметрыОписание
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 и doByInterval вызываются от имени элемента: ID.setInterval(5). Остальные из таблиц выше — глобальные.

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

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

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

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

ButtonOut (2)
ФункцияПараметрыОписание
changeИнвертирует значение переключателя
pulseДлительность (ms)Генерирует одиночный импульс
Buzzer (5)
ФункцияПараметрыОписание
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)
ФункцияПараметрыОписание
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)
ФункцияПараметрыОписание
saveСохранить снимок на SD
sendFotoОтправить фото с esp-CAM в телеграмм
editFotoОтредактировать последнее отправленное фото в телеграмм
flashOnВключить вспышку
flashOffОтключить вспышку
HttpGet (2)
ФункцияПараметрыОписание
getURLОтправить http запрос методом GET.
postURL, messageОтправить http запрос методом POST.
IRremote (12)
ФункцияПараметрыОписание
onВключить конциционер
offВыключить конциционер
coolРежим охлаждения
heatРежим нагрева
dryРежим осушения
speedminМинимальная скорость вентилятора
speedmedСредняя скорость вентилятора
speedmhСредне — высокая скорость вентилятора
speedhighВысокая скорость вентилятора
speedmaxМаксимальная скорость вентилятора
setTempУстановленная температура
swingУправление шторкой вентилятора
IoTServo (1)
ФункцияПараметрыОписание
rotateЧисловое значениеПовернуть привод на значение
Mp3 (9)
ФункцияПараметрыОписание
enableLoopВключить бесконечное повторение
disableLoopВыключить бесконечное повторение
randomAllЗапустить случайны трек
stopОстановить проигрывание трека
volumeЗначение громкостиУстановить громкость
playFolderНомер папки, Номер файлаПроиграть файл из папки
playЗапустить проигрывание первого файла
nextЗапустить проигрывание следующего файла
previousЗапустить проигрывание предыдущего файла
SIM800 (4)
ФункцияПараметрыОписание
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)
ФункцияПараметрыОписание
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)
ФункцияПараметрыОписание
sendMsgСообщение, может быть строкой, числом или ИД другого элемента для получения значенияОтправить сообщение без повторений.
sendOftenMsgСообщение, может быть строкой, числом или ИД другого элемента для получения значенияОтправить сообщение в любом случае, даж если отправляли такое ранее.
TelegramLT (2)
ФункцияПараметрыОписание
sendMsgСообщение, может быть строкой, числом или ИД другого элемента для получения значенияОтправить сообщение без повторений.
sendOftenMsgСообщение, может быть строкой, числом или ИД другого элемента для получения значенияОтправить сообщение в любом случае, даж если отправляли такое ранее.
Telegram_v2 (16)
ФункцияПараметрыОписание
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)
ФункцияПараметрыОписание
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)
ФункцияПараметрыОписание
noBacklightВыключить подсветку
backlightВключить подсветку
noDisplayСпрятать все данные
displayПоказать данные на экране
toggleПереключает видимость значений на экране
xНомер строки первого символаУстанавливает первую координату
yНомер столбца первого символаУстанавливает вторую координату
prefixСтрокаЗадает приставку слева от значения
postfixСтрокаЗадает приставку справа от значения
id2showИмя элемента конфигурацииЗадает ИД элемента, значение которого хотим отображать на экране
LedFX (14)
ФункцияПараметрыОписание
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)
ФункцияПараметрыОписание
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)
ФункцияПараметрыОписание
xНомер строки первого символаУстанавливает первую координату
yНомер столбца первого символаУстанавливает вторую координату
descrСтрокаЗадает приставку слева от значения, если none значит пусто
descr1СтрокаЗадает приставку справа от значения. Если descr none , то не выводится
id2showИмя элемента конфигурацииЗадает ИД элемента, значение которого хотим отображать на экране
Oled64 (5)
ФункцияПараметрыОписание
xНомер строки первого символаУстанавливает первую координату
yНомер столбца первого символаУстанавливает вторую координату
descrСтрокаЗадает приставку слева от значения
descr1Строка
id2showИмя элемента конфигурацииЗадает ИД элемента, значение которого хотим отображать на экране
Smi2_m (2)
ФункцияПараметрыОписание
descrСтрокаЗадает приставку слева от значения
id2showИмя элемента конфигурацииЗадает ИД элемента, значение которого хотим отображать на экране
TM16XX (5)
ФункцияПараметрыОписание
setLEDsЗначение байтаЗажигает верхние светодиоды через установку байта, где каждый разряд соответствует диоду. От 0 до 255
onLEDНомер диодаВключить один диод
offLEDНомер диодаВыключить один диод
setParamLEDВкл/Выкл, ЯркостьВключить/выключить (1/0) и установить яркость от 0 до 7 дисплея
id2showИмя элемента конфигурацииЗадает ИД элемента, значение которого хотим отображать на экране
U8g2lib (5)
ФункцияПараметрыОписание
nextPageПереключиться на следующую страницу
prevPageПереключиться на предыдущую страницу
rotPageПереключиться на следующую страницу с ротацией
gotoPageНомер страницыПереключиться на указанную страницу. Если номер не указать, то переключится на страницу закрепленную за элементом конфигурации.
setAutoPage1 — включить, 0 — выключитьУстановить автоматическую смену страниц.
Ws2812b (8)
ФункцияПараметрыОписание
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)
ФункцияПараметрыОписание
calibrationНапряжение, Ток, МощностьРасчет коэффициентов калибровки. Вызывать от имени BL0937 настройка. bl_set.calibration(220, 16, 3.5). Полученный коэффициенты искать в логе и ввести в конфиг…
BL0942 (1)
ФункцияПараметрыОписание
calibrationНапряжение, Ток, МощностьРасчет коэффициентов калибровки. Вызывать от имени BL0942 настройка. bl_set.calibration(220, 16, 3.5). Полученный коэффициенты искать в логе и ввести в конфиг…
ExampleModule (3)
ФункцияПараметрыОписание
expampleFuncID стороннего модуляПример функции вызываемой из сценария. Принимает Id другого модуля и смотрит его значение
expample2Описание педедаваемого параметра, параметр 2Второй Пример функции вызываемой из сценария.
expampleAnyОписание педедаваемых параметровТретий Пример функции вызываемой из сценария. С неограниченным числом параметров
Hx710 (1)
ФункцияПараметрыОписание
readПрочитать текущее значение. Полезно использовать при Int=0 и считывать RAW-data по событию.
Hx711 (3)
ФункцияПараметрыОписание
tareАвто установка нуля
sleepMode=1 режим сна, =0 проснутьсяПеревести в режим сна
readПрочитать текущее значение. Полезно использовать при Int=0 и считывать вес по событию.
Ina219 (1)
ФункцияПараметрыОписание
sleep1- вкл сна/ 0-выкл снаINA219 Настройки. Установка / снятие режима сна датчика INA219
Ina226 (1)
ФункцияПараметрыОписание
sleep1- вкл сна/ 0-выкл снаINA226 Настройки. Установка / снятие режима сна датчика INA226
MQgas (8)
ФункцияПараметрыОписание
calibrateКалибровка с параметрами по умолчанию
calibrateR0Ro in clean airКалибровка с установкой номинального сопротивления сенсора на чистом воздухе
calibrateRlRoRl/Ro in clean airКалибровка с установкой соотношения сопротивления делителя напряжения к номинальному на чистом воздухе.
calibratePPMPPM in clean airКалибровка с установкой значения концентрации газа в чистом воздухе
setAutoCalibration0 — Выкл. 1 — Вкл.Включение/Выключение автокалибровки
runAutoCalibrationПринудительная автоматическая калибровка (с обнулением максимального сопротивления сенсора и перезапуском счетчика автокалибровки)
lastCalibrationВозврат время последней калибровки
TempHumCorrectionTemperature, HumidityПередача значений темературы и влажности для расчета поправки
ModbusRTU (8)
ФункцияПараметрыОписание
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)
ФункцияПараметрыОписание
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)
ФункцияПараметрыОписание
sendBitStrСтрока 000000000001010100010001Отправляем строку вида 000000000001010100010001
sendTriStateСтрока 00000FFF0F0Fотправляем строку вида 00000FFF0F0F
sendDecimalКод в виде числа, Количество бит чтоб заполнить нулямиотправляем строку вида 5393
RTC (4)
ФункцияПараметрыОписание
getTimeФормат как у функции date() в PHPПолучить строковое значение времени по указанному формату.
setTimeсек, мин, час, день, мес, годУстановить время через сценарии в формате сек, мин, час, день, мес, год.
setUnixTimertc.setUnixTime('46489234') — параметр в виде строкиУстановить время через сценарий в формате юникстайм
getTimeFloats — Вернуть секунды, i — Вернуть минуты, H — Вернуть часы в 24-часовом формате, d — Вернуть день месяца, w — Вернуть день недели, m — Вернуть месяц, Y — Вернуть год(4 знака)Получить числовое значение времени по указанному формату
UART (4)
ФункцияПараметрыОписание
printlnСтрока текстаОтправить в UART строку текста и признак завершения строки (перевод строки).
printСтрока текстаОтправить в UART строку текста.
printHexHEX-строка.Отправить в UART HEX-строку.
printFFFСтрока текста, 1 — обернуть строку в кавычки, 0 — отправить без кавычекОтправить в UART текстовую строку и hex метку 3 байта 0xFF0xFF0xFF.

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

Cron (2)
ФункцияПараметрыОписание
stopПоставить процесс на паузу, при этом не будет событий.
continueПродолжить выполнение с момента остановки.
GoogleSheet (2)
ФункцияПараметрыОписание
logGoogleid Идентификатор 1-го элеменета, id Идентификатор N-го элеменетаИспользовать не чаще раз в минуту! Логирование элементов в GoogleSheet, ID элементов указывать через запятую, от одного до N (проверено на 16шт). В данной фун…
logGoogleAnyНаименование данных, Значение для записиИспользовать не чаще раз в минуту! Запись произвольных данных в GoogleSheet
IoTMath (3)
ФункцияПараметрыОписание
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)
ФункцияПараметрыОписание
pingIP адрес или имя хостаПроверить пинг. после вызова данной функции из сценария результат будет в значении самого модуля. if ping21==1 then ЕСТЬ_пинг else НЕТ_пинга
Timer (5)
ФункцияПараметрыОписание
stopПоставить процесс на паузу, при этом не будет событий и не будет уменьшаться счетчик.
resetВернуть таймер к началу, установленному в countDown.
continueПродолжить выполнение с момента остановки.
intЧисло в секундахМожно изменить шаг тиков.
setInitCountDownЧисло в секундахМеняем начальное значение счетчика, устанавливаемое после сброса.
owmWeather (3)
ФункцияПараметрыОписание
sunriseколичество минут до(-)/после(+) рассветаФункция астрологического таймера, можно задать время до/после рассвета, вернётся количество минут до сработки или после (-). После заката будет возвращать +99…
sunsetколичество минут до(-)/после(+) закатаФункция астрологического таймера, можно задать время до/после заката, вернётся количество минут до сработки или после (-), когда 0 — значит время подошло
nightВернет 1 если ночь (уже закат) и 0 если день (рассвет)

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

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

Поддержал проект — спас молодого самодельщика! А мы принимаем подарки...

X