Хранилище и время
Этим узлам не нужно устройство в зале: они работают с файлами и часами контроллера.
Хранилище —
write file,read file,watch. Записать данные в файл (например, журнал событий или результат опроса), прочитать файл (например, список контактов или настройки зала), узнать, что файл изменился.Время —
timeswitch. Включить и выключить зал по расписанию: по часам или по восходу и закату.
Как открыть окно узла и где найти справку — на странице «Узлы U-Logic».
Хранилище
В поле «Имя файла» укажите имя файла. Для обмена файлами с компьютером используйте SFTP, он описан на странице «Сетевые порты и протоколы».
write file
Записывает msg.payload в файл: дописывает в конец, заменяет содержимое или удаляет файл. После записи отдаёт на выход то же сообщение, которое пришло на вход. Вход: 1, выход: 1.
Окно узла write file «Записать в файл»: 1 — «Имя файла», 2 — «Действие», 3 — «Добавлять новую строку (\n) к данным?», 4 — «Создать каталог, если он не существует?», 5 — «Кодировка»
Поля окна:
«Имя файла» — имя файла; можно взять из свойства сообщения или выражения.
«Действие» — «добавить в файл» (по умолчанию), «перезаписать файл», «удалить файл».
«Добавлять новую строку (\n) к данным?» — в конце каждой записи добавлять перевод строки; включено по умолчанию.
«Создать каталог, если он не существует?» — создать недостающую папку при записи; выключено по умолчанию.
«Кодировка» — по умолчанию «по умолчанию».
Если имя файла берётся из сообщения, узел закрывает файл после каждой записи, поэтому запись идёт медленнее, чем с постоянным именем. Для двоичных данных выберите «перезаписать файл» и выключите «Добавлять новую строку».
Предупреждение
Действие «удалить файл» необратимо: файл удаляется сразу, без корзины.
read file
Читает файл целиком, по строкам или кусками. Вход: 1, выход: 1; чтение запускается сообщением на входе.
Окно узла read file «Прочитать файл»: 1 — «Имя файла», 2 — «Выход», 3 — «Кодировка»
Поля окна:
«Имя файла» — как в
write file.«Выход» — «одна ut8-строка» (по умолчанию), «сообщение для каждой строчки», «один объект буфера», «поток буферов».
«Кодировка» — видна только в режимах «одна ut8-строка» и «сообщение для каждой строчки»; по умолчанию «по умолчанию».
В режимах «сообщение для каждой строчки» и «поток буферов» в окне есть ещё флажок include all existing properties in each msg (подпись английская): в каждое выходное сообщение переносятся остальные свойства входного.
На выходе содержимое лежит в msg.payload, а имя файла — в msg.filename. Если сообщений несколько (по строкам), в них есть msg.parts, и join может собрать их обратно (см. «Последовательности и анализаторы»).
Пример: записать и прочитать файл
Нужно убедиться, что данные записались. Цепочка inject → write file → read file → debug:
Цепочка примера: inject «Записать» → write file «Записать в файл» → read file «Прочитать файл» → debug «Что прочитали»
inject: вpayloadзадайте тип «строка» и значениеhello hall.write file: «Имя файла» —hall-log.txt, «Действие» — «перезаписать файл».read file: «Имя файла» —hall-log.txt, «Выход» — «одна ut8-строка».Соедините узлы по порядку.
read fileзапускается сообщением, котороеwrite fileотдаёт после записи.Нажмите «Развернуть» (кнопка U-Logic, которая запускает правки программы в работу), затем кнопку у
inject.
Что вы увидите: в отладке msg.payload — hello hall с переводом строки в конце (включено «Добавлять новую строку») и msg.filename — имя файла. Пример оставляет файл на контроллере. Уберите его: выберите в write file действие «удалить файл», нажмите «Развернуть» и ещё раз кнопку у inject.
Частая ошибка: запустили чтение раньше записи — файла ещё нет, и в отладке появится ошибка чтения.
watch
Срабатывает, когда файл или папка изменились. Входов нет, выход: 1.
Окно узла watch «Журнал изменился»: 1 — «Файл(ы)», 2 — «Наблюдать за подкаталогами рекурсивно»
Поля окна:
«Файл(ы)» — что наблюдать: список через запятую; имена с пробелами берите в кавычки; обязательное поле.
«Наблюдать за подкаталогами рекурсивно» — следить и за вложенными папками; выключено по умолчанию.
На выходе: msg.payload и msg.filename — полное имя изменённого файла; msg.file — краткое имя; msg.type — file или directory; msg.size — размер; msg.topic — что наблюдалось.
Файл или папка должны существовать к моменту запуска. Если файл удалили и создали снова, наблюдение за ним может прекратиться.
Время
timeswitch
Включает и выключает по расписанию раз в сутки. Внутри заданного отрезка «On → Off» узел выдаёт msg.payload равным 1, вне его — 0. Входов нет, выход: 1. Кнопка на узле проверяет расписание немедленно.
Подписи в окне этого узла — английские.
Окно узла timeswitch «Расписание зала» с значениями примера (не умолчания): 1 — «Time On» (08:00), 2 — «Off» (20:00), 3 — «Timezone» (Europe/Moscow), 4 — «Sun»…«Sat», 5 — «Jan»…«Dec», 6 — «Topic»
Поля окна (на примере расписания с 08:00 до 20:00):
«Time On» — когда включить: время с шагом 15 минут (от
00:00до23:45) либоSunrise(восход),Sunset(закат); по умолчаниюSunrise.«Off» — когда выключить: то же, плюс «Start + 1 min» … «Start + 120 mins» — через столько после включения; по умолчанию
13:00.«Timezone» — часовой пояс; скрыт, если оба времени заданы по солнцу.
«Sun»…«Sat» — дни недели, в которые расписание работает; по умолчанию включены все.
«Jan»…«Dec» — месяцы, в которые расписание работает; по умолчанию включены все.
«Topic» — необязательно: кладётся в
msg.topic.
Остальные поля: «Place Lat», «Lon» — широта и долгота места, показываются, если выбран Sunrise или Sunset; «Offset : Sunrise», «Sunset» — сдвиг от восхода или заката в минутах, допустимы минус и плюс; «Name» — имя узла на холсте.
Если сегодняшний день недели или месяц снят, узел выдаёт 0.
Когда узел посылает сообщение: первое — через две секунды после запуска программы, затем раз в минуту. Под узлом виден статус: «on until ЧЧ:ММ» или «off until ЧЧ:ММ».
Пример: зал включается по расписанию
Цепочка примера: timeswitch «Расписание зала» → filter «Только смена» → switch «Включить или выключить?» → debug «Включить зал» и «Выключить зал»; debug «Что пропустил filter» — под ними
Добавьте
timeswitch. В поле «Time On» выберите08:00, в «Off» —20:00.Добавьте узел
filter(см. «Функции»), оставьте поля по умолчанию (режим «block unless value changes» — пропускать только изменения значения) и соединитеtimeswitch→filter. Без него сценарий запускался бы каждую минуту:timeswitchповторяет1или0не только при смене.Добавьте
switchс двумя правилами: «==»1и «==»0. Соединитеfilter→switch.С первого выхода
switchначните ветку включения зала (например, запуск сценария «Начало совещания»), со второго — ветку выключения.Подключите
debugк выходуfilterи нажмите «Развернуть».
Что вы увидите: сразу после запуска в отладке одно сообщение с payload 1 или 0 — в зависимости от того, внутри отрезка с 08:00 до 20:00 вы находитесь или нет. Дальше новое сообщение приходит только при смене значения: в 08:00 и в 20:00, а не каждую минуту.
Частые ошибки:
Сценарий включения запускается каждую минуту, пока зал «должен быть включён»: между
timeswitchиswitchнет узлаfilter.Расписание сработало не в то время: проверьте «Timezone».
Для
SunriseиSunsetне заданы широта и долгота: они обязательны.
Все поля узлов — во встроенной справке: откройте вкладку «справка» боковой панели (значок книги) и выберите узел.