Хранилище и время

Этим узлам не нужно устройство в зале: они работают с файлами и часами контроллера.

  • Хранилище — write file, read file, watch. Записать данные в файл (например, журнал событий или результат опроса), прочитать файл (например, список контактов или настройки зала), узнать, что файл изменился.

  • Время — timeswitch. Включить и выключить зал по расписанию: по часам или по восходу и закату.

Как открыть окно узла и где найти справку — на странице «Узлы U-Logic».

Хранилище

В поле «Имя файла» укажите имя файла. Для обмена файлами с компьютером используйте SFTP, он описан на странице «Сетевые порты и протоколы».

write file

Записывает msg.payload в файл: дописывает в конец, заменяет содержимое или удаляет файл. После записи отдаёт на выход то же сообщение, которое пришло на вход. Вход: 1, выход: 1.

../../_images/node-write-file.png

Окно узла write file «Записать в файл»: 1 — «Имя файла», 2 — «Действие», 3 — «Добавлять новую строку (\n) к данным?», 4 — «Создать каталог, если он не существует?», 5 — «Кодировка»

Поля окна:

  1. «Имя файла» — имя файла; можно взять из свойства сообщения или выражения.

  2. «Действие» — «добавить в файл» (по умолчанию), «перезаписать файл», «удалить файл».

  3. «Добавлять новую строку (\n) к данным?» — в конце каждой записи добавлять перевод строки; включено по умолчанию.

  4. «Создать каталог, если он не существует?» — создать недостающую папку при записи; выключено по умолчанию.

  5. «Кодировка» — по умолчанию «по умолчанию».

Если имя файла берётся из сообщения, узел закрывает файл после каждой записи, поэтому запись идёт медленнее, чем с постоянным именем. Для двоичных данных выберите «перезаписать файл» и выключите «Добавлять новую строку».

Предупреждение

Действие «удалить файл» необратимо: файл удаляется сразу, без корзины.

read file

Читает файл целиком, по строкам или кусками. Вход: 1, выход: 1; чтение запускается сообщением на входе.

../../_images/node-read-file.png

Окно узла read file «Прочитать файл»: 1 — «Имя файла», 2 — «Выход», 3 — «Кодировка»

Поля окна:

  1. «Имя файла» — как в write file.

  2. «Выход» — «одна ut8-строка» (по умолчанию), «сообщение для каждой строчки», «один объект буфера», «поток буферов».

  3. «Кодировка» — видна только в режимах «одна ut8-строка» и «сообщение для каждой строчки»; по умолчанию «по умолчанию».

В режимах «сообщение для каждой строчки» и «поток буферов» в окне есть ещё флажок include all existing properties in each msg (подпись английская): в каждое выходное сообщение переносятся остальные свойства входного.

На выходе содержимое лежит в msg.payload, а имя файла — в msg.filename. Если сообщений несколько (по строкам), в них есть msg.parts, и join может собрать их обратно (см. «Последовательности и анализаторы»).

Пример: записать и прочитать файл

Нужно убедиться, что данные записались. Цепочка inject → write file → read file → debug:

../../_images/flow-storage-time-write-read.png

Цепочка примера: inject «Записать» → write file «Записать в файл» → read file «Прочитать файл» → debug «Что прочитали»

  1. inject: в payload задайте тип «строка» и значение hello hall.

  2. write file: «Имя файла» — hall-log.txt, «Действие» — «перезаписать файл».

  3. read file: «Имя файла» — hall-log.txt, «Выход» — «одна ut8-строка».

  4. Соедините узлы по порядку. read file запускается сообщением, которое write file отдаёт после записи.

  5. Нажмите «Развернуть» (кнопка U-Logic, которая запускает правки программы в работу), затем кнопку у inject.

Что вы увидите: в отладке msg.payload — hello hall с переводом строки в конце (включено «Добавлять новую строку») и msg.filename — имя файла. Пример оставляет файл на контроллере. Уберите его: выберите в write file действие «удалить файл», нажмите «Развернуть» и ещё раз кнопку у inject.

Частая ошибка: запустили чтение раньше записи — файла ещё нет, и в отладке появится ошибка чтения.

watch

Срабатывает, когда файл или папка изменились. Входов нет, выход: 1.

../../_images/node-watch.png

Окно узла watch «Журнал изменился»: 1 — «Файл(ы)», 2 — «Наблюдать за подкаталогами рекурсивно»

Поля окна:

  1. «Файл(ы)» — что наблюдать: список через запятую; имена с пробелами берите в кавычки; обязательное поле.

  2. «Наблюдать за подкаталогами рекурсивно» — следить и за вложенными папками; выключено по умолчанию.

На выходе: msg.payload и msg.filename — полное имя изменённого файла; msg.file — краткое имя; msg.type — file или directory; msg.size — размер; msg.topic — что наблюдалось.

Файл или папка должны существовать к моменту запуска. Если файл удалили и создали снова, наблюдение за ним может прекратиться.

Время

timeswitch

Включает и выключает по расписанию раз в сутки. Внутри заданного отрезка «On → Off» узел выдаёт msg.payload равным 1, вне его — 0. Входов нет, выход: 1. Кнопка на узле проверяет расписание немедленно.

Подписи в окне этого узла — английские.

../../_images/node-timeswitch.png

Окно узла 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):

  1. «Time On» — когда включить: время с шагом 15 минут (от 00:00 до 23:45) либо Sunrise (восход), Sunset (закат); по умолчанию Sunrise.

  2. «Off» — когда выключить: то же, плюс «Start + 1 min» … «Start + 120 mins» — через столько после включения; по умолчанию 13:00.

  3. «Timezone» — часовой пояс; скрыт, если оба времени заданы по солнцу.

  4. «Sun»…«Sat» — дни недели, в которые расписание работает; по умолчанию включены все.

  5. «Jan»…«Dec» — месяцы, в которые расписание работает; по умолчанию включены все.

  6. «Topic» — необязательно: кладётся в msg.topic.

Остальные поля: «Place Lat», «Lon» — широта и долгота места, показываются, если выбран Sunrise или Sunset; «Offset : Sunrise», «Sunset» — сдвиг от восхода или заката в минутах, допустимы минус и плюс; «Name» — имя узла на холсте.

Если сегодняшний день недели или месяц снят, узел выдаёт 0.

Когда узел посылает сообщение: первое — через две секунды после запуска программы, затем раз в минуту. Под узлом виден статус: «on until ЧЧ:ММ» или «off until ЧЧ:ММ».

Пример: зал включается по расписанию

../../_images/flow-storage-time-timeswitch.png

Цепочка примера: timeswitch «Расписание зала» → filter «Только смена» → switch «Включить или выключить?» → debug «Включить зал» и «Выключить зал»; debug «Что пропустил filter» — под ними

  1. Добавьте timeswitch. В поле «Time On» выберите 08:00, в «Off» — 20:00.

  2. Добавьте узел filter (см. «Функции»), оставьте поля по умолчанию (режим «block unless value changes» — пропускать только изменения значения) и соедините timeswitch → filter. Без него сценарий запускался бы каждую минуту: timeswitch повторяет 1 или 0 не только при смене.

  3. Добавьте switch с двумя правилами: «==» 1 и «==» 0. Соедините filter → switch.

  4. С первого выхода switch начните ветку включения зала (например, запуск сценария «Начало совещания»), со второго — ветку выключения.

  5. Подключите debug к выходу filter и нажмите «Развернуть».

Что вы увидите: сразу после запуска в отладке одно сообщение с payload 1 или 0 — в зависимости от того, внутри отрезка с 08:00 до 20:00 вы находитесь или нет. Дальше новое сообщение приходит только при смене значения: в 08:00 и в 20:00, а не каждую минуту.

Частые ошибки:

  • Сценарий включения запускается каждую минуту, пока зал «должен быть включён»: между timeswitch и switch нет узла filter.

  • Расписание сработало не в то время: проверьте «Timezone».

  • Для Sunrise и Sunset не заданы широта и долгота: они обязательны.

Все поля узлов — во встроенной справке: откройте вкладку «справка» боковой панели (значок книги) и выберите узел.