U-Logic
Примечание
Вся логика, включая логику интерфейса, программируется в U-Logic. Для доступа к U-Logic откройте в браузере страницу <IP Контроллера>:1880.
Начало работы с U-Logic
За связь программы с панелями отвечают узлы UI - Panel in и UI - Panel out. Как добавить и настроить их — раздел «Подготовьте U-Logic» страницы «Первый интерфейс».
В U-Logic по умолчанию есть все необходимые узлы для популярных протоколов и вспомогательные узлы. У каждого узла есть описание и примеры. Если узлов не хватает для связи с оборудованием, в узлах function можно использовать встроенные библиотеки:
ws: require("ws"),
ssh2: require("ssh2"),
http: require("node:http"),
net: require("node:net"),
tls: require("node:tls")
Редактор

Окно редактора U-Logic состоит из четырех компонентов:
Заголовок вверху содержит кнопку развернуть, главное меню, аутентификацию пользователя, меню пользователя.
Палитра узлов слева содержит доступные для использования узлы.
Основное рабочее пространство посередине, где создаются потоки.
Боковая панель справа.
Заголовок редактора
Компонент заголовка редактора U-Logic
Заголовок редактора U-Logic даёт доступ к основным настройкам U-Logic и к профилю пользователя. В нём же кнопка развертывания, которая запускает потоки.

Кнопка развертывания
Справа в заголовке находится красная кнопка развертывания. Она запускает все потоки в экземпляре. Красный цвет значит, что есть изменения, ожидающие развертывания; серый — что таких изменений нет.


Нажмите на значок раскрытия кнопки развертывания и выберите вариант: развернуть все потоки в рабочей области, только потоки с измененными узлами, только измененные узлы или перезапустить развернутые потоки. Затем нажмите кнопку развертывания.

Главное меню
Сразу после профиля пользователя в правом углу находится значок меню. Он открывает список опций.
Опции главного меню:
Edit
Первая опция меню — основные действия по редактированию. При наведении на неё открываются дополнительные опции:

Отменить последнее выполненное изменение: Отменяет последнее действие или серию действий, выполненных в редакторе.
Redo: Повторно применяет действие, которое было ранее отменено с помощью команды «Отменить последнее выполненное изменение».
Вырезать выбранные узлы: Удаляет выбранные узлы из рабочей области и временно сохраняет их в буфере обмена.
Скопировать выбранные узлы: Сохраняет дубликат выбранных узлов в буфере обмена, не удаляя их из исходного потока.
Вставить узлы: Вставляет скопированные или вырезанные узлы из буфера обмена обратно в рабочий процесс.
Copy group style: Сохраняет стиль выбранной группы в буфере обмена.
Paste group style: Применяет сохраненный стиль группы к другой выбранной группе.
Выбрать все узлы: Выбирает все узлы и группы в текущей рабочей области.
Выбрать все соединенные узлы: Выбирает узлы, подключенные к текущим выбранным узлам.
Select none: Отменяет выбор всех выбранных узлов или групп.
split selection with Link nodes: Соединяет выбранные узлы с помощью узлов связи.
Вид
Эта опция управляет тем, какие элементы интерфейса показаны в редакторе U-Logic.

Показывать палитру: Переключает видимость палитры U-Logic
Показывать боковую панель: Включает и выключает видимость боковой панели.
Журнал событий: Открывает журнал, в котором регистрируются события и действия в U-Logic.
Список действий: Открывает список доступных действий или задач в U-Logic для быстрого доступа к часто используемым операциям и функциям.
Отладочные сообщения: Отображает сообщения, сгенерированные узлами отладки.
Редактор драйверов: Открывает на боковой панели редактор драйверов устройств. В нём же кнопки «Скачать проект» и «Загрузить проект» — копия и загрузка всей программы вместе с драйверами (см. «Проекты: загрузить и скачать»).
Arrange
Эта опция упорядочивает выбранные группы потоков в рабочем пространстве U-Logic:

Align to Left: Выравнивает выбранные группы потоков по левому краю рабочей области.
Align to Center: Центрирует выбранные группы потоков по горизонтали в рабочей области.
Align to Right: Выравнивает выбранные группы потоков по правому краю рабочей области.
Align to Top: Выравнивает выбранные группы потоков по верхнему краю рабочей области.
Align to Middle: Центрирует выбранные группы потоков по вертикали в рабочей области.
Align to Bottom: Выравнивает выбранные группы потоков по нижнему краю рабочей области.
Distribute Vertically: Равномерно распределяет выбранные группы потоков по вертикали в рабочей области.
Distribute Horizontally: Равномерно распределяет выбранные группы потоков по горизонтали в рабочей области.
Move Back: Перемещает выбранные группы потоков на один слой назад в порядке наложения.
Move Front: Перемещает выбранные группы потоков на один слой вперед в порядке наложения.
Move Backward: Перемещает выбранные группы потоков на одну позицию назад в порядке наложения.
Move Forward: Перемещает выбранные группы потоков на одну позицию вперед в порядке наложения.
Импорт
Примечание
Чтобы перенести программу на другой контроллер или восстановить её из копии, используйте не flow.json, а архив проекта целиком: в нём вместе с потоками лежат драйверы. Как это сделать и когда всё же нужен flow.json — на странице «Проекты: загрузить и скачать».
Эта опция импортирует файл приложения flow.json. Есть два способа импорта: использовать поле «Буфер обмена» или загрузить файл из локальной системы, нажав «выберите файл для импорта».

Снизу можно выбрать, куда импортировать поток:
текущий поток: Импортирует поток в существующую рабочую область.
новый поток: Создаёт новое рабочее пространство для импортированного потока после нажатия кнопки импорта.
Слева после буфера обмена находятся две опции:
Локальные: Здесь можно просмотреть локальную библиотеку потоков, созданных в том же экземпляре U-Logic. Библиотека доступна только из того же экземпляра, где были созданы потоки.
Примеры: Примеры потоков для всех основных узлов.
Экспорт
Эта опция экспортирует созданный вами поток приложений. Опции две: «Скопировать в буфер обмена» копирует flow.json, «Скачать» загружает файл flow.json.

В верхней части окна выбирают, что экспортировать из потока приложений:

выбранные узлы: Экспортирует только выбранные узлы из потока.
текущий поток: Экспортирует приложение из текущей рабочей области потока.
все потоки: Экспортирует поток из всех потоков в этом экземпляре.
В верхней части вы увидите две вкладки:
Экспортировать узлы: Показывает узлы и потоки, которые вы собираетесь экспортировать.
JSON: Показывает в формате JSON поток, который вы собираетесь экспортировать.

компактно: Записывает JSON-файл потока в одну строку.
форматированно: Форматирует JSON-файл потока, чтобы его было удобнее читать или проверять.
Слева после буфера обмена находится ещё одна опция:

Локальные: Здесь можно создать коллекцию потоков, которые вы создали в текущем экземпляре U-Logic. Чтобы создать новую папку, нажмите на значок с тремя точками в правом верхнем углу и выберите «Новая папка». Внизу есть поле ввода, в котором можно изменить имя файла потока. Нажмите «Экспорт в библиотеку», чтобы сохранить поток в коллекции. После этого коллекция доступна в том же экземпляре.
Поиск в потоках


Эта опция ищет группы потоков, созданные в этом экземпляре U-Logic.
Конфигурационные узлы


Эта опция открывает вкладку «конфиг» боковой панели. На ней можно управлять всеми узлами конфигурации текущего экземпляра U-Logic.
Потоки
Эта опция управляет вкладками потока.
Добавить: добавляет новую вкладку потока.
Edit: Редактирует текущую вкладку потока.
Удалить: удаляет текущую вкладку потока.
Подпотоки

Эта опция создаёт подпоток.
Создать подпоток: создает новую вкладку подпотока.
Выделение в подпоток: преобразует выбранные узлы в подпоток.
Группы

Эта опция управляет группами потоков.
Сгруппировать выделение: группирует выбранные узлы.
Разгруппировать выделение: разгруппирует выбранную группу потоков.
Объединить выделение: объединяет выбранные группы потоков.
Удалить из группы: удаляет выбранные узлы из группы.
Параметры

Вид: настройка параметров редактора и параметров интерфейса.
Язык: выберите язык для редактора U-Logic.
Restore zoom level on load: включение этой опции восстановит уровень масштабирования редактора при загрузке U-Logic.
Restore scroll position on load: включение этой опции восстановит позицию прокрутки редактора при загрузке U-Logic.
Показывать сетку: включите отображение сетки в рабочей области редактора.
Привязывать к сетке: включите привязку узлов к сетке.
Размер сетки: отрегулируйте размер квадратов сетки.
Показать статус узла: переключите, чтобы отобразить статус узлов в редакторе.
Показывать метки у недавно добавленных узлов: переключите, чтобы метки недавно добавленных узлов стали видимыми
Показать советы: переключите, чтобы отобразить подсказки в редакторе.
Show guided tours for new versions: включите пошаговые руководства для новых версий U-Logic.
Клавиши: настройте сочетания клавиш для навигации и работы в U-Logic.
Сочетание клавиш
Эта опция открывает интерфейс, где можно настроить сочетания клавиш для навигации и работы в экземпляре U-Logic.
Вебсайт UVATRON
Эта опция открывает официальный сайт UVATRON.
v4.0.9
Эта опция показывает на вкладке «Change Log» боковой панели журнал изменений текущей версии U-Logic: что изменено или исправлено по сравнению с предыдущими версиями.
Палитра узлов редактора
Палитра узлов — левая боковая панель со всеми доступными узлами.
Панель поиска

Строкой фильтра в верхней части палитры можно быстро находить узлы по названию.
Категории узлов

Палитра узлов разделена на несколько категорий, в каждой — коллекция узлов. Подпотоки собраны в разделе «Подпотоки».
Чтобы свернуть или развернуть категорию, нажмите на неё.
Свернуть все категории

Внизу палитры два значка со стрелками. Нажмите на левый значок со стрелкой вверх, чтобы свернуть все категории.
Развернуть все категории
Нажмите на значок со стрелкой вниз, чтобы развернуть все категории обратно в состояние по умолчанию.
Показать/скрыть палитру

Эта кнопка скрывает боковую панель палитры. Чтобы показать её снова, нажмите на кнопку ещё раз.
Рабочее пространство редактора
Рабочая область (пространство) — основная область редактора. В ней вы создаёте потоки приложений, перетаскивая узлы из палитры.

Инструменты просмотра

В правом нижнем углу рабочего пространства находятся инструменты просмотра: кнопки увеличения (Ctrl++) и уменьшения (Ctrl+-) для управления видом рабочего пространства и сброса уровня масштабирования до значения по умолчанию.

Там же есть навигатор представлений. Он показывает уменьшенное изображение всего рабочего пространства и текущую видимую область рабочего пространства в редакторе. Чтобы перейти к определенной области рабочего пространства, щелкните эту область в навигаторе представлений.
Search flows


В левом нижнем углу рабочей области находится значок поиска. Он открывает всплывающее окно, в котором можно быстро искать потоки в вашем экземпляре U-Logic по их имени. Это окно открывается и нажатием Ctrl + F.
Поток
Поток — это вкладка в рабочей области редактора. Она даёт новое рабочее пространство, в котором приложения создают, соединяя узлы. Потоком также неформально называют один набор соединённых узлов. Поэтому поток (вкладка) может содержать несколько потоков (наборов соединенных узлов), но формально поток — родительская группа нескольких соединенных узлов. У потока может быть имя и описание, они отображаются на информационной боковой панели.
Добавление потока

Чтобы создать родительский поток, нажмите на значок «+» в правом верхнем углу или воспользуйтесь опцией добавления потока в главном меню, в разделе «Потоки»
Редактирование свойств потока

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

Чтобы удалить поток, дважды щелкните по нему. В появившемся всплывающем окне нажмите кнопку «Удалить» в верхнем левом углу.

Либо щелкните правой кнопкой мыши вкладку потока и выберите в меню пункт «Удалить».
Включение и выключение потоков

Чтобы включить или отключить поток, дважды щелкните на вкладке потока. Нажмите кнопку «Отключено» в нижнем левом углу или кнопку «Включено», если он уже отключен.

Либо щелкните правой кнопкой мыши по вкладке потока и выберите в меню «Disable flow/Enable flow». Отключенные потоки не выполняются при развертывании.
Переупорядочение потоков
Чтобы переупорядочить потоки, перетащите вкладку потока в нужную позицию. Дополнительные параметры меню вкладки потока откроются, если щелкнуть значок раскрывающейся стрелки в правом верхнем углу.
Подпоток

Подпоток в U-Logic — это набор узлов, свернутых в один узел в рабочей области. В подпоток группируют набор узлов, чтобы использовать его повторно. Так проще организовывать потоки и упрощать сложные конструкции: несколько узлов собраны в один узел более высокого уровня.
Примечание
Подпоток не может содержать экземпляр самого себя — ни напрямую, ни косвенно.
Создание подпотока

Чтобы создать подпоток, в разделе «Подпотоки» выберите «Создать подпоток» в главном меню.

Будет создано окно подпотока, похожее на вкладку потока.
Редактирование подпотока

Чтобы открыть диалоговое окно редактирования подпотока, дважды щелкните по узлу подпотока, затем щелкните «Изменить шаблон подпотока». Вы можете дать имя для этого подпотока, добавить описание, щелкнув в правом верхнем углу

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

Также можно узнать и изменить метаданные в разделе «Module Properties»
На вкладке «Свойства» диалогового окна редактирования можно определить набор свойств, которые затем можно настроить для каждого экземпляра подпотока.
Каждую запись в таблице свойств можно расширить, чтобы настроить, как она отображается при редактировании экземпляра подпотока. На вкладке «Предпросмотр редактора» видно, как они будут выглядеть.

Удаление подпотока

Чтобы удалить подпоток и все его экземпляры, нажмите кнопку «удалить подпоток» в верхней части вкладки подпотока.
Преобразование узлов в подпоток

Чтобы создать подпоток из узлов на рабочем пространстве, выберите их: нажмите левую клавишу мыши и нарисуйте вокруг них прямоугольник. Затем нажмите на Подпотоки -> Выделение в подпоток в главном меню.
Примечание
Это возможно только в том случае, если все провода, входящие в выборку, подключены к одному узлу, поскольку результирующий узел подпотока может иметь не более одного входа.
Входы и выходы

Входы и выходы подпотока изображены серыми квадратными узлами. В рабочем пространстве подпотока их можно соединять, как обычные узлы. На верхней панели инструментов можно добавлять и удалять эти узлы. Как и узлы обычного потока, каждый подпоток может иметь максимум один вход, но может вмещать несколько выходов.
Узел статуса

Узел status обновляет статус подпотока. Его можно редактировать, как обычные узлы потока. Узел использует входные данные msg.payload, которые могут быть либо простой строкой, либо объектом status.
Узлы

Узел — основной блок для создания потоков. Каждый узел — отдельная часть функциональности или определенное действие, которое можно выполнить в потоке.

У узла может быть один входной и несколько выходных портов, соединенных проводами. Провода определяют поток данных внутри потоков. И входные, и выходные узлы могут подключаться к нескольким проводам.

У некоторых узлов есть кнопки слева или справа. Например, у узла inject кнопка слева, а у узла debug — справа. Функция кнопок зависит от узла.
Некоторые узлы также показывают свой статус выполнения значками в верхней части.


Все узлы в U-Logic обозначают ошибки красным треугольником, неразвернутые изменения — синим кружком.
Добавление узлов в рабочее пространство
Добавить узлы в рабочую область можно тремя способами:
Перетаскивание из палитры
Перетащите узлы из палитры узлов U-Logic на рабочую область.
Использование диалогового окна быстрого добавления
Узлы можно быстро добавлять с помощью палитры:

Нажмите
Ctrl/⌘и щелкните по рабочей области.Выберите нужный узел в диалоговом окне: в нём все доступные узлы из палитры узлов.
Используйте строку поиска для быстрого поиска узлов.
Рисуя провод от одного узла, оставьте его на рабочем пространстве, чтобы подключить к узлу, который будет добавлен через то же диалоговое окно быстрого добавления.
Импорт из библиотеки или буфера обмена
Узлы также можно добавить, импортировав их из локальной библиотеки или через буфер обмена (главное меню -> импорт).
Редактирование свойств узла

Чтобы настроить свойства узла, дважды щелкните по нему или выберите узел и нажмите Enter. Появится всплывающая форма для настройки узла. Параметры конфигурации зависят от типа узла.

Вторая из трех опций в правом верхнем углу открывает вкладку «Описание». На ней пишут описание в формате Markdown, оно отображается на боковой панели информации.

Третий параметр открывает вкладку для изменения внешнего вида узла, например значков, имен входных и выходных портов и видимости меток.
Включение и отключение узлов

Чтобы включить или отключить узлы, дважды щелкните по узлу и нажмите нижнюю кнопку «Включено» или кнопку «Отключено», если они уже включены.
Доступ к справочной информации узла

Чтобы открыть справку об узле, дважды щелкните по узлу и щелкните нижний левый значок «Показать справку». Информация об этом узле отображается на информационной боковой панели.
Конфигурационные узлы
Узлы конфигурации в U-Logic хранят конфигурации, общие для нескольких узлов в потоке.
Узлы конфигурации можно добавить в диалоговом окне редактирования узлов, требующих настройки:

Нажмите на значок «+» рядом со значком карандаша и полем с текстом.
Введите необходимую информацию в диалоговом окне редактирования и нажмите «Добавить».
Узлы конфигурации не видны в рабочей области, как другие узлы. Ими можно управлять на вкладке узлов конфигурации на боковой панели.

Чтобы узнать, сколько узлов используют определенную конфигурацию, проверьте информацию в нижнем колонтитуле диалогового окна редактирования узла конфигурации.
Как и общие узлы, узлы конфигурации можно отключать и включать таким же образом.
Провода

«Провода» — это соединения, которые связывают узлы вместе и определяют поток данных. Они показывают направление и поток информации от одного узла к другому в потоке U-Logic.
Соединение узлов вместе
Чтобы соединить узлы с помощью проводов, щелкните левой кнопкой мыши на выходном порту узла и перетащите провод к входному порту назначения. Есть и другой способ: нажмите Ctrl/⌘ и левую клавишу мыши на входном или выходном порту. Тогда для перетаскивания провода не нужно удерживать ни левую клавишу мыши, ни другую кнопку. Чтобы подключить провод к порту назначения, нажмите левую клавишу мыши на порту назначения. Если после подключения клавиша Ctrl/⌘ остаётся нажатой, а у узла этого порта есть выходной порт, будет перетащен новый провод.
Провод соединяет выходной порт со входным; два входных или два выходных порта соединить нельзя.
Удаление проводов
Чтобы удалить провода, щелкните левой кнопкой мыши, чтобы выбрать первый провод. Чтобы выбрать несколько проводов, нажмите и удерживайте клавишу Ctrl/⌘, щелкая каждый провод левой кнопкой мыши. Если использовать только левую кнопку мыши, можно выбрать лишь один провод за раз. После выбора проводов нажмите клавишу delete или backspace, чтобы удалить их.
Движущиеся провода
Чтобы отключить провод от порта, выберите провод, щелкнув по нему. Затем нажмите и удерживайте клавишу Shift , пока левая клавиша мыши нажата на порту. При перетаскивании мыши провод отключается от порта, и его можно подключить к другому порту.
Если к порту подключено несколько проводов и при нажатии кнопки с удерживаемой клавишей Shift ни один из них не выбран, будут перемещаться все провода.
Резка проводов
Провода также можно удалить, разрезав их: удерживайте клавишу Alt/Option, а затем нарисуйте линию разрезания, удерживая левую кнопку мыши.
Отсоединение узлов
Сохранение провода при удалении узла
Для этого нажмите и удерживайте клавишу Ctrl/⌘, выберите узел, щелкнув левой клавишей мыши, а затем нажмите клавишу delete или backspace.
Отсоединение узла от проводов
Чтобы использовать эту опцию, необходимо задать сочетание клавиш для действия «Detach Selected Nodes»
Группы

Узлы в редакторе можно объединять в группы, чтобы упорядочить поток.
Создание группы потоков

Чтобы создать группу потоков, выберите узлы (удерживая клавишу Ctrl или рисуя вокруг них прямоугольник). Перейдите Группы -> Сгруппировать выделение в главном меню или нажмите Ctrl + Shift + G.
Редактирование свойств группы

Группа потока может иметь имя, цвет фона и метку границы, видимую в рабочей области. По умолчанию она имеет серую границу без фона или имени.
Чтобы задать стиль и имя группы, дважды щелкните по ней. Введите имя, выберите цвета контура и фона в свойстве заливки, настройте положение и цвет метки, затем щелкните «Готово» в правом верхнем углу.
Добавление описания

Чтобы добавить описание в группу, дважды щелкните по ней. Выберите третий вариант в правом верхнем углу всплывающего окна под кнопкой «Готово». Введите описание в формате Markdown.
Добавление узлов в группу
Чтобы добавить узлы в существующую группу, перетащите их в группу. Это можно делать по одному узлу за раз. Группы так же можно вкладывать друг в друга.
Удаление узлов из группы
Чтобы удалить узлы из группы, выберите узлы и перейдите Группы -> Удалить из группы в главном меню. Аналогично удалите группу из другой группы. Или щелкните по узлу, удерживайте клавишу Alt и перетащите его за пределы группы.
Объединение групп

Чтобы объединить несколько групп в одну, выберите группы. Перейдите в главное меню и выберите раздел Группы -> Объединить выделение.
Разгруппировка выбранных узлов

Чтобы разгруппировать узлы из группы, выберите узлы. Перейдите в главное меню, в раздел Группы -> Разгруппировать выделение.
Выбор
Как выбрать узлы и провода на рабочем пространстве:
Узел можно выбрать или отменить выбор, щелкнув по нему. Чтобы выбрать несколько узлов, нажмите клавишу Ctrl/⌘ и выберите нужные узлы. Чтобы выбрать все узлы в рабочей области, нажмите Ctrl+A.
Инструмент «Лассо»

В U-Logic есть инструмент лассо для более быстрого выбора. Чтобы использовать лассо, нажмите левую клавишу мыши и перетащите курсор: так можно выбрать несколько узлов, нарисовав вокруг них прямоугольник.
Выбор подключенных узлов
Чтобы выбрать все подключенные к определенному узлу узлы, нажмите Shift и щелкните по середине этого узла.
Выбор всех вышестоящих узлов
Чтобы выбрать все подключенные узлы, которые находятся перед этим узлом, нажмите Shift и, удерживая ее, щелкните левую часть этого узла.
Выбор всех нижестоящих узлов
Чтобы выбрать все подключенные узлы, которые находятся после этого узла, нажмите Shift и, удерживая ее, щелкните правую часть этого узла.
Выбор потоков

Чтобы выбрать вкладки потока, нажмите клавишу Ctrl/⌘ и, удерживая ее, щелкните на вкладке потока, которую вы хотите выбрать. Выбранные потоки можно удалить, экспортировать или скопировать все вместе.
Боковая панель редактора
Боковая панель находится справа в редакторе U-Logic. В ней собраны инструменты, например управление узлами, конфигурация, хранилище контекста и другие.

Вкладки, доступные на боковой панели, называются панелями.
Панели по умолчанию
Боковая панель U-Logic поставляется со следующими панелями по умолчанию:
Панель «Информация»
Информационная панель показывает в древовидной структуре все потоки и их узлы, подпотоки и их узлы, а также узлы глобальной конфигурации.
Если навести курсор на любой элемент в этой древовидной структуре, появится несколько опций, например: Вызвать действие (для активации узлов, если у наведенного узла есть кнопка), Включить/Отключить (для отключения и включения наведенного узла), Show/Hide (для скрытия и отображения наведенного элемента в рабочей области), Lock/Unlock (для блокировки и разблокировки наведенного элемента), Найти в рабочей области (для быстрого поиска наведенного элемента в рабочей области). Эти опции представлены различными значками.
Поиск в потоках
В верхней части панели «инфо» есть строка поиска потоков, подпотоков и узлов на информационной панели.
Там же есть фильтр: он отбирает эти элементы по разным параметрам, например
Узлы конфигурации
Неиспользуемые узлы конфигурации
Modified nodes and flows
Недействительные узлы
Неизвестные узлы
Неиспользуемые подпотоки
Hidden flows
Current flow
Свойства элемента
Если щелкнуть элемент в древовидной структуре информационной панели, на второй вкладке панели «инфо» вы увидите идентификатор потока, если выбранный элемент — поток, а также идентификатор узла и тип, если это узел.
Значение узла можно копировать с помощью опции копирования справа от значения
Чтобы увидеть дополнительную информацию обо всех свойствах узла, нажмите кнопку «Показать больше».
В верхней части три опции. Первая — «Показать справку»: она открывает панель справки, где виден файл readme, предоставленный автором для выбранного элемента. Вторая копирует URL-адрес выбранного элемента: его можно использовать, когда нужно указать или обсудить определенный элемент в рабочей области с членом вашей команды. Третья находит этот элемент в рабочей области.
Панель «Справка»
Здесь можно просматривать readme файл. Панель немного похожа на информационную панель и разделена на две вкладки.
Первая вкладка — древовидная структура с двумя основными темами: «U-Logic» и «Справка по узлам». U-Logic включает Change Log и «Что нового?».
На второй вкладке отображаются файлы readme выбранного узла.
Скрытие тем
Чтобы скрыть/показать первую вкладку панели справки, нажмите на верхнюю левую кнопку «Hide topics».
Просмотр документации Node на вкладке «Справка»
Чтобы просмотреть файлы readme на панели справки для узлов, щелкните один раз по узлам в рабочей области или щелкните элемент узла в древовидной структуре раздела «Справка по узлам».
Панель «Отладочные сообщения»
Панель отладки показывает сообщения, выводимые узлом debug. Она помогает отлаживать ваше приложение.
Каждое сообщение на панели отладки включает дату и время, имя узла, который его напечатал, имя свойства, его тип данных и значение.
Фильтрация отладочных сообщений
В верхней части панели отладки есть фильтр с тремя параметрами, с ним можно отображать только те сообщения, которые вам нужны:
все узлы: показывает сообщения, распечатанные всеми узлами.
выбранные узлы: позволяет выбрать конкретные узлы отладки, сообщения которых вы хотите видеть на панели отладки.
текущий поток: показывает только сообщения, напечатанные узлами, которые находятся в текущем потоке.
Примечание
Боковая панель «отладка» может отображать только 100 последних сообщений. Если боковая панель в данный момент отображает отфильтрованный список сообщений, скрытые сообщения все равно учитываются в пределе 100.
Очистка сообщений
Чтобы очистить сообщения, нажмите на кнопку «Очистить журнал» в правом верхнем углу. Или нажмите на ctrl+alt+l.
Открытие отдельного окна
Чтобы открыть панель отладки в отдельном окне, щелкните по правой нижней кнопке «Открыть в новом окне» со значком компьютера. Панель отладки откроется в новом окне браузера, где можно просматривать сообщения отладки и управлять ими.
Панель «узлы конфигураций»
Панель узлов конфигурации показывает список всех узлов конфигурации, добавленных к текущему экземпляру U-Logic. Все узлы конфигурации организованы по их области действия, например, по всем потокам, по определенному потоку и подпотоку.
Каждый узел конфигурации на панели узлов конфигурации отображает тип и метку этого узла, а также количество текущих узлов, использующих эту конфигурацию.
Чтобы открыть диалоговое окно редактирования узлов конфигурации, дважды щелкните по узлам конфигурации на панели.
Для доступа к этой панели узлов конфигурации нажмите Ctrl/⌘+g +c.
Фильтрация узлов конфигурации
Узлы на панели конфигурации можно фильтровать: все или только неиспользуемые.
Панель «Контекстные данные»
Эта панель отображает переменные контекста по их области действия. Каждая переменная включает такие данные, как дата и время, ее хранилище, а также имя и значение. Чтобы получить доступ к этой панели, нажмите ctrl/⌘+g+x.
Обновление переменных контекста
Чтобы обновить контекстные переменные, нажмите кнопку обновления в правом верхнем углу каждой вкладки области действия. Чтобы обновить определенную переменную, наведите на нее курсор и нажмите кнопку обновления, которая появится справа от нее.
Удаление контекстных переменных
Чтобы удалить контекстную переменную, наведите указатель мыши на переменную, которую вы хотите удалить, и нажмите кнопку удаления, которая появится справа от нее.
Копирование свойств и значений
Чтобы скопировать имя этой переменной, наведите на нее курсор и нажмите первую кнопку, которая появится справа.
Чтобы скопировать значение этой переменной, наведите на нее курсор и нажмите вторую кнопку, которая появится справа.
Сокрытие боковой панели
Чтобы скрыть боковую панель, нажмите на кнопку «Показать/скрыть боковую панель». Чтобы снова отобразить ее, нажмите на кнопку переключения еще раз. Можно также нажать сочетание клавиш ctrl/⌘+space.
Изменение размера боковой панели
Чтобы изменить размер боковой панели, наведите указатель мыши на границу боковой панели, пока курсор не изменится. Затем нажмите левую кнопку мыши и удерживайте ее во время изменения размера.
Работа с сообщениями
Понимание сообщений U-Logic
Рабочие процессы IoT, автоматизации и обработки данных в U-Logic строятся на передаче сообщений между узлами. Каждое сообщение содержит данные, которые узлы изменяют, обрабатывают или анализируют, поэтому нужно понимать структуру и обработку сообщений. Неправильное управление сообщениями может привести к скрытым ошибкам: перезаписи данных, бесконечным циклам или сбоям. Чтобы избежать ошибок и создавать надежные потоки, нужно знать, как работать с сообщениями.
Здесь описаны внутренняя работа сообщений U-Logic, распространенные ошибки и лучшие практики для потока данных без ошибок.
Что такое сообщения U-Logic?
В U-Logic сообщения — это пакеты данных, которые перемещаются между узлами в вашем потоке. U-Logic работает на основе событий: эмиттер событий инициирует события, а слушатель реагирует на них. Узлы в U-Logic выступают и как источники событий, и как слушатели, а события передаются через сообщения. Сообщения несут информацию, которую узлы читают, изменяют и на которую реагируют. Каждый узел обрабатывает сообщения и передает их следующему узлу в последовательности.
Сообщения передают данные, которые управляют вашими рабочими процессами: показания датчиков, ввод пользователя или ответы от API. Сообщения U-Logic — это объекты JavaScript, простые структуры для управления и передачи данных в ваших потоках.
Понимание объектов JavaScript
JavaScript объект — это структура данных для хранения нескольких значений в одной переменной. Он состоит из пар ключ-значение: каждый ключ (или свойство) связан с определенным значением. Так можно группировать связанные данные и получать к ним доступ.
Например:
{
name: "Bob",
age: 24,
married: true
}
В этом примере name, age и married — свойства объекта. Так же сообщения U-Logic используют эту структуру для организации и передачи данных в ваших потоках.
Анатомия сообщений U-Logic
В U-Logic сообщения по умолчанию именуются как msg, и узлы рассчитаны на это соглашение об именовании.
Сообщения U-Logic состоят из нескольких ключевых свойств, необходимых для обработки данных и связи между узлами:
msg._msgid: Уникальный идентификатор сообщения, который U-Logic назначает автоматически. Он помогает отслеживать и отлаживать сообщения в потоке.msg.payload: Основные данные сообщения: информация, которую обрабатывают узлы и на основе которой они действуют, например показания датчиков или пользовательский ввод.msg.topic: Необязательное свойство для категоризации или идентификации сообщения. Помогает маршрутизировать или фильтровать сообщения на основе их контекста. Это наиболее распространенные свойства в U-Logic. При необходимости можно добавлять дополнительные свойства.
Свойство _msgid всегда присутствует, даже если вы отправляете пустой объект с одного узла на другой. Это свойство автоматически добавляется U-Logic для отслеживания сообщений в потоке. Свойства payload и topic есть не в каждом сообщении: они появляются, если их добавляет узел. Большинство узлов в U-Logic используют свойство payload как стандарт для коммуникации.
Типы данных в сообщениях U-Logic
В сообщениях U-Logic встречаются разные типы данных. Сообщения всегда являются объектами JavaScript, поэтому само сообщение должно быть объектом, иначе U-Logic выдаст ошибку.
Но null можно отправить как сообщение. Так часто делают, когда не нужно отправлять данные дальше по потоку: null фактически останавливает распространение сообщения на последующие узлы.
Значениями свойств сообщений могут быть любые типы данных, поддерживаемые JavaScript, такие как строка, число, массив, логическое значение, объект, буфер и другие сложные типы данных.

Как клонировать сообщения или свойства сообщений
Клонирование в U-Logic — это создание копии сообщения или его свойств, чтобы работать с копией независимо от оригинала. Клон нужен, когда надо изменить данные, не затрагивая исходное сообщение, или отправить измененную версию сообщения в разные части потока.
Использование узла change
Узел change в U-Logic изменяет и клонирует свойства сообщений. Весь msg объект сразу клонировать нельзя: копируйте его свойства по одному. Узел change клонирует свойства только в другое свойство msg или в свойство контекста потока/глобального контекста.
Как использовать узел change для обработки свойств сообщения:
Дважды щелкните узел change , чтобы открыть диалоговое окно его конфигурации.
Вы увидите интерфейс с существующим элементом, добавленным по умолчанию.
С левой стороны поля вы увидите такие опции, как «Установить» , «Изменить» , «Удалить» и «Переместить» . Ими можно выполнять соответствующие операции над сообщением.
Чтобы клонировать свойство
msg.payloadвflow.data, выберите действие «Установить» . В первом поле «to the value» введитеpayload, выберите flow и введите данные. Для клонированияmsgсвойств в новыеmsgсвойства выберитеmsgво втором поле и укажите новое имя свойства.
Подробнее об узле change и о других действиях, таких как Удалить , Переместить и Изменить , — в разделе по узлу change.
Использование узла function
В узле функции сообщения или определенные свойства можно клонировать с помощью JavaScript. Например:
// Клонировать все сообщение
var newMsg = RED.util.cloneMessage(msg);
// Изменить клон при необходимости, изменение клона не повлияет на оригинал
newMsg.payload = "Измененные данные";
// Вернуть оригинал
return msg;
Примечание
Прямое назначение, например, let newMsg = msg; не создает настоящего клона. Вместо этого оно создает новую ссылку на тот же объект. Это означает, что изменения в newMsg также повлияют на msg, поскольку оба ссылаются на одни и те же данные.
// Присвоить ссылку на оригинальное сообщение
var newMsg = msg;
// Изменение newMsg повлияет на оригинальное сообщение
newMsg.payload = "Измененные данные";
// Вернуть оригинал
return msg;
Чтобы клонировать только определенные свойства сообщения, скопируйте нужные свойства вручную:
// Клонировать определенные свойства сообщения
var newMsg = {};
newMsg.payload = msg.payload; // Копировать payload
newMsg.topic = msg.topic; // Копировать topic
// Вернуть новое сообщение с клонированными свойствами
return newMsg;
Добавление новых свойств к сообщениям
Сообщения U-Logic, как упоминалось ранее, являются объектами JavaScript, поэтому их легко настраивать. К сообщению можно добавить столько свойств, сколько необходимо, и переносить через поток дополнительные данные. Так нижестоящим узлам можно передать больше информации, например метаданные, теги или дополнительные детали конфигурации.
Чтобы добавить новые свойства к сообщению, можно использовать узел change или узел function.
Узел change добавляет новые свойства к msg объекту без написания кода. Как это сделать:
Перетащите узел change в свой поток и дважды щелкните по нему, чтобы открыть конфигурацию.
Выберите действие «Установить» в раскрывающемся меню слева.
В поле справа введите новое название свойства (например,
msg.customData).В поле «to the value» введите значение, которое вы хотите присвоить этому свойству. Это может быть строка, число, логическое значение или даже выражение.
Для большего контроля новые свойства можно добавлять в узле function с помощью JavaScript.
// Добавить новое пользовательское свойство к сообщению
msg.customData = {
description: "Это описание",
timestamp: new Date().toISOString()
};
// Вернуть обновленное сообщение
return msg;
Обработка JSON сообщений
В U-Logic с JSON работают часто, особенно с API и данными IoT. JSON (JavaScript Object Notation) — это облегченный формат обмена данными. U-Logic упрощает отправку и получение объектов JSON.
В U-Logic встречаются две формы JSON:
JSON Объект: это простой структурированный объект JavaScript, которым можно манипулировать в U-Logic. Можно получить доступ к его свойствам, изменить его значения и передать его через разные узлы в вашем потоке.
JSON Строка: строка JSON — сериализованная версия объекта JSON, которую обычно используют при передаче данных между системами. В отличие от обычного объекта, строкой JSON нельзя манипулировать напрямую так же, как объектом JavaScript.
Преобразование JSON строки в JSON объект
Чтобы обработать строку JSON как обычный объект JavaScript, сначала нужно преобразовать ее в объект JSON. Для этого в U-Logic есть узел json. Он анализирует строку и преобразует ее в объект, чтобы ее можно было обрабатывать как любые другие структурированные данные в потоке.
Шаги:
Перетащите узел json на холст U-Logic.
Дважды щелкните узел json, чтобы настроить его.
Установите действие «Всегда преобразовывать в объект JavaScript» и нажмите «Готово».
Подключите вход узла json к выходу узла, отправляющего строку JSON.
Подключите выход узла json ко входу следующего узла в вашем потоке, которому требуется обработанный объект JSON.
После этих шагов узел json преобразует входящую строку JSON в пригодный для использования объект JavaScript в потоке U-Logic.
Распространенные ошибки, которых следует избегать при работе с сообщениями U-Logic
Чтобы потоки работали бесперебойно и ожидаемо, избегайте при работе с сообщениями в U-Logic следующих распространенных ошибок:
Добавление свойств к необъектному свойству: Попытка добавить свойства к свойству, не являющемуся объектом (например, строке или числу), может привести к ошибкам или неожиданному поведению. Всегда проверяйте, работаете ли вы с объектами при добавлении свойств.
Неправильный пример:
msg.payload = 'stringValue';
msg.payload.newProperty = 'value'; // Ошибка: 'stringValue' не является объектом
return msg;
Правильный пример:
msg.payload = {}; // Инициализация как объект
msg.payload.newProperty = 'value'; // Теперь безопасно добавлять свойства
return msg;
Эта ошибка часто возникает в узле change, где узел inject отправляет данные msg.payload как string или number (например, «hello world»), а узел change пытается добавить свойство, msg.payload как если бы это был объект.

Примечание
Неправильно: добавление свойства к типу, не являющемуся объектом (например, строке)
Правильный подход:

Примечание
Правильно: Инициализируйте свойство как объект перед добавлением свойств.
Перезапись объекта сообщения (
msg): Некоторые пользователи ошибочно перезаписывают весьmsgобъект, а не изменяют определенные свойства. Это может привести к потере важного контекста или свойств.
Пример неправильной перезаписи:
msg = { newProperty: 'value' }; // Перезаписывается весь объект msg
return msg;
Вместо этого измените определенные свойства:
msg.newProperty = 'value';
return msg;
Возврат неправильного типа данных: потоки U-Logic ожидают, что сообщения будут переданы как объекты. Возврат неправильного типа данных, например строки или числа, прерывает поток и выдает ошибку.
Забывание вернуть сообщение: в узлах function, если вы измените сообщение, но забудете вернуть его, поток остановится на этом узле.
Программирование
Концепции программирования U-Logic
If-Else: документация If-Else объясняет, как реализовать условную логику в U-Logic: как использовать узлы function и switch для создания динамических потоков, основанных на решениях.
Преобразование данных: документация по преобразованию данных описывает фильтрацию, отображение, сортировку и сокращение данных в U-Logic. Она объясняет, как преобразовывать данные в ваших потоках, на практических примерах по отображению массивов и обработке данных.
Циклы: документация по циклам объясняет, как реализовать повторяющиеся операции в U-Logic: как использовать узлы for и while для создания циклов, в которых можно обрабатывать массивы данных или выполнять задачи многократно.
Преобразование данных
U-Logic — это визуальная платформа программирования с подходом low-code, которую широко используют для разработки приложений IoT. В приложениях IoT важна обработка данных, а фильтрация, отображение, сортировка и сокращение нужны, чтобы упростить преобразования данных. Но многие пользователи с трудом реализуют эти операции в подходе low-code и часто берут функциональные узлы, которые могут вносить ненужную сложность. Здесь показано, как фильтровать, отображать, сортировать и сокращать данные в U-Logic, придерживаясь подхода low-code.
Что такое Low-Code
Low-code — это подход к разработке программного обеспечения, при котором приложения и процессы создают с минимальным кодированием или совсем без него. Вместо сложных языков программирования используются визуальные интерфейсы с базовой логикой и перетаскиванием.
Зачем вам нужно научиться фильтровать, сопоставлять, сортировать и сокращать данные?
Фильтрация, отображение, сортировка и сокращение преобразуют, извлекают, организуют и агрегируют данные, поэтому из наборов данных проще извлекать информацию и анализировать её. Например, у вас есть массив данных датчиков, извлеченных из базы данных. Данные выглядят примерно так:
[
{
"timestamp": "2024-06-17T10:00:00Z",
"temperature": 298.15
},
{
"timestamp": "2024-06-17T11:00:00Z",
"temperature": 299.15
},
{
"timestamp": "2024-06-17T10:30:00Z",
"temperature": 300.15
},
{
"timestamp": "2024-06-17T10:15:00Z",
"temperature": 301.15
},
{
"timestamp": "2024-06-17T10:45:00Z",
"temperature": 303.15
},
{
"timestamp": "2024-06-18T09:00:00Z",
"temperature": 297.15
},
{
"timestamp": "2024-06-18T10:00:00Z",
"temperature": 300.15
},
{
"timestamp": "2024-06-18T11:00:00Z",
"temperature": 301.15
},
{
"timestamp": "2024-06-18T12:00:00Z",
"temperature": 302.15
},
{
"timestamp": "2024-06-19T10:00:00Z",
"temperature": 298.15
},
{
"timestamp": "2024-06-19T11:00:00Z",
"temperature": 299.15
}
]
Но вы заметили, что данные о температуре указаны в градусах Кельвина, а вам нужны градусы Цельсия. Данные не упорядочены по временной метке, и вам нужны только данные за 17 июня. Ещё вы хотите рассчитать среднюю температуру за этот день. Пользователи, не знакомые с основами U-Logic, могут сделать это узлом function, как показано ниже:

Узлы function — не ошибка, но они усложняют ваши приложения. Не все в команде могут быть знакомы с JavaScript, поэтому круг людей, которые могут решать бизнес-задачи, может сузиться. Чтобы сохранить простоту потока приложений, эти операции нужно выполнять с малым количеством кода.
Ниже показано, как выполнить эти операции с минимальным кодированием.
Сопоставление
Сопоставлением часто называют применение функции к каждому элементу списка, массива или другой коллекции, чтобы получить новую коллекцию преобразованных элементов. Здесь нужно преобразовать данные о температуре каждого объекта из градусов Кельвина в градусы Цельсия. Для отображения используются узлы split, change и join.
Перетащите узел split на холст. Узел split разделит сообщение на последовательность сообщений, чтобы можно было работать с каждым сообщением. Кроме того, узел «Разделить» привяжет метаданные к каждому разделенному объекту. Эти метаданные помогут узлу join объединить всю последовательность сообщений обратно в массив.
Перетащите узел change на холст и задайте его
msg.payload.temperatureкакpayload.temperature - 273.15выражение JSONata.

Теперь перетащите узел join на холст и установите «Режим» на «автоматический». Узел автоматически объединит все сообщения, исходящие из узла split, в массив.

Фильтрация
Фильтрация — это выбор определенных элементов из массива, чтобы создать новый массив. В U-Logic фильтрацию выполняют с помощью сопоставления и узла switch, который маршрутизирует по условиям.
Перетащите узел switch и поместите его после узла change и перед узлом join.
Установите условие для проверки того,
msg.payload.timestampвключает ли сообщение «2024-06-17». Благодаря этому условию дальше отправляются только сообщения, содержащие указанную дату в своей временной метке.Далее в узле коммутации отметьте опцию «воссоздать последовательность сообщений»: она восстановит
msg.partsметаданные, добавленные узлом split, если узел коммутации потеряет какие-либо сообщения.


Сортировка
Сортировка — это упорядочивание элементов в определенном порядке. Порядок может быть возрастающим (от наименьшего к наибольшему), убывающим (от наибольшего к наименьшему) или основанным на любом определенном критерии. В U-Logic можно сортировать числа, алфавиты, массивы, строки и многое другое. Для сортировки используйте узел sort U-Logic.
Перетащите узел sort на холст.
Установите ключ в
timestampкачестве выражения JSONata, а затем установите порядок «восходящий. Ключом устанавливается метка времени, потому что данные нужно сортировать по метке времени. Чтобы сортировать по температуре, можно установить ключом температуру.


Сокращение
Сокращение — это объединение элементов структуры данных (например, массива) в одно значение. Для этого перебирают элементы структуры данных и многократно применяют функцию объединения, пока все элементы не будут обработаны.
Перетащите еще один узел split на холст.
Перетащите еще один узел join на холст.
Выберите режим «агрегация последовательности», установите «Агрегирующее выражение» на
$A+ payload.temperature, «начальное значение» на0и «Исправляющее выражение» на$A/$N

В этой конфигурации узел join настроен на режим сокращения последовательности. Начальное значение аккумулятора ($A) инициализируется до 0. По мере обработки каждого сообщения текущая температура (payload.temperature) добавляется к $A. После обработки всех сообщений накопленная сумма $A делится на общее количество сообщений ($N) для вычисления средней температуры.

If-Else
Человек часто принимает решения по серии выборов «если это, то то»: что надеть в зависимости от погоды или какой маршрут на работу короче в зависимости от трафика. Такая же логика нужна системам, особенно построенным на U-Logic. Как люди принимают решения на основе различных факторов, так и системы должны оценивать условия и выбирать соответствующий курс действий.
В автоматизированных решениях в U-Logic нужно воспроизводить процесс принятия решений, похожий на человеческий. С логикой If-Else система может по-разному вести себя в разных сценариях, подстраивая поведение под получаемые входные данные. Ниже показано, как встроить логику If-Else в потоки U-Logic, чтобы система принимала решения с учетом контекста — так же, как это делаете вы.
Понимание логики If-Else
Концепция логики If-Else возникла из потребности компьютеров принимать решения. С развитием языков программирования понадобилось управлять компьютером, выбирая разные действия по разным условиям. Так появились условные операторы, которые позволяют программам выбирать разные пути в зависимости от определенных критериев.
Что за логика If-Else?
Логика If-Else — это способ принятия решений программами. Работает так:
Если определенное условие выполняется (например, «Температура выше 30°C?»), то выполнить набор действий (например, «Включить кондиционер»).
Иначе (если условие не выполняется) выполнить другой набор действий (например, «Выключить кондиционер»).
Так системы могут адекватно реагировать на разные ситуации.
Реализация условных потоков в U-Logic: Практическое руководство
С логикой If-Else в U-Logic можно создавать потоки, которые реагируют на разные входные данные и условия. Условная логика нужна, когда вы автоматизируете умный дом, управляете устройствами IoT или разрабатываете сложные рабочие процессы.
Логику If-Else в U-Logic можно реализовать узлом switch: он соответствует подходу Low-Code. Другой способ — узел function: он даёт больше гибкости и контроля при написании пользовательской логики JavaScript.
Использование узла switch
Узел switch в U-Logic маршрутизирует сообщения по определенным условиям. Это простой подход к условной логике в ваших потоках с малым количеством кода. Правила в узле switch устанавливают в визуальном интерфейсе, поэтому он подходит тем, кто предпочитает более интуитивный метод обработки условий. Узел switch — это другая, независимая концепция, известная как «оператор switch». Он служит той же цели, что и логика If-Else (создаёт условные потоки), но работает по собственной парадигме программирования.
Для демонстрации узла switch настройте поток, который принимает решения по значению температуры: сообщения направляются через разные выходы по пороговым значениям температуры.
Перетащите узел inject на холст и задайте его
msg.payloadкак$random() * 100выражение JSONata; этот узел внедрения будет имитировать датчик температуры, генерируя случайное число.Перетащите узел switch на холст. Дважды щелкните по нему и установите «Свойство» на msg.payload.
Чтобы добавить правила, нажмите кнопку «+» Добавить в левом нижнем углу панели конфигурации. Вам будет предложено выбрать условие и ввести значение для сравнения. Добавьте следующие четыре правила и установите их для «проверка всех правил»:
Правило 1:
msg.payload > 30Правило 2:
msg.payload <= 30Правило 3:
msg.payload <= 20Правило 4:
msg.payload <= 10
Теперь перетащите другой узел switch и соедините его вход с выходом узлов switch 2 и 3. Второй узел switch нужен для маршрутизации сообщений по диапазонам. Один узел switch не допускает множественных проверок в одном правиле, поэтому для маршрутизации температуры по диапазонам нужен другой узел switch. Добавьте следующие правила и установите для них значение «остановка после первого совпадения»:
Правило 1:
msg.payload > 20Правило 2:
msg.payload > 10
Теперь перетащите узлы debug и подключите их к выходам узлов switch в соответствии с нашим примером. Для сообщений больше 30 подключите узел debug к первому выходу первого узла switch. Для диапазона от 30 до 20 подключите узел debug к первому выходу второго узла Switch. Для диапазона от 20 до 10 подключите узел Debug ко второму выходу второго узла switch. Наконец, для сообщений меньше 10 подключите узел debug к четвертому выходу первого узла switch.
Разверните поток, нажав кнопку «Развернуть» в правом верхнем углу редактора U-Logic.
После развертывания нажмите кнопку на узле inject, чтобы запустить его. Узлы debug покажут маршрутизированные сообщения на основе значения температуры.
Сообщения направляются через разные выходы в зависимости от значения температуры. Чтобы обновить полезную нагрузку сообщения в зависимости от условия, используйте узел change или узел function.

Поток U-Logic с использованием узла switch для маршрутизации сообщений на основе пороговых значений температуры.

Использование узла function
В узле function можно реализовать более сложную логику, написав JavaScript код. Он подходит, когда нужно больше контроля или проверить несколько значений вместе.
Пример с температурой: нужно определить, следует ли включать или выключать кондиционер в зависимости от температуры:
Перетащите узел inject на холст и задайте его
msg.payloadкак выражение JSONata$random() * 100; этот узел внедрения будет имитировать датчик температуры, генерируя случайное число.Перетащите узел function на холст, дважды щелкните по нему и вставьте в него следующий код:
let Temperature = msg.payload;
if (Temperature > 30) {
msg.payload = "Turn on the air conditioner"; // Включить кондиционер
} else {
msg.payload = "No action required"; // Никаких действий не требуется
}
return msg;
Как работает этот код и как в нём используется msg.payload:
В U-Logic msg.payload используется для передачи данных по потоку. Первоначально он содержит значение температуры, введенное узлом inject. Затем узел function обрабатывает это значение логикой If-Else. Если температура превышает 30°C, msg.payload устанавливается в «Turn on the air conditioner»: кондиционер следует включить. Если температура составляет 30°C или ниже, msg.payload устанавливается в «No action required»: кондиционер следует оставить выключенным. Обновленный msg.payload передается следующему узлу, и система реагирует соответствующим образом на входные данные температуры.
Далее перетащите узел debug на холст и подключите его к выходу узла function. Так вы увидите результаты вашей условной логики в окне отладки U-Logic.
Разверните поток, нажав кнопку «Развернуть» в правом верхнем углу редактора U-Logic.
После развертывания нажмите кнопку на узле inject, чтобы запустить его. Вы должны увидеть вывод узла function в окне отладки, который покажет «Turn on the air conditioner» или «No action required» в зависимости от температуры.

Поток U-Logic с использованием узла function для реализации простой логики If-Else для контроля температуры.
Обработка нескольких потоков с помощью узла function
Простой односторонний поток с логикой If-Else в узле function был рассмотрен ранее. Но что, если нужно направлять сообщения по разным путям на основе различных условий и оценивать несколько значений в узле function? В таких случаях в узле function в U-Logic можно написать полный код JavaScript и принимать более сложные решения. Узел функции также можно настроить на несколько выходных портов, чтобы направлять сообщения в разные пункты назначения на основе различных условий.
Обновите пример для обработки нескольких значений. В этом сценарии в процесс принятия решений включены и температура, и влажность. Несколько выходных портов в узле function маршрутизируют сообщения на основе различных условий.
Перетащите на холст еще один узел inject, установите значение
msg.payload.temperatureкак$random() * 100в качестве выражения JSONata иmsg.payload.humidityв$random() * 100.Перетащите другой узел function на холст, дважды щелкните по нему, перейдите на вкладку «Setup» и увеличьте количество выходных портов в соответствии с количеством условий, которые вы будете обрабатывать. Для нашего примера увеличьте количество выходов до 4 и нажмите Готово.
let Temperature = msg.payload.temperature;
let Humidity = msg.payload.humidity;
// Инициализация выходного массива
let outputs = [null, null, null, null];
if (Temperature > 30 && Humidity < 40) {
// Высокая температура и низкая влажность
outputs[0] = { payload: "Высокая температура и низкая влажность: Включите кондиционер и используйте увлажнитель" };
} else if (Temperature > 30 && Humidity >= 40) {
// Высокая температура и высокая влажность
outputs[1] = { payload: "Высокая температура и высокая влажность: Включите кондиционер" };
} else if (Temperature < 15 && Humidity < 40) {
// Низкая температура и низкая влажность
outputs[2] = { payload: "Низкая температура и низкая влажность: Включите обогреватель и используйте увлажнитель" };
} else if (Temperature < 15 && Humidity >= 40) {
// Низкая температура и высокая влажность
outputs[3] = { payload: "Низкая температура и высокая влажность: Включите обогреватель" };
}
return outputs;
Теперь у узла function четыре выхода, каждый из которых соответствует последовательности условий, которые вы написали. Например, сообщение для первого условия появится на первом выходе узла function, сообщение для второго условия появится на втором выходе и т. д.
Узел Function инициализирует массив со значениями null, чтобы учесть все выходы. Когда выполняется определенное условие, соответствующий индекс в этом массиве обновляется нужным сообщением. Например, если температура высокая, а влажность низкая, сообщение устанавливается в outputs[0], то есть на первый выход. Если ни одно условие не выполняется, выход остается null: для этого выхода ничего не отправляется, и сообщения получают только соответствующие выходы.
Далее перетащите четыре узла debug на холст. Подключите каждый узел debug к одному из выходов узла function. Так на панели Debug видны сообщения, проходящие через каждый выход.
Разверните поток, нажав кнопку «Развернуть» в правом верхнем углу редактора U-Logic.
После развертывания нажмите кнопку на узле inject, чтобы активировать его.

Поток U-Logic использует узел function с несколькими выходами для обработки различных условий, таких как температура и влажность.

Выбор между узлом function и узлом switch
Выбирая между узлом function и узлом switch в U-Logic, учитывайте сложность логики и характер нужной маршрутизации сообщений.
Узел function подходит для сценариев, где нужна сложная логика и подробная обработка сообщений. В нём можно писать пользовательский код JavaScript, который может обрабатывать сложные условия и выполнять вычисления. Узел полезен, когда нужно принимать сложные решения на основе нескольких значений или подробно обновлять объект msg. Например, если поток требует объединения данных из разных источников, применения сложных правил или изменения нескольких свойств msg.payload, для этих задач подходит узел function.
Узел switch, напротив, предназначен для более простой маршрутизации на основе значений. Он подходит для простых сценариев, где нужно маршрутизировать сообщения на основе одного значения с несколькими возможными выходами. В нём правила создают на основе определенных значений или условий, без сложной логики и обширных изменений сообщений. Если логика маршрутизации включает базовые сравнения и не требует расширенной обработки или вычислений, узел switch даёт более простой и понятный подход.
Циклы
Повторяющиеся задачи — распространенная проблема в автоматизации и обработке данных: например, когда нужно итерировать по большим наборам данных, выполнять вычисления или многократно выполнять операции на основе условий. Циклы могут значительно повысить эффективность и масштабируемость.
Здесь описано, как реализовать разные типы циклов, которые нужны в разных контекстах, где их применять, и приведены примеры для внедрения в U-Logic.
Что такое цикл?
Цикл — это программная конструкция, которая выполняет блок кода повторно, пока не будет выполнено определенное условие. Разные типы циклов подходят для разных сценариев, в зависимости от того, как и когда должен повторяться код:
For Loop: выполняет блок кода определенное количество раз. Он полезен, когда заранее известно, сколько раз нужно выполнить итерацию, например по диапазону чисел или элементов в списке. Его также называют циклом с фиксированным числом.
While Loop: Повторяет блок кода, пока заданное условие истинно. Этот тип цикла полезен, когда заранее неизвестно, сколько раз цикл должен выполниться. Цикл выполняется, пока условие не станет ложным.
For…of / ForEach Loop: эти циклы перебирают итерируемые объекты, такие как массивы или коллекции. С ними можно получить доступ к каждому элементу в коллекции. Цикл for…of предназначен именно для итерируемых объектов, а forEach — метод массивов, который применяет функцию к каждому элементу.
Тип цикла выбирают в зависимости от требований поставленной задачи.
Реализация циклов в U-Logic
Здесь описано, как реализовать циклы в U-Logic. Сначала — как получить цикличность с помощью основных узлов. Затем — некоторые основные операции, обычно выполняемые с помощью циклов, на практических примерах для улучшения потоков U-Logic.
Реализация циклов в U-Logic с использованием основных узлов
Цикл While
Чтобы продемонстрировать цикл while в U-Logic, создайте поток, который добавляет случайные символы в строку, пока она не будет содержать символ «Z». Так видно, как имитировать цикл while с помощью основных узлов U-Logic.
Перетащите узел inject на холст. Этот узел запустит начало цикла.
Добавьте узел change для инициализации строковой переменной. Настройте его
msg.iна пустую строку (""). Подключите узел inject к этому узлу change .Поместите узел switch на холст. Настройте его на проверку,
msg.iсодержит ли он символ «Z» (msg.i.includes('Z')). Добавьте дополнительное правило для случаев, когда это условие не выполняется (иначе). Подключите выход узла change к входу узла switch.Добавьте узел function для добавления случайной заглавной буквы к строке. Используйте следующий код JavaScript:
msg.i += String.fromCharCode(65 + Math.floor(Math.random() * 26)); // Добавляем случайную заглавную букву
return msg;
Подключите этот узел function ко второму выходу узла switch (где условие msg.i не содержит «Z»). Затем подключите выход этого узла function обратно ко входу узла switch , чтобы повторить процесс.
5. Перетащите узел debug на холст и подключите его ко второму выходу узла switch . Этот узел будет отображать текущее значение msg.i на панели отладки.
6. Добавьте еще один узел change для сигнализации о завершении. Настройте его msg.payload на completed. Подключите этот узел change к первому выходу узла switch (где msg.i содержится «Z»), а затем свяжите его с другим узлом debug для отображения сообщения о завершении.


Цикл For
В традиционном программировании циклы for повторяются заданное количество раз на основе индекса или диапазона, при этом while циклы выполняются до тех пор, пока выполняется условие true.
В U-Logic циклы for можно имитировать, управляя счетчиком с узлами для итерации по элементам массива. Увеличивая индексную переменную, можно получить доступ к каждому элементу и выполнять операции, имитируя поведение традиционного цикла for.
Как настроить цикл for в U-Logic:
Перетащите узел inject на холст и установите
msg.payloadкак["foo","bar","foobar"]. Этот узел запускает начало цикла и даёт массив для обработки.Добавьте узел change для инициализации счетчика цикла. Настройте его, установив
msg.iравной0, подключите узел inject к этому узлу change.Далее перетащите узел switch на холст. Настройте его для проверки того, равен ли
msg.iдлине массива (msg.i == msg.payload.length). Добавьте дополнительное правило для случаев, когда это условие не выполняется (иначе). Соедините узел change с узлом switch .Добавьте еще один узел change для увеличения счетчика. Настройте его на JSONata выражение, присваивающее
msg.iзначениеi + 1. Подключите этот узел change к выходу узла switch , где условие (msg.i < msg.payload.length) истинно (второй выход).Для доступа к элементам массива и их отображения перетащите узел change на холст. Настройте его так, чтобы
msg.payloadбыл установлен на msg.payload[msg.i], получая доступ к элементу массива по текущему индексу. Подключите этот узел change ко второму выходу узла switch (otherwise).Присоедините узел debug к выходу этого узла change, чтобы вывести текущий элемент массива.
Для последнего шага добавьте еще один узел change , чтобы сигнализировать о завершении цикла. Настройте его на установку
msg.payloadкакcompletedи подключите к первому выходу узла switch, где условие цикла —msg.i == msg.payload.length. Наконец, присоедините узел debug , чтобы отобразить сообщение о завершении.
Этот поток будет проходить по массиву, печатая каждый элемент, пока все элементы не будут обработаны. Как только цикл достигает конца массива, он печатает сообщение «completed» и завершается.


Цикл For…of / ForEach
В традиционном программировании циклы for...of и forEach обычно используются для итерации по массивам или свойствам объектов, чтобы обрабатывать отдельные элементы. В U-Logic этих конструкций нет, поэтому их функциональность можно повторить комбинацией узлов, в частности узлов split и join.
Как воспроизвести эту функциональность в U-Logic:
Перетащите узел inject на холст и установите значение
msg.payloadкак["foo", "bar", "foobar"].Перетащите узел split на холст. Сохраните настройки по умолчанию. Если вы работаете со строкой, выберите подходящий разделитель.
При необходимости используйте узел change или function для выполнения операций над каждым элементом.
Перетащите узел debug на холст и подключите его к выходу узла split .
При нажатии кнопки узла inject, узел split будет обрабатывать каждый элемент массива по отдельности, а узел debug отобразит каждый из них в окне отладки.
Чтобы узнать, как можно сопоставлять, сортировать, фильтровать и сокращать объем данных с помощью этого подхода, ознакомьтесь с разделом: «Как фильтровать, сопоставлять, сортировать и сокращать объем данных» в U-Logic в разделе «Начало работы с U-Logic/Программирование/Преобразование данных»


Реализация циклов с помощью function узла
Циклы с узлом function реализовать просто, если вы знакомы с JavaScript: в нём можно писать пользовательский код. Но частая проблема — как отправлять сообщение на каждой итерации, не завершая цикл после первой итерации. Здесь показано, как правильно реализовать циклы узлом function: каждая итерация обрабатывается и отправляется должным образом, цикл не прерывается преждевременно.
Для демонстрации реализуйте цикл for.
Перетащите узел inject на холст и установите значение для
msg.payloadкак[1, "hello", "%", true].Перетащите узел function на холст и добавьте следующий код JavaScript:
for (let i = 0; i < msg.payload.length; i++) {
// Создать новое сообщение для каждого элемента
let newMsg = { ...msg }; // Копировать оригинальный объект msg
newMsg.payload = msg.payload[i]; // Установить payload на текущий элемент
node.send(newMsg); // Отправить сообщение
}
Перетащите узел debug на холст и подключите его к выходу узла function.
Когда вы развертываете поток и нажимаете кнопку inject, каждый элемент массива будет отправлен как отдельное сообщение и выведен на панель отладки. Это работает, поскольку node.send() метод позволяет отправлять сообщения асинхронно. В отличие от return, который немедленно завершает выполнение узла function, node.send() продолжает обрабатывать и отправлять каждое сообщение, не останавливая цикл.
При использовании node.send() внутри цикла каждая итерация создает отдельное сообщение, а узел function может обрабатывать несколько сообщений. Подробнее — в Документации по отправке сообщений асинхронно.

Терминология
Ниже — основные термины и понятия U-Logic, чтобы общение между проектами было ясным и последовательным.
Поток
Поток — это вкладка в рабочей области редактора. Она даёт новую рабочую область для создания приложений: в ней соединяют узлы. Термин «поток» также неформально используют для одного набора соединенных узлов. Поэтому поток (вкладка) может содержать несколько потоков (наборов соединенных узлов), но формально поток — это родительская группа нескольких соединенных узлов.

Подпоток
Подпоток в U-Logic — это набор узлов, свернутых в один узел в рабочей области. В подпоток группируют набор узлов, чтобы использовать его повторно. Так проще организовывать потоки и упрощать сложные конструкции: несколько узлов собраны в один узел более высокого уровня.


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

Узел
Узел — это основной строительный блок для создания потоков. Каждый узел — отдельная часть функциональности или определенное действие, которое можно выполнить в потоке.

Провода
«Провода» — это соединения, которые связывают узлы вместе и определяют поток данных. Они показывают направление и поток информации от одного узла к другому в потоке U-Logic.

Порты входа и выхода
У узлов в U-Logic есть порты входа и выхода — маленькие кружки на левой (вход) и правой (выход) сторонах узла. Порты показывают, где данные входят в узел или выходят из него. Через порты разные узлы соединяют проводами.

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

Payload
Основное свойство в сообщении. С ним по умолчанию работает большинство узлов. Оно содержит основные данные, которые узлы в потоке обрабатывают и которыми манипулируют.
Контекст
Контекст — это механизм хранения, который позволяет узлам хранить данные между вызовами. Через него узлы могут совместно использовать данные в пределах одного экземпляра или потока, в разных потоках в U-Logic. Подробнее: Понимание переменных Node, Flow, Global в U-Logic.
Узел function
В узле function в U-Logic можно писать пользовательские функции JavaScript для обработки и управления сообщениями в ваших потоках.
Палитра узлов
Палитра — это боковая панель со всеми узлами.

Редактор
Редактор в U-Logic — это графический интерфейс, в котором вы создаете и управляете потоками. Он включает все компоненты: рабочее пространство, палитру для узлов, вкладки для организации потоков и боковую панель для настройки и развертывания.
Экземпляр
Экземпляр в U-Logic — это работающая среда выполнения U-Logic, которая управляет потоками и взаимодействиями узлов.
Развертывание потока
Развертывание потока в U-Logic — это активация изменений потока в среде выполнения. Это делается нажатием кнопки «Развернуть» в редакторе: узлы активируются для обработки данных или выполнения задач, определенных в потоке.

Импорт, экспорт, группировка потоков
Потоки можно импортировать, экспортировать и группировать в U-Logic: так можно делиться своими потоками с другими или импортировать потоки, созданные другими. Потоки экспортируются в формате JSON и обычно называются flow.json. Группировка потоков позволяет организовать связанные потоки вместе для лучшего управления и обмена.
Горячие клавиши U-Logic
Горячие клавиши ускоряют навигацию, редактирование и управление потоками в U-Logic. Список горячих клавиш U-Logic:
Общие горячие клавиши
Основное сочетание |
Альтернативное сочетание |
Описание |
|---|---|---|
Ctrl + E |
⌘ + E |
Открыть диалог экспорта |
Ctrl + I |
⌘ + I |
Открыть диалог импорта |
Ctrl + Z |
⌘ + Z |
Отменить последнее действие |
Ctrl + Y |
⌘ + Y |
Повторить последнее отмененное действие |
Ctrl + D |
⌘ + D |
Развернуть поток |
Ctrl + Space |
⌘ + Space |
Открыть/Закрыть боковую панель |
Ctrl + P |
⌘ + P |
Открыть/Закрыть палитру узлов |
Ctrl + Shift + P |
⌘ + Shift + P |
Показать список действий |
Ctrl + Shift + L |
⌘ + Shift + L |
Показать журнал событий |
Alt + Shift + P |
⌥ + Shift + P |
Открыть управление палитрой |
Shift + ? |
⇧ + ? |
Открыть настройки горячих клавиш |
Ctrl + Alt + R |
⌘ + ⌥ + R |
Показать обзор изменений |
Ctrl + G, затем C |
⌘ + G, затем C |
Открыть панель «конфиг» в боковой панели |
Ctrl + G, затем I |
⌘ + G, затем I |
Открыть панель «инфо» в боковой панели |
Ctrl + G, затем H |
⌘ + G, затем H |
Открыть панель «справка» в боковой панели |
Ctrl + G, затем D |
⌘ + G, затем D |
Открыть панель «отладка» в боковой панели |
Ctrl + Alt + L |
⌘ + ⌥ + L |
Очистить панель отладки |
Ctrl + Enter |
⌘ + Enter |
Подтвердить редактирование |
Ctrl + Escape |
⌘ + Escape |
Отменить редактирование |
Рабочее пространство
Основное сочетание |
Альтернативное сочетание |
Описание |
|---|---|---|
Ctrl + «+» |
⌘ + + |
Увеличить масштаб |
Ctrl + «-» |
⌘ + - |
Уменьшить масштаб |
Ctrl + 0 |
⌘ + 0 |
Сбросить масштаб до 100% |
Ctrl + , |
⌘ + , |
Настроить вид в параметрах пользователя |
Shift + ↑ |
⇧ + ↑ |
Переместить вид вверх на 10 ячеек сетки |
Shift + ↓ |
⇧ + ↓ |
Переместить вид вниз на 10 ячеек сетки |
Shift + ← |
⇧ + ← |
Переместить вид влево на 10 ячеек сетки |
Shift + → |
⇧ + → |
Переместить вид вправо на 10 ячеек сетки |
Ctrl + ↑ |
⌘ + ↑ |
Прокрутить рабочую область вверх |
Ctrl + ↓ |
⌘ + ↓ |
Прокрутить рабочую область вниз |
Ctrl + ← |
⌘ + ← |
Прокрутить рабочую область влево |
Ctrl + → |
⌘ + → |
Прокрутить рабочую область вправо |
Вкладка потока
Основное сочетание |
Альтернативное сочетание |
Описание |
|---|---|---|
Alt + W |
⌥ + W |
Скрыть текущий поток |
Alt + Shift + W |
⌥ + ⇧ + W |
Показать/повторно открыть последний скрытый поток |
Ctrl + Shift + F |
⌘ + ⇧ + F |
Показать список потоков для переключения |
Ctrl + [ |
⌘ + [ |
Открыть предыдущую вкладку потока |
Ctrl + ] |
⌘ + ] |
Открыть следующую вкладку потока |
Ctrl + Shift + → |
⌘ + Shift + → |
Перейти к следующему положению |
Ctrl + Shift + ← |
⌘ + Shift + ← |
Перейти к предыдущему положению |
Группа
Основное сочетание |
Альтернативное сочетание |
Описание |
|---|---|---|
Ctrl + Shift + C |
⌘ + Shift + C |
Копировать стиль выбранной группы |
Ctrl + Shift + V |
⌘ + Shift + V |
Вставить/применить скопированный стиль группы |
Ctrl + Shift + G |
⌘ + Shift + G |
Добавить выбранные группы или узлы в новую группу |
Ctrl + Shift + U |
⌘ + Shift + U |
Разгруппировать группы или узлы |
Узел
Основное сочетание |
Альтернативное сочетание |
Описание |
|---|---|---|
Ctrl + Delete |
⌘ + Delete |
Удалить выбранный узел и переподключить провода |
Enter |
⏎ |
Открыть диалог свойств узла |
Ctrl + F |
⌘ + F |
Поиск узлов в потоке |
Провод
Основное сочетание |
Альтернативное сочетание |
Описание |
|---|---|---|
Alt + L, затем L |
⌥ + L, затем L |
Разделить провод узлом связи |
Выделение
Основное сочетание |
Альтернативное сочетание |
Описание |
|---|---|---|
Ctrl + C |
⌘ + C |
Копировать выделенное |
Ctrl + X |
⌘ + X |
Вырезать выделенное |
Ctrl + V |
⌘ + V |
Вставить скопированное/вырезанное |
Delete |
⌫ |
Удалить выделенное |
Ctrl + A |
⌘ + A |
Выбрать все узлы |
Escape |
⎋ |
Снять выделение |
Пользовательские горячие клавиши
Горячие клавиши в U-Logic можно настроить под ваш рабочий процесс.
Как настроить пользовательские горячие клавиши:
Перейдите в раздел «Клавиши» в параметрах пользователя или нажмите
Shift + ?В Настройках клавиатуры показаны действия с назначенными горячими клавишами и действия без них. Чтобы изменить или назначить горячие клавиши, нажмите на «Не назначено» или существующую горячую клавишу рядом с действием, которое вы хотите изменить.
Введите предпочитаемую комбинацию клавиш для действия. Затем выберите соответствующую область действия и нажмите значок галочки, чтобы сохранить изменения. Ваши новые горячие клавиши теперь активны.
Узлы
Описание всех узлов палитры U-Logic — какие они бывают, для чего нужны и какие поля настраиваются — собрано в разделе «Узлы U-Logic».