Сеть

Сетевые узлы связывают программу зала с остальным миром. Ими можно опросить устройство по 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.

../../_images/node-http-in.png

Окно узла http in «Запрос статуса»: 1 — «Метод», 2 — «URL», 3 — «Имя»

Поля окна:

  1. «Метод» — GET, POST, PUT, DELETE или PATCH.

  2. «URL» — адрес, по которому узел принимает запрос, например /hall-status.

  3. «Имя» — подпись узла на холсте.

Поле «Принимать загрузки файлов?» (разрешить отправлять файлы вместе с запросом) появляется в окне не при каждом методе: при GET, как на снимке, его нет.

На выходе: тело запроса — в msg.payload; подробности запроса (метод, адрес, заголовки, параметры) — в msg.req. Служебное свойство msg.res связывает ответ с запросом, поэтому его нельзя терять по дороге (подробности — у http response).

Примечание

Узел http in отвечает по адресу контроллера на порту U-Logic (http://<адрес контроллера>:1880/<URL из окна узла>, в режиме HTTPS — https://, см. «Сетевые порты и протоколы»). Какие системы обращаются к этим адресам, согласуйте с сетевым администратором.

http response

Отправляет ответ системе, чей запрос принял http in. Вход: 1, выход: 0.

../../_images/node-http-response.png

Окно узла http response «Ответ»: 1 — «Код состояния», 2 — «Заголовки», 3 — «Имя»

Поля окна:

  1. «Код состояния» — код ответа; если пусто, берётся из msg.statusCode, а если и там нет — 200.

  2. «Заголовки» — дополнительные заголовки ответа.

  3. «Имя» — подпись узла на холсте; на связь с http in не влияет.

Тело ответа берётся из msg.payload. Сообщение, которое приходит на http response, должно быть тем, что вышло из http in (можно после change, switch и других узлов, но не новое от inject): без msg.res отвечать некому.

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

Внешней системе нужно узнать, что программа зала работает. Цепочка http in → change → http response:

  1. http in: «Метод» — GET, «URL» — /hall-status.

  2. change: правило «Установить» msg.payload в строку hall ok. Как устроен change, описано на странице «Функции».

  3. http response: поля оставьте по умолчанию — код будет 200.

  4. Соедините узлы по порядку и нажмите «Развернуть».

../../_images/flow-network-http-in-response.png

Цепочка примера: http in «Запрос статуса» → change «Ответ: hall ok» → http response «Ответ»

Что вы увидите: запрос на http://<адрес контроллера>:1880/hall-status вернёт текст hall ok.

Частая ошибка: вместо change поставили inject или другой узел, который создаёт новое сообщение, — оно не несёт msg.res, и система остаётся без ответа.

http request

Отправляет запрос на внешний адрес и кладёт ответ в msg.payload. Вход: 1, выход: 1.

../../_images/node-http-request.png

Окно узла http request «Запрос состояния»: 1 — «Метод», 2 — «URL», 3 — «Включить безопасное (SSL/TLS) соединение», 4 — «Использовать аутентификацию», 5 — «Возврат»

Поля окна:

  1. «Метод» — GET, POST, PUT, DELETE, HEAD или «- устанавливается через msg.method -».

  2. «URL» — адрес запроса.

  3. «Включить безопасное (SSL/TLS) соединение» — обмен по HTTPS.

  4. «Использовать аутентификацию» — basic, digest или bearer; логин и пароль или токен вводятся здесь же.

  5. «Возврат» — в каком виде получить ответ: «строка UTF-8», «двоичный буфер», «объект JSON».

Между «URL» и флажками в окне стоит «Данные»; ниже — настройки соединения и прокси и «Заголовки» (дополнительные заголовки запроса); «Имя» — подпись узла на холсте.

На выходе: ответ — в msg.payload, код ответа — в msg.statusCode, заголовки — в msg.headers.

MQTT

Узлы mqtt in и mqtt out читают и отправляют сообщения брокеру MQTT — серверу обмена данными, который есть у вас или у стороннего сервиса. Укажите адрес вашего брокера. Настройка брокера вводится один раз и общая для всех узлов с этим брокером.

mqtt in

Получает сообщения по теме от брокера. Вход: 0, выход: 1.

../../_images/node-mqtt-in.png

Окно узла mqtt in «Команды зала»: 1 — «Сервер», 2 — «Тема», 3 — «QoS», 4 — «Выход», 5 — «Имя»

Поля окна:

  1. «Сервер» — брокер; кнопка с карандашом рядом открывает его настройку.

  2. «Тема» — по какой теме получать сообщения.

  3. «QoS» — гарантия доставки (0, 1 или 2).

  4. «Выход» — в каком виде отдать сообщение: автоматически разобрать, как строку, как объект JSON и т. д.

  5. «Имя» — подпись узла на холсте.

Между «Сервер» и «Тема» в окне есть выбор «Action» — по умолчанию «Subscribe to single topic» (подписаться на одну тему).

На выходе: значение — в msg.payload, тема — в msg.topic.

Окно настройки брокера (вкладки «Соединение», «Безопасность», «Сообщения»):

../../_images/node-mqtt-broker.png

Окно настройки брокера MQTT, вкладка «Соединение»: 1 — «Сервер» и «Порт»

  1. «Сервер» и «Порт» — адрес и порт брокера (на снимке — условные).

Там же — шифрование, «ID клиента», логин и пароль (вкладка «Безопасность»). Адрес и порт спросите у администратора брокера.

mqtt out

Отправляет msg.payload брокеру. Вход: 1, выход: 0.

../../_images/node-mqtt-out.png

Окно узла mqtt out «Значение зала»: 1 — «Сервер», 2 — «Тема», 3 — «QoS» и «Хранить», 4 — «Имя»

Поля окна:

  1. «Сервер» — тот же брокер, что и у mqtt in.

  2. «Тема» — куда отправить.

  3. «QoS» (гарантия доставки) и «Хранить» — «да» или «нет»: брокер запоминает последнее сообщение темы и отдаёт его новым подписчикам.

  4. «Имя» — подпись узла на холсте.

Если поля «Тема», «QoS» или «Хранить» оставить пустыми, они берутся из свойств сообщения (msg.topic, msg.qos, msg.retain).

Обмен с брокером обычно выглядит так: inject (или любой узел программы) отправляет значение через mqtt out. mqtt in принимает команды по своей теме и передаёт их дальше по программе, здесь в debug, чтобы увидеть, что пришло.

../../_images/flow-network-mqtt.png

Цепочка примера: «Отправить значение» → mqtt out «Значение зала»; mqtt in «Команды зала» → «Что пришло»

aedes broker

Запускает в программе собственный брокер MQTT на выбранном вами порту, для ваших устройств. В окне — «Имя», вкладки «Connection», «Persistence» и «Security»; на вкладке «Connection» — «MQTT port», «WS bind», «WS port» и «Enable secure (SSL/TLS) connection». Выберите порт, которого нет в таблице на странице «Сетевые порты и протоколы», и согласуйте его с сетевым администратором.

../../_images/node-aedes-broker.png

Окно узла aedes broker: значение порта закрашено

WebSocket

Постоянное двустороннее соединение с внешней системой: данные идут в обе стороны без повторных запросов. Один из узлов принимает подключения (websocket in), другой отправляет данные (websocket out); оба могут и слушать, и подключаться сами.

websocket in

Получает данные по соединению. Вход: 0, выход: 1.

../../_images/node-websocket-in.png

Окно узла websocket in «Приём по WebSocket»: 1 — «Тип», 2 — «Путь», 3 — «Имя»

Поля окна:

  1. «Тип» — «Слушать на…»: контроллер ждёт подключения; «Присоединиться к…»: подключается сам.

  2. «Путь» — для «Слушать на…»; кнопка с карандашом открывает настройку пути.

  3. «Имя» — подпись узла на холсте.

На выходе — данные в msg.payload. Чтобы ответить именно тому, кто прислал, websocket out должен получить то же сообщение.

websocket out

Отправляет данные по соединению. Вход: 1, выход: 0.

../../_images/node-websocket-out.png

Окно узла websocket out «Отправка по WebSocket»: 1 — «Тип», 2 — «URL», 3 — «Имя»

Поля окна:

  1. «Тип» — «Слушать на…» или «Присоединиться к…».

  2. «URL» — для «Присоединиться к…»: адрес ws:// или wss://.

  3. «Имя» — подпись узла на холсте.

TCP

Обмен по TCP с устройствами, у которых есть простой текстовый или двоичный протокол. Данные идут в msg.payload.

tcp in

Принимает данные. Вход: 0, выход: 1. Под узлом показывается состояние: «прослушивание порта …» или «подключен к …».

../../_images/node-tcp-in.png

Окно узла tcp in «Приём по TCP»: 1 — «Тип» и «порт», 2 — «к хосту», 3 — «Вывод»

Поля окна:

  1. «Тип» и «порт» — «Слушать» (ждать подключения) или «Подключиться»; порт — в той же строке.

  2. «к хосту» — адрес устройства (при «Подключиться»).

  3. «Вывод» — в каком виде отдать данные: потоком или одиночными сообщениями, буфером или строкой.

Ещё в окне — «Включить безопасное (SSL/TLS) соединение», «Тема» и «Имя».

tcp out

Отправляет данные. Вход: 1, выход: 0.

../../_images/node-tcp-out.png

Окно узла tcp out «Отправка по TCP»: 1 — «Тип» и «порт», 2 — «к хосту», 3 — «Закрывать соединение после отправки каждого сообщения?»

Поля окна:

  1. «Тип» и «порт» — «Слушать», «Подключиться» или «Ответить на TCP»; порт — в той же строке.

  2. «к хосту» — адрес устройства (при «Подключиться»).

  3. «Закрывать соединение после отправки каждого сообщения?» — отметьте, чтобы закрывать соединение после каждой отправки.

Ещё в окне — «Включить безопасное (SSL/TLS) соединение», «Расшифровать сообщение Base64?» и «Имя».

tcp request

Отправляет запрос и ждёт ответ. Вход: 1, выход: 1.

../../_images/node-tcp-request.png

Окно узла tcp request «Запрос по TCP»: 1 — «Сервер» и «порт», 2 — «Возврат», 3 — «Close»

Поля окна:

  1. «Сервер» и «порт» — адрес и порт устройства (в одной строке).

  2. «Возврат» — в каком виде отдать ответ: буфер или строка.

  3. «Close» — когда считать ответ полученным и закрыть соединение: по истечении времени ожидания (в мсек), когда получен символ, по получении N символов, «никогда - держать соединение открытым» или «немедленно - не ждать ответа».

Ещё в окне — «Включить безопасное (SSL/TLS) соединение» и «Имя».

Ответ — в msg.payload.

UDP

Обмен датаграммами без установки соединения; подходит для оповещений и простых команд. Данные идут в msg.payload.

udp in

Принимает датаграммы. Вход: 0, выход: 1. Откройте порт для входящих UDP-пакетов в сетевом оборудовании и брандмауэре (окно узла напоминает об этом).

../../_images/node-udp-in.png

Окно узла udp in «Приём по UDP»: 1 — «Слушать», 2 — «на порте» и «используя», 3 — «Выход»

Поля окна:

  1. «Слушать» — «UDP сообщения» или «многоадресные сообщения».

  2. «на порте» и «используя» — порт и версия адресов (ipv4 или ipv6), в одной строке.

  3. «Выход» — в каком виде отдать данные: буфер, строка или строка Base64.

udp out

Отправляет датаграммы. Вход: 1, выход: 0.

../../_images/node-udp-out.png

Окно узла udp out «Отправка по UDP»: 1 — «Отправлять» и «на порт», 2 — «Адрес», 3 — «Декодировать данные кодированные в Base64?»

Поля окна:

  1. «Отправлять» и «на порт» — «UDP сообщение», «широковещательное сообщение» или «многоадресное сообщение», и порт получателя (в одной строке).

  2. «Адрес» — адрес получателя.

  3. «Декодировать данные кодированные в Base64?» — отметьте, если в msg.payload строка Base64: узел отправит декодированные данные.

ping

Проверяет, отвечает ли устройство в сети. Вход: 0 в режиме Timed и 1 в режиме Triggered; выход: 1.

../../_images/node-ping.png

Окно узла ping «Проектор»: 1 — «Target», 2 — «Protocol», 3 — «Mode», 4 — «Ping (S)»

Поля окна:

  1. «Target» — адрес проверяемого устройства; если оставить пустым, адрес берётся из msg.payload.

  2. «Protocol» — Automatic, IPv4 или IPv6.

  3. «Mode» — «Timed»: узел сам проверяет с заданным периодом; «Triggered»: проверка по сообщению на входе.

  4. «Ping (S)» — период проверки в секундах для режима Timed; по умолчанию 20.

Ещё в окне — «Имя»: подпись на холсте.

На выходе: в msg.payload — время ответа в миллисекундах, а если устройство не ответило, false; в msg.topic — проверяемый адрес.

Пример: «Проектор в сети»

Нужно, чтобы на панели зала было видно, доступен ли проектор. Цепочка ping → switch → два change → filter → api - helper - 2:

  1. ping: «Target» — адрес проектора, «Mode» — Timed, «Ping (S)» — 60.

  2. switch по msg.payload: первое правило «равно false» — выход 1 (нет связи), второе «иначе» — выход 2 (в сети). Как устроен switch, описано на странице «Функции».

  3. К выходам 1 и 2 подключите по change, которые кладут в msg.topic запись вида {"имя надписи": "текст"}: «Проектор: нет связи» и «Проектор в сети».

  4. Оба change подключите к одному узлу filter (см. «Функции»).

  5. В поле «property» узла filter укажите msg.topic, режим оставьте «block unless value changes». Узел пропустит сообщение, только если запись в msg.topic отличается от предыдущей, то есть при смене состояния проектора.

  6. Выход filter подключите к api - helper - 2 с событием «Текст» для надписи. Как он работает и как выбрать элемент, описано на странице «Изменение вида на панели».

../../_images/flow-network-ping-projector.png

Цепочка примера: 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.

../../_images/node-snmp.png

Окно узла snmp (версия v2c): 1 — «Host», 2 — «Version», 3 — «Community», 4 — «OIDs»

Поля окна:

  1. «Host» — адрес устройства.

  2. «Version» — v1, v2c или v3.

  3. «Community» — для v1 и v2c.

  4. «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. Любое сообщение на входе запускает отправку.

../../_images/node-wake-on-lan.png

Окно узла wake on lan «Включить компьютер»: 1 — «MAC Address», 2 — «Target Address», 3 — «Target UDP Port», 4 — «Number of Packets», 5 — «Interval Between Packets (ms)»

Поля окна:

  1. «MAC Address» — адрес сетевой карты компьютера.

  2. «Target Address» — адрес, на который отправить пакет.

  3. «Target UDP Port» — порт пакета; по умолчанию 9.

  4. «Number of Packets» — сколько пакетов отправить; по умолчанию 3.

  5. «Interval Between Packets (ms)» — пауза между пакетами; по умолчанию 100.

Ещё в окне — «Name»: подпись на холсте. Адрес и параметры можно передать в свойствах сообщения: msg.mac, msg.host, msg.udpport, msg.numpackets, msg.interval.

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

Электронная почта

В палитре три узла с похожими названиями; они стоят в категории «социальные». Подписи в окнах английские.

Узел

Вход / выход

Что делает

email (приём)

0 / 1; 1 / 1 в режиме «when triggered»

забирает письма с вашего почтового сервера по IMAP или POP3 и передаёт каждое в программу

email (отправка)

1 / 0

отправляет письмо через ваш SMTP-сервер

email MTA

0 / 1

принимает письма от устройств (например, камер или принтеров) и передаёт их в программу

Узел отправки определяется по входу слева, узел приёма — по выходу справа.

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

В полях «Userid» и «Password» вы вводите данные учётной записи почты. Используйте для программы отдельную учётную запись с минимальными правами, а не личную почту сотрудника.

email (отправка)

Отправляет письмо. Вход: 1, выход: 0.

../../_images/node-email-send.png

Окно узла email (отправка): 1 — «To», 2 — «Server», 3 — «Port» и «Use secure connection.», 4 — «Auth type»

Поля окна:

  1. «To» — получатель; если пусто, берётся из msg.to.

  2. «Server» — адрес вашего почтового сервера.

  3. «Port» и «Use secure connection.» — порт сервера и шифрование соединения (в одной строке).

  4. «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.

../../_images/node-email-receive.png

Окно узла email (приём) «Приём писем»: 1 — «Get mail», 2 — «Protocol», 3 — «Server», 4 — «Disposition», 5 — «Criteria»

Поля окна:

  1. «Get mail» — «automatically»: каждые N секунд (по умолчанию 300); «when triggered»: по сообщению на входе.

  2. «Protocol» — IMAP или POP3.

  3. «Server» — адрес почтового сервера (рядом — «Port», «Use SSL?», «Start TLS?»).

  4. «Disposition» — что сделать с прочитанным письмом: None, Mark Read или Delete.

  5. «Criteria» — какие письма брать; по умолчанию Unseen (непрочитанные).

Ещё в окне — «Auth type», «Userid», «Password» (как у отправки) и «Folder» (папка, INBOX).

На выходе по сообщению на письмо: тема — в msg.topic, текст — в msg.payload, также msg.html, msg.from, msg.date, msg.attachments.

email MTA

Контроллер принимает письма как простой почтовый сервер. Вход: 0, выход: 1. Узел принимает письма на выбранном порту: это входящее соединение. Согласуйте порт с сетевым администратором. Подробнее про порты — на странице «Сетевые порты и протоколы».

../../_images/node-email-mta.png

Окно узла email MTA «Почтовый приём»: 1 — «Port» и «Secure connection», 2 — «Users»

Поля окна:

  1. «Port» и «Secure connection» — порт, на котором узел принимает письма, и отметка шифрованного соединения (в одной строке).

  2. «Users» — учётные записи, по которым узел принимает письма (логин и пароль); по умолчанию «No authentication».

Ещё в окне — «Имя», «Start TLS» (перейти на шифрованное соединение командой STARTTLS) и «Expert» (дополнительные параметры в виде JSON).

На выходе — письмо в тех же полях, что и у email (приём).

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