Сеть
Сетевые узлы связывают программу зала с остальным миром. Ими можно опросить устройство по HTTP, TCP или UDP, принять запрос от внешней системы, отправить значение на сервер, проверить, что устройство в сети, разбудить компьютер или отправить письмо.
Как открыть окно узла и где найти справку — на странице «Узлы U-Logic». Подписи полей даны так, как они показаны в окне узла. Часть подписей (например, у ping, wake on lan, snmp, email) английская, они не переводятся. Адреса, порты и протоколы узлов задаются в программе; порты, которые нужно согласовать с сетевым администратором, перечислены на странице «Сетевые порты и протоколы».
Узлы TCP Test, UDP Test, HTTP Test, SSH Test и Telnet Test в палитре стоят рядом с сетевыми, но это инструменты для проверки драйверов: они описаны в разделе «Тестовые узлы» страницы «Узлы Dynamic Driver».
HTTP
HTTP нужен в двух случаях: контроллер сам спрашивает у устройства или сервера (http request) либо отвечает внешней системе (http in + http response).
http in
Принимает запрос от внешней системы и запускает цепочку узлов. Вход: 0, выход: 1. Ответ внешней системе отправляет http response.
Окно узла http in «Запрос статуса»: 1 — «Метод», 2 — «URL», 3 — «Имя»
Поля окна:
«Метод» — GET, POST, PUT, DELETE или PATCH.
«URL» — адрес, по которому узел принимает запрос, например
/hall-status.«Имя» — подпись узла на холсте.
Поле «Принимать загрузки файлов?» (разрешить отправлять файлы вместе с запросом) появляется в окне не при каждом методе: при GET, как на снимке, его нет.
На выходе: тело запроса — в msg.payload; подробности запроса (метод, адрес, заголовки, параметры) — в msg.req. Служебное свойство msg.res связывает ответ с запросом, поэтому его нельзя терять по дороге (подробности — у http response).
Примечание
Узел http in отвечает по адресу контроллера на порту U-Logic (http://<адрес контроллера>:1880/<URL из окна узла>, в режиме HTTPS — https://, см. «Сетевые порты и протоколы»). Какие системы обращаются к этим адресам, согласуйте с сетевым администратором.
http response
Отправляет ответ системе, чей запрос принял http in. Вход: 1, выход: 0.
Окно узла http response «Ответ»: 1 — «Код состояния», 2 — «Заголовки», 3 — «Имя»
Поля окна:
«Код состояния» — код ответа; если пусто, берётся из
msg.statusCode, а если и там нет — 200.«Заголовки» — дополнительные заголовки ответа.
«Имя» — подпись узла на холсте; на связь с
http inне влияет.
Тело ответа берётся из msg.payload. Сообщение, которое приходит на http response, должно быть тем, что вышло из http in (можно после change, switch и других узлов, но не новое от inject): без msg.res отвечать некому.
Пример: контроллер отвечает на запрос
Внешней системе нужно узнать, что программа зала работает. Цепочка http in → change → http response:
http in: «Метод» — GET, «URL» —/hall-status.change: правило «Установить»msg.payloadв строкуhall ok. Как устроенchange, описано на странице «Функции».http response: поля оставьте по умолчанию — код будет 200.Соедините узлы по порядку и нажмите «Развернуть».
Цепочка примера: http in «Запрос статуса» → change «Ответ: hall ok» → http response «Ответ»
Что вы увидите: запрос на http://<адрес контроллера>:1880/hall-status вернёт текст hall ok.
Частая ошибка: вместо change поставили inject или другой узел, который создаёт новое сообщение, — оно не несёт msg.res, и система остаётся без ответа.
http request
Отправляет запрос на внешний адрес и кладёт ответ в msg.payload. Вход: 1, выход: 1.
Окно узла http request «Запрос состояния»: 1 — «Метод», 2 — «URL», 3 — «Включить безопасное (SSL/TLS) соединение», 4 — «Использовать аутентификацию», 5 — «Возврат»
Поля окна:
«Метод» — GET, POST, PUT, DELETE, HEAD или «- устанавливается через msg.method -».
«URL» — адрес запроса.
«Включить безопасное (SSL/TLS) соединение» — обмен по HTTPS.
«Использовать аутентификацию» — basic, digest или bearer; логин и пароль или токен вводятся здесь же.
«Возврат» — в каком виде получить ответ: «строка UTF-8», «двоичный буфер», «объект JSON».
Между «URL» и флажками в окне стоит «Данные»; ниже — настройки соединения и прокси и «Заголовки» (дополнительные заголовки запроса); «Имя» — подпись узла на холсте.
На выходе: ответ — в msg.payload, код ответа — в msg.statusCode, заголовки — в msg.headers.
MQTT
Узлы mqtt in и mqtt out читают и отправляют сообщения брокеру MQTT — серверу обмена данными, который есть у вас или у стороннего сервиса. Укажите адрес вашего брокера. Настройка брокера вводится один раз и общая для всех узлов с этим брокером.
mqtt in
Получает сообщения по теме от брокера. Вход: 0, выход: 1.
Окно узла mqtt in «Команды зала»: 1 — «Сервер», 2 — «Тема», 3 — «QoS», 4 — «Выход», 5 — «Имя»
Поля окна:
«Сервер» — брокер; кнопка с карандашом рядом открывает его настройку.
«Тема» — по какой теме получать сообщения.
«QoS» — гарантия доставки (0, 1 или 2).
«Выход» — в каком виде отдать сообщение: автоматически разобрать, как строку, как объект JSON и т. д.
«Имя» — подпись узла на холсте.
Между «Сервер» и «Тема» в окне есть выбор «Action» — по умолчанию «Subscribe to single topic» (подписаться на одну тему).
На выходе: значение — в msg.payload, тема — в msg.topic.
Окно настройки брокера (вкладки «Соединение», «Безопасность», «Сообщения»):
Окно настройки брокера MQTT, вкладка «Соединение»: 1 — «Сервер» и «Порт»
«Сервер» и «Порт» — адрес и порт брокера (на снимке — условные).
Там же — шифрование, «ID клиента», логин и пароль (вкладка «Безопасность»). Адрес и порт спросите у администратора брокера.
mqtt out
Отправляет msg.payload брокеру. Вход: 1, выход: 0.
Окно узла mqtt out «Значение зала»: 1 — «Сервер», 2 — «Тема», 3 — «QoS» и «Хранить», 4 — «Имя»
Поля окна:
«Сервер» — тот же брокер, что и у
mqtt in.«Тема» — куда отправить.
«QoS» (гарантия доставки) и «Хранить» — «да» или «нет»: брокер запоминает последнее сообщение темы и отдаёт его новым подписчикам.
«Имя» — подпись узла на холсте.
Если поля «Тема», «QoS» или «Хранить» оставить пустыми, они берутся из свойств сообщения (msg.topic, msg.qos, msg.retain).
Обмен с брокером обычно выглядит так: inject (или любой узел программы) отправляет значение через mqtt out. mqtt in принимает команды по своей теме и передаёт их дальше по программе, здесь в debug, чтобы увидеть, что пришло.
Цепочка примера: «Отправить значение» → mqtt out «Значение зала»; mqtt in «Команды зала» → «Что пришло»
aedes broker
Запускает в программе собственный брокер MQTT на выбранном вами порту, для ваших устройств. В окне — «Имя», вкладки «Connection», «Persistence» и «Security»; на вкладке «Connection» — «MQTT port», «WS bind», «WS port» и «Enable secure (SSL/TLS) connection». Выберите порт, которого нет в таблице на странице «Сетевые порты и протоколы», и согласуйте его с сетевым администратором.
Окно узла aedes broker: значение порта закрашено
WebSocket
Постоянное двустороннее соединение с внешней системой: данные идут в обе стороны без повторных запросов. Один из узлов принимает подключения (websocket in), другой отправляет данные (websocket out); оба могут и слушать, и подключаться сами.
websocket in
Получает данные по соединению. Вход: 0, выход: 1.
Окно узла websocket in «Приём по WebSocket»: 1 — «Тип», 2 — «Путь», 3 — «Имя»
Поля окна:
«Тип» — «Слушать на…»: контроллер ждёт подключения; «Присоединиться к…»: подключается сам.
«Путь» — для «Слушать на…»; кнопка с карандашом открывает настройку пути.
«Имя» — подпись узла на холсте.
На выходе — данные в msg.payload. Чтобы ответить именно тому, кто прислал, websocket out должен получить то же сообщение.
websocket out
Отправляет данные по соединению. Вход: 1, выход: 0.
Окно узла websocket out «Отправка по WebSocket»: 1 — «Тип», 2 — «URL», 3 — «Имя»
Поля окна:
«Тип» — «Слушать на…» или «Присоединиться к…».
«URL» — для «Присоединиться к…»: адрес
ws://илиwss://.«Имя» — подпись узла на холсте.
TCP
Обмен по TCP с устройствами, у которых есть простой текстовый или двоичный протокол. Данные идут в msg.payload.
tcp in
Принимает данные. Вход: 0, выход: 1. Под узлом показывается состояние: «прослушивание порта …» или «подключен к …».
Окно узла tcp in «Приём по TCP»: 1 — «Тип» и «порт», 2 — «к хосту», 3 — «Вывод»
Поля окна:
«Тип» и «порт» — «Слушать» (ждать подключения) или «Подключиться»; порт — в той же строке.
«к хосту» — адрес устройства (при «Подключиться»).
«Вывод» — в каком виде отдать данные: потоком или одиночными сообщениями, буфером или строкой.
Ещё в окне — «Включить безопасное (SSL/TLS) соединение», «Тема» и «Имя».
tcp out
Отправляет данные. Вход: 1, выход: 0.
Окно узла tcp out «Отправка по TCP»: 1 — «Тип» и «порт», 2 — «к хосту», 3 — «Закрывать соединение после отправки каждого сообщения?»
Поля окна:
«Тип» и «порт» — «Слушать», «Подключиться» или «Ответить на TCP»; порт — в той же строке.
«к хосту» — адрес устройства (при «Подключиться»).
«Закрывать соединение после отправки каждого сообщения?» — отметьте, чтобы закрывать соединение после каждой отправки.
Ещё в окне — «Включить безопасное (SSL/TLS) соединение», «Расшифровать сообщение Base64?» и «Имя».
tcp request
Отправляет запрос и ждёт ответ. Вход: 1, выход: 1.
Окно узла tcp request «Запрос по TCP»: 1 — «Сервер» и «порт», 2 — «Возврат», 3 — «Close»
Поля окна:
«Сервер» и «порт» — адрес и порт устройства (в одной строке).
«Возврат» — в каком виде отдать ответ: буфер или строка.
«Close» — когда считать ответ полученным и закрыть соединение: по истечении времени ожидания (в мсек), когда получен символ, по получении N символов, «никогда - держать соединение открытым» или «немедленно - не ждать ответа».
Ещё в окне — «Включить безопасное (SSL/TLS) соединение» и «Имя».
Ответ — в msg.payload.
UDP
Обмен датаграммами без установки соединения; подходит для оповещений и простых команд. Данные идут в msg.payload.
udp in
Принимает датаграммы. Вход: 0, выход: 1. Откройте порт для входящих UDP-пакетов в сетевом оборудовании и брандмауэре (окно узла напоминает об этом).
Окно узла udp in «Приём по UDP»: 1 — «Слушать», 2 — «на порте» и «используя», 3 — «Выход»
Поля окна:
«Слушать» — «UDP сообщения» или «многоадресные сообщения».
«на порте» и «используя» — порт и версия адресов (ipv4 или ipv6), в одной строке.
«Выход» — в каком виде отдать данные: буфер, строка или строка Base64.
udp out
Отправляет датаграммы. Вход: 1, выход: 0.
Окно узла udp out «Отправка по UDP»: 1 — «Отправлять» и «на порт», 2 — «Адрес», 3 — «Декодировать данные кодированные в Base64?»
Поля окна:
«Отправлять» и «на порт» — «UDP сообщение», «широковещательное сообщение» или «многоадресное сообщение», и порт получателя (в одной строке).
«Адрес» — адрес получателя.
«Декодировать данные кодированные в Base64?» — отметьте, если в
msg.payloadстрока Base64: узел отправит декодированные данные.
ping
Проверяет, отвечает ли устройство в сети. Вход: 0 в режиме Timed и 1 в режиме Triggered; выход: 1.
Окно узла ping «Проектор»: 1 — «Target», 2 — «Protocol», 3 — «Mode», 4 — «Ping (S)»
Поля окна:
«Target» — адрес проверяемого устройства; если оставить пустым, адрес берётся из
msg.payload.«Protocol» — Automatic, IPv4 или IPv6.
«Mode» — «Timed»: узел сам проверяет с заданным периодом; «Triggered»: проверка по сообщению на входе.
«Ping (S)» — период проверки в секундах для режима Timed; по умолчанию 20.
Ещё в окне — «Имя»: подпись на холсте.
На выходе: в msg.payload — время ответа в миллисекундах, а если устройство не ответило, false; в msg.topic — проверяемый адрес.
Пример: «Проектор в сети»
Нужно, чтобы на панели зала было видно, доступен ли проектор. Цепочка ping → switch → два change → filter → api - helper - 2:
ping: «Target» — адрес проектора, «Mode» — Timed, «Ping (S)» — 60.switchпоmsg.payload: первое правило «равно false» — выход 1 (нет связи), второе «иначе» — выход 2 (в сети). Как устроенswitch, описано на странице «Функции».К выходам 1 и 2 подключите по
change, которые кладут вmsg.topicзапись вида{"имя надписи": "текст"}: «Проектор: нет связи» и «Проектор в сети».Оба
changeподключите к одному узлуfilter(см. «Функции»).В поле «property» узла
filterукажитеmsg.topic, режим оставьте «block unless value changes». Узел пропустит сообщение, только если запись вmsg.topicотличается от предыдущей, то есть при смене состояния проектора.Выход
filterподключите кapi - helper - 2с событием «Текст» для надписи. Как он работает и как выбрать элемент, описано на странице «Изменение вида на панели».
Цепочка примера: ping «Проектор» → switch «В сети?» → два change → filter «Только смена состояния» → api - helper - 2 «Надпись «Проектор»»
После запуска раз в минуту узел ping проверяет проектор, и надпись на панели меняется на «Проектор в сети» или «Проектор: нет связи». Узел ping отдаёт сообщение при каждой проверке (при недоступном проекторе — каждую минуту false, при доступном — время ответа, которое каждый раз новое). Поэтому filter ставят не после ping, а после двух change: там сравнивается запись в msg.topic, и дальше уходит только смена состояния.
Частая ошибка: в режиме Triggered на узел не подан запускающий сигнал, и проверка не идёт.
SNMP-опрос устройств
Узлы SNMP спрашивают у устройства (принтера, коммутатора, источника бесперебойного питания) значения по их идентификаторам OID. Любое входящее сообщение запускает опрос. Адрес устройства, community и OID можно задать в окне или в свойствах сообщения. Если контроллер сам должен отвечать системе мониторинга, используйте SNMP-агент.
snmp
Читает один или несколько OID. Вход: 1, выход: 1.
Окно узла snmp (версия v2c): 1 — «Host», 2 — «Version», 3 — «Community», 4 — «OIDs»
Поля окна:
«Host» — адрес устройства.
«Version» — v1, v2c или v3.
«Community» — для v1 и v2c.
«OIDs» — что читать: один или несколько OID через запятую без пробелов.
Для v3 вместо «Community» в окне появляются «Username», «Auth.» (уровень защиты), «Auth.Prot.» (MD5 или SHA), «Auth.Key», «Priv.Prot.» (DES или AES), «Priv.Key». Ещё в окне: «Timeout» (рядом с «Version»; на снимке 5 S) — сколько секунд ждать ответа; «Name» — подпись на холсте.
snmp set
Записывает значения в устройство. Вход: 1, выход: 0. Окно такое же, как у snmp, но вместо «OIDs» — «Varbinds»: список записей (OID, тип, значение).
snmp table
Читает таблицу по указанному OID. Вход: 1, выход: 1. Окно такое же, как у snmp, но вместо «OIDs» — «OID» таблицы.
snmp subtree
Читает всё на указанном OID и ниже. Вход: 1, выход: 1. Окно такое же, как у snmp, но вместо «OIDs» — «OID» корня поддерева.
snmp walker
Обходит все узлы от указанного OID до конца. Вход: 1, выход: 1. Окно такое же, как у snmp, но вместо «OIDs» — «OID», с которого начать обход.
wake on lan
Включает компьютер в сети, отправляя ему специальный пакет «проснись». Вход: 1, выход: 0. Любое сообщение на входе запускает отправку.
Окно узла wake on lan «Включить компьютер»: 1 — «MAC Address», 2 — «Target Address», 3 — «Target UDP Port», 4 — «Number of Packets», 5 — «Interval Between Packets (ms)»
Поля окна:
«MAC Address» — адрес сетевой карты компьютера.
«Target Address» — адрес, на который отправить пакет.
«Target UDP Port» — порт пакета; по умолчанию 9.
«Number of Packets» — сколько пакетов отправить; по умолчанию 3.
«Interval Between Packets (ms)» — пауза между пакетами; по умолчанию 100.
Ещё в окне — «Name»: подпись на холсте. Адрес и параметры можно передать в свойствах сообщения: msg.mac, msg.host, msg.udpport, msg.numpackets, msg.interval.
Чтобы компьютер проснулся, в его настройках должно быть включено пробуждение по сети.
Электронная почта
В палитре три узла с похожими названиями; они стоят в категории «социальные». Подписи в окнах английские.
Узел |
Вход / выход |
Что делает |
|---|---|---|
|
0 / 1; 1 / 1 в режиме «when triggered» |
забирает письма с вашего почтового сервера по IMAP или POP3 и передаёт каждое в программу |
|
1 / 0 |
отправляет письмо через ваш SMTP-сервер |
|
0 / 1 |
принимает письма от устройств (например, камер или принтеров) и передаёт их в программу |
Узел отправки определяется по входу слева, узел приёма — по выходу справа.
Предупреждение
В полях «Userid» и «Password» вы вводите данные учётной записи почты. Используйте для программы отдельную учётную запись с минимальными правами, а не личную почту сотрудника.
email (отправка)
Отправляет письмо. Вход: 1, выход: 0.
Окно узла email (отправка): 1 — «To», 2 — «Server», 3 — «Port» и «Use secure connection.», 4 — «Auth type»
Поля окна:
«To» — получатель; если пусто, берётся из
msg.to.«Server» — адрес вашего почтового сервера.
«Port» и «Use secure connection.» — порт сервера и шифрование соединения (в одной строке).
«Auth type» — Basic, XOAuth2 или None.
Ниже — «Userid» и «Password» (учётная запись для отправки) и «TLS option» (проверка сертификата сервера).
Текст письма берётся из msg.payload, тема — из msg.topic. Через свойства сообщения можно задать также копию (msg.cc, msg.bcc), «ответить» (msg.replyTo), вложения (msg.attachments). Выхода нет: результат — в состоянии под узлом («Message sent» или «send failed»).
email (приём)
Забирает письма. Вход: 0 (1 в режиме «when triggered»), выход: 1.
Окно узла email (приём) «Приём писем»: 1 — «Get mail», 2 — «Protocol», 3 — «Server», 4 — «Disposition», 5 — «Criteria»
Поля окна:
«Get mail» — «automatically»: каждые N секунд (по умолчанию 300); «when triggered»: по сообщению на входе.
«Protocol» — IMAP или POP3.
«Server» — адрес почтового сервера (рядом — «Port», «Use SSL?», «Start TLS?»).
«Disposition» — что сделать с прочитанным письмом: None, Mark Read или Delete.
«Criteria» — какие письма брать; по умолчанию Unseen (непрочитанные).
Ещё в окне — «Auth type», «Userid», «Password» (как у отправки) и «Folder» (папка, INBOX).
На выходе по сообщению на письмо: тема — в msg.topic, текст — в msg.payload, также msg.html, msg.from, msg.date, msg.attachments.
email MTA
Контроллер принимает письма как простой почтовый сервер. Вход: 0, выход: 1. Узел принимает письма на выбранном порту: это входящее соединение. Согласуйте порт с сетевым администратором. Подробнее про порты — на странице «Сетевые порты и протоколы».
Окно узла email MTA «Почтовый приём»: 1 — «Port» и «Secure connection», 2 — «Users»
Поля окна:
«Port» и «Secure connection» — порт, на котором узел принимает письма, и отметка шифрованного соединения (в одной строке).
«Users» — учётные записи, по которым узел принимает письма (логин и пароль); по умолчанию «No authentication».
Ещё в окне — «Имя», «Start TLS» (перейти на шифрованное соединение командой STARTTLS) и «Expert» (дополнительные параметры в виде JSON).
На выходе — письмо в тех же полях, что и у email (приём).
Все поля узлов — во встроенной справке: откройте вкладку «справка» боковой панели (значок книги) и выберите узел.