Узлы «Интерфейс и панели»

В эту группу входят узлы, которые связывают программу с интерфейсом на панели и с устройством Knob Display: принимают нажатия, меняют вид элементов, считают серии нажатий и сообщений, зеркалят интерфейсы. Основные из них (UI - Panel in, ui - switch, api - helper - 2, UI - Panel out, interlock - 2) разобраны в разделе «Связь интерфейса с программой»; здесь они даны таблицей со ссылками. Остальные описаны подробно.

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

Узлы связи с панелью

Эти узлы подробно описаны в разделе «Связь интерфейса с программой». Здесь — коротко и со ссылкой.

Узел

Что делает

Где подробно

UI - Panel in

вход программы: принимает события всех открытых панелей и интерфейсов; настраивается один раз на вкладку

«Приём событий»

ui - switch

раскладывает события панели по выходам по правилам: одно правило — один выход

«Приём событий»

api - helper - 2

меняет вид элемента на панели (состояние кнопки, текст, цвет, ползунок, список) по значению из сообщения; умеет и переходы между страницами и оверлеями

«Изменение вида на панели»

UI - Panel out

передаёт панели готовое сообщение от api - helper - 2 или interlock - 2

«Изменение вида на панели»

interlock - 2

подсвечивает одну кнопку группы и гасит остальные по ответу устройства

«Переключатели и группы»

toggle - helper

не рекомендуем: хранит своё положение отдельно от панели; переключатели делайте средствами UI-Designer

«Переключатели и группы»

device - command, device - response - listener

отправить команду устройству и принять его ответ

«Команды устройствам и ответы»

api - helper, interlock

устаревшие версии; в новых программах берите api - helper - 2 и interlock - 2

—

Примечание

Переключатель на панели обычно делают отметкой «Отметить как toggle» в UI-Designer — см. «Переключатели и группы». Узел toggle - helper для этого не нужен.

gesture - counter: двойное и тройное нажатие

Зачем. Одна кнопка может делать разное: одно нажатие включает свет в зале, двойное — весь свет. Узел gesture - counter считает нажатия выбранных кнопок интерфейса, которые идут одно за другим, и сообщает, набралась ли серия. Он работает с кнопками интерфейса из UI-Designer и получает события от UI - Panel in.

../../_images/node-gesture-counter.png

Окно узла gesture - counter: 1 — «Интерфейс», 2 — «Кнопки», 3 — «Событие», 4 — «Выходы», 5 — «Окно (мс)», 6 — «Порог N»

Поля окна:

  1. «Интерфейс» — интерфейс, кнопки которого считаются. Пока интерфейс не выбран, в списке стоит «Выберите интерфейс…». Список заполняется после «Сохранить» и «Опубликовать» в UI-Designer.

  2. «Кнопки» — список строк (на снимке рамка стоит на заголовке, сам список ниже). В каждой строке слева номер выхода, поле «Поиск элемента…» и список кнопок интерфейса; строку добавляет «+ добавить». В списке — только обычные и расширенные кнопки. Вместо одной кнопки можно включить флажок «Шаблон» и задать шаблон имён с режимом сравнения, как в ui - switch («Приём событий»).

  3. «Событие» — какое событие считать нажатием: tap, push, release, hold. По умолчанию — release.

  4. «Выходы» — «Один выход на объект (By Object)» (по умолчанию: у каждой строки списка свой выход) или «Раздельные выходы (Match / Pass)» (два выхода: серия набрана и все остальные случаи). Для раздельных выходов появляется поле «Тайм-аут»: в нём выбирают, что отправить, если серия не набрана, — исходные сообщения («Pass Through (Original Msg)») или сообщение-описание («Gesture Object (matched: false)»).

  5. «Окно (мс)» — сколько миллисекунд ждать следующего нажатия, чтобы оно считалось продолжением серии. По умолчанию 300.

  6. «Порог N» — сколько нажатий подряд считать серией. По умолчанию 2.

Ещё в окне: «Имя узла» — подпись на вкладке; «Стратегия» — какие накопленные сообщения вернуть при раздельных выходах и «Pass Through»: все («Вернуть ВСЕ накопленные (All)», по умолчанию) или только последнее («Вернуть только последнее (Last)»). Поле видно и при «Один выход на объект», но в этом режиме не влияет.

Сообщения, которые пришли не от UI - Panel in, и события, не совпавшие с полем «Событие» или с кнопками списка, узел молча пропускает.

Пример: двойное нажатие кнопки «HDMI 2» в секции «Компактно» «Первой программы». Эта кнопка (Fp_Map_Hdmi2_b) не переходит на другую страницу, поэтому второе нажатие сделать можно. Что нужно заранее: загружен и опубликован интерфейс «Первая программа» (имена элементов — в «Первой программе»). Соберите новую цепочку на пустой вкладке.

  1. Перетащите на вкладку UI - Panel in, gesture - counter и debug и соедините их по порядку. Если на вкладке UI - Panel in уже есть, подключитесь к нему.

  2. Откройте gesture - counter. В поле «Интерфейс» выберите «Первая программа».

  3. Нажмите «+ добавить».

  4. В строке нажмите поле «Поиск элемента…» и начните вводить Fp_Map_Hdmi2.

  5. Выберите в списке кнопку «HDMI 2» секции «Компактно» (в «Первой программе» это Fp_Map_Hdmi2_b). Если списка нет или кнопки в нём нет, интерфейс не сохранён и не опубликован.

  6. Оставьте «Событие» — release, «Выходы» — «Один выход на объект», «Окно (мс)» — 300, «Порог N» — 2. Нажмите «Готово».

  7. Откройте debug и в поле «Выводить» выберите «весь msg объект сообщения».

  8. Нажмите «Готово» и «Развернуть». Откройте вкладку отладки (значок «жук»).

  9. На панели дважды быстро нажмите «HDMI 2» в секции «Компактно».

../../_images/flow-ui-gesture-counter.png

Цепочка примера: UI - Panel in «События панели» → gesture - counter «Двойное нажатие HDMI 2» → debug «Серия нажатий»

Что вы увидите. В отладке — сообщение, в payload которого есть поле gesture: интерфейс, объект, событие, count (число нажатий) и matched: true. Одно нажатие, после которого за 300 мс не было второго, придёт на тот же выход с matched: false и count: 1. Если на контроллере загружена и сама программа «Первая программа», она параллельно отправляет команду матрице на каждое нажатие. Это работа других узлов вкладки, не gesture - counter.

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

  • В списке «Кнопки» нет нужной кнопки — интерфейс не сохранён и не опубликован, или это не кнопка (ползунки и надписи узел не считает).

  • Серия не набирается — вторая кнопка нажата позже, чем за «Окно (мс)». Увеличьте окно или нажимайте быстрее.

  • Узел ничего не выдаёт — на его вход приходят не события UI - Panel in, или в поле «Событие» выбрано не то событие, которое приходит от кнопки. Для обычной кнопки подходит release.

message - counter: считать сообщения

Зачем. Нужно среагировать не на каждое событие, а на каждое пятое: «после пяти аварийных сообщений подать сигнал», «после 100 включений напомнить о сервисе». Узел message - counter считает входящие сообщения (все или только с нужным значением) и сообщает, когда счёт дошёл до порога. Он не привязан к интерфейсу: подойдёт любой поток сообщений.

../../_images/node-message-counter.png

Окно узла message - counter: 1 — «Режим», 2 — «Порог N (триггер)», 3 — «Сброс общего при M»

Поля окна:

  1. «Режим» — «messages — считать каждое сообщение» (по умолчанию) или «value — считать по совпадению значения». Во втором режиме появляются поля: «Путь к свойству» (по умолчанию payload.input), «Тип сравнения» (equals, contains, regex), «Значение» (строка, число или логический тип) и для regex — «Флаги regex» (например, i). Считаются только сообщения, у которых значение по указанному пути совпало.

  2. «Порог N (триггер)» — через сколько сообщений сработает третий выход. По умолчанию 5; справа в окне подпись «0 — триггер отключен».

  3. «Сброс общего при M» — на каком общем счёте общий счётчик обнуляется. По умолчанию 100; подпись «0 — без авто-сброса».

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

У узла три выхода:

Выход

Что приходит

1

исходное сообщение с добавленным msg.count — общим счётом; на каждое сообщение

2

сообщение с числом в msg.payload; каждый раз, когда счёт увеличился

3

сообщение, когда счёт цикла дошёл до порога N: в msg.payload общий счёт, в msg.counter — подробности (total, cycleBeforeReset, threshold, totalResetAt); после этого счёт цикла начинается заново

Сбросить счётчики можно сообщением: если msg.reset равно true — сбрасываются оба счётчика; если в msg.reset лежит объект { "cycle": true, "total": true } — только отмеченные.

Пример без внешнего оборудования. Достаточно пустой вкладки.

  1. Перетащите на вкладку inject, message - counter и три debug.

  2. Соедините выход inject со входом message - counter, а три выхода message - counter — с тремя debug (по одному на выход). Подпишите debug «Выход 1», «Выход 2», «Выход 3» в поле «Имя».

  3. Откройте message - counter: «Режим» — «messages», «Порог N (триггер)» — 3. Нажмите «Готово».

  4. Нажмите «Развернуть» и откройте вкладку отладки (значок «жук»).

  5. Нажмите кнопку слева от inject три раза подряд.

../../_images/flow-ui-message-counter.png

Цепочка примера: inject «Сообщение» → message - counter «Считать до трёх» → три debug «Выход 1», «Выход 2», «Выход 3»

Что вы увидите. На каждое нажатие в отладке появляются сообщения «Выход 1» и «Выход 2». После третьего нажатия добавляется сообщение «Выход 3». С четвёртого нажатия счёт цикла идёт снова с начала: следующее сообщение «Выход 3» придёт после шестого нажатия.

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

  • Ждёте сообщение на третьем выходе, а оно не приходит — порог N стоит 0 («триггер отключен») или счёт цикла ещё не дошёл до порога.

  • В режиме «value» ничего не считается — «Путь к свойству» указывает на поле, которого нет в сообщении, или значение не совпадает по выбранному «Типу сравнения». Подключите debug со всем сообщением и проверьте, где лежит значение.

  • Общий счёт «пропал» — он обнуляется при достижении «Сброса общего при M». Для счёта без сброса поставьте 0.

Предпросмотр и зеркала интерфейсов

ui preview: окно предпросмотра на рабочей области

Зачем. Видеть результат рядом с программой: узел показывает веб-страницу по адресу в маленьком окне прямо на рабочей области. Входов и выходов нет, на работу программы он не влияет. Кнопка у узла на рабочей области обновляет окно.

../../_images/node-ui-preview.png

Окно узла ui preview (нижняя часть обрезана): 1 — «URL», 2 — «Размер», 3 — «Масштаб», 4 — «Авто-обновление», 5 — «Тест»

Поля окна:

  1. «URL» — адрес страницы (обязательное поле).

  2. «Размер» — ширина и высота окна в пикселях; рядом кнопки «Обновить» и «Тест».

  3. «Масштаб» — масштаб показа: 50%, 75%, 100%, 125% или 150%.

  4. «Авто-обновление» — отключено или раз в 5, 10, 30 секунд, минуту.

  5. «Тест» — открывает адрес в плавающем окне, которое можно двигать и менять по размеру. «Обновить» в окне узла только сообщает, что превью обновится после сохранения.

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

Зеркала интерфейсов: ui - mirror - in и ui - mirror - out

Зачем. Часто в зале несколько панелей с одинаковым составом кнопок (например, одинаковые интерфейсы на разных планшетах). Писать для каждой отдельную программу не нужно: пара узлов ui - mirror подменяет имя интерфейса, и один поток обрабатывает все панели. ui - mirror - in ставят после UI - Panel in, а ui - mirror - out — перед UI - Panel out.

Примечание

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

ui - mirror - in

Один вход, один выход. Принимает событие от UI - Panel in и подменяет в нём имя интерфейса на выбранное. Если целевой интерфейс не выбран, сообщение дальше не пойдёт.

../../_images/node-ui-mirror-in.png

Окно узла ui - mirror - in: 1 — «Целевой интерфейс»

Поля окна:

  1. «Целевой интерфейс» — имя интерфейса, которое подставляется в событие (обязательное поле).

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

ui - mirror - out

Один вход; выходов столько же, сколько целевых интерфейсов. Из одного сообщения для UI - Panel out делает копии по числу целевых интерфейсов, в каждой — своё имя интерфейса. Если исходный интерфейс не совпадает с интерфейсом сообщения, сообщение дальше не пойдёт.

../../_images/node-ui-mirror-out.png

Окно узла ui - mirror - out: 1 — «Исходный интерфейс», 2 — «Целевые интерфейсы»: строка выбора и кнопка «Добавить», 3 — список выбранных интерфейсов с корзинами

Поля окна:

  1. «Исходный интерфейс» — интерфейс, для которого собрано исходное сообщение (обязательное поле).

  2. «Целевые интерфейсы» — интерфейсы, для которых нужны копии. В строке «Выберите интерфейс…» выберите интерфейс и нажмите «Добавить».

  3. Список выбранных интерфейсов — по порядку, у каждого корзина для удаления; пока никто не выбран, написано «Нет выбранных интерфейсов».

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

Вспомогательные узлы

Узел press - hold работает рядом с другими узлами программы: отличает короткое нажатие от удержания.

press - hold: короткое нажатие и удержание

Зачем. Одна кнопка может делать два дела: короткое нажатие — один шаг (например, громкость на 1 больше), удержание — повторять шаги, пока кнопку не отпустили. Узел press - hold получает «нажали» и «отпустили», сам измеряет время и сообщает, что кнопку удерживают, а на время удержания выдаёт равномерные импульсы. Короткое нажатие он пропускает дальше как есть.

../../_images/node-press-hold.png

Окно узла press - hold: 1 — «Hold (мс)», 2 — «Held период (мс)», 3 — «Длина импульса (мс)», 4 — «Пульс при старте hold»

Как подать нажатие с панели. Узлу нужны сообщения, в msg.payload которых true — «нажали» и false — «отпустили». UI - Panel in и ui - switch выдают событие панели целиком (объект), поэтому между ними и press - hold нужны два узла change:

  1. ui - switch с двумя правилами на одну кнопку: событие push (выход 1) и событие release (выход 2) — как в блоке «Камеры» («Приём событий»).

  2. Выход 1 → change «Нажали»: «Установить» msg.payload — тип «логический тип», значение true.

  3. Выход 2 → change «Отпустили»: то же, значение false.

  4. Выходы обоих change соедините со входом press - hold.

Подавайте узлу строго true и false. Нажатие и отпускание нужно подать обязательно оба: удержание заканчивается только сообщением false.

Поля окна:

  1. «Hold (мс)» — сколько миллисекунд держать кнопку, чтобы это считалось удержанием. По умолчанию 500.

  2. «Held период (мс)» — через сколько миллисекунд повторять импульс, пока кнопку удерживают. По умолчанию 1000.

  3. «Длина импульса (мс)» — сколько длится каждый импульс; 0 (по умолчанию) — моментально: true и сразу false.

  4. «Пульс при старте hold» — флажок, по умолчанию включён: подать первый импульс сразу, когда удержание началось, а не ждать «Held период».

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

У узла три выхода:

Выход

Что приходит

1 hold

true, когда кнопку удерживают дольше «Hold (мс)»; false — при каждом отпускании, в том числе после короткого нажатия

2 held

пока кнопка удерживается — true с периодом «Held период (мс)»; каждый true сопровождается false через «Длину импульса»

3 passthrough

если кнопку отпустили раньше «Hold (мс)» — два исходных сообщения подряд: нажатие и отпускание; при удержании ничего

Пример: отличить короткое нажатие от удержания «HDMI 2» в «Первой программе». Что нужно заранее: загружен и опубликован интерфейс «Первая программа» («Первая программа»). Для кнопки возьмите Fp_Map_Hdmi2_b из секции «Компактно». Соберите цепочку на пустой вкладке.

  1. Перетащите ui - switch, два change, press - hold и три debug. Если на вкладке нет UI - Panel in, добавьте его и соедините с ui - switch.

  2. В ui - switch: «Интерфейс» — «Первая программа», два правила на Fp_Map_Hdmi2_b — с событием push (выход 1) и с событием release (выход 2).

  3. Выход 1 подключите к change «Нажали» (msg.payload — логический тип true), выход 2 — к change «Отпустили» (msg.payload — логический тип false). Оба change соедините с press - hold; в нём оставьте значения по умолчанию.

  4. Три выхода press - hold соедините с тремя debug; в поле «Имя» подпишите их hold, held и passthrough.

  5. Нажмите «Развернуть» и откройте вкладку отладки (значок «жук»).

  6. На панели один раз коротко нажмите «HDMI 2» в секции «Компактно». Затем нажмите её и держите около трёх секунд.

../../_images/flow-ui-press-hold.png

Цепочка примера: UI - Panel in → ui - switch «HDMI 2: нажали и отпустили» → change «Нажали» и «Отпустили» → press - hold «Короткое или долгое» → три debug «hold», «held», «passthrough»

Что вы увидите. Короткое нажатие: в passthrough — два сообщения (true, затем false), в hold — false, в held — ничего. Удержание: примерно через полсекунды в hold приходит true, в held — true и сразу false, затем та же пара каждую секунду. Когда вы отпустили кнопку, в hold приходит false, а в passthrough ничего нет. Если программа «Первая программа» загружена, она параллельно отправляет команду матрице на каждое нажатие. Это работа других узлов.

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

  • Узел не реагирует — на вход пришло событие панели целиком, без change. Нужны сообщения с true и false.

  • Удержание не заканчивается, импульсы идут и идут — до узла не доходит false: нет правила на release или оно не соединено.

  • Любое нажатие считается удержанием — «Hold (мс)» стоит слишком маленьким; увеличьте.

  • Короткое нажатие срабатывает дважды — исходное событие кнопки идёт в программу в обход press - hold и ещё раз через его выход passthrough. Подключайте действие короткого нажатия только к выходу passthrough.

  • Импульсы идут слишком часто или редко — настройте «Held период (мс)».

Knob Display и панели

Узлы этой группы работают не с интерфейсом UI-Panel (страница, на которой оператор работает с интерфейсом), а с отдельным устройством Knob Display — круглым дисплеем с энкодером (поворотной ручкой). Он стоит на стене, и вращением ручки меняют значение: яркость света, температуру, громкость. knob screen управляет тем, что показано на дисплее, и передаёт в программу вращение ручки и свайпы; device control управляет самим устройством и принимает показания его датчиков.

Примечание

Для работы обоих узлов нужно само устройство Knob Display в одной сети с контроллером. Окна настройки открываются и без устройства, но результата на дисплее и событий в программе не будет. Поэтому здесь нет примера, который можно собрать «вхолостую»: ниже — что настроить и что покажет статус узла.

Подключение к устройству

Оба узла работают через общую настройку подключения. Она создаётся один раз и выбирается в поле «Подключение» (у knob screen) или «Устройство» (у device control) — в обоих узлах это один и тот же список.

  1. Откройте узел. Рядом со списком «Подключение» нажмите «+».

  2. В открывшемся окне заполните поля и нажмите «Добавить».

  3. Вернитесь в окно узла: новое подключение выбрано в списке. Нажмите «Готово».

../../_images/node-knob-config.png

Окно настройки подключения к устройству Knob Display: 1 — «Хост», 2 — «Локальный порт», 3 — «Автоподключение», 4 — «Secret Key»

Поля окна:

  1. «Хост» — адрес устройства Knob Display в сети. По умолчанию стоит условный адрес; замените его адресом вашего устройства.

  2. «Локальный порт» — порт, на котором контроллер принимает события устройства. В окне подпись: «Порт для приема событий (0 = случайный)». Оставьте значение по умолчанию, если нет причин его менять. Какие порты использует контроллер — в разделе «Сетевые порты и протоколы».

  3. «Автоподключение» — флажок; включён по умолчанию. При включённом флажке узлы подключаются к устройству сами.

  4. «Secret Key» — ключ доступа к устройству; в пустом поле подсказка «Ключ для configure». Заполняйте значением, которое выдано для вашего устройства, и никому не передавайте.

Ещё в окне: «Имя» — подпись подключения в списках узлов («Device Panel» — подсказка в пустом поле).

Пока подключение не выбрано, поле в окне узла обведено красной рамкой, а под узлом на вкладке — красный статус «no config».

knob screen: что показывать на дисплее

Зачем. Показать на дисплее текущее значение (индикатор или три строки текста), выводить короткие уведомления, переключать «экраны» свайпом и получать в программу вращение ручки. Например, ручка на стене управляет яркостью света: программа получает «повернули вправо» и меняет яркость, а на дисплее в это время показано текущее значение.

../../_images/node-knob-screen.png

Окно узла knob screen, верхняя часть: 1 — «Подключение», 2 — «Режим», 3 — «Свайп → пресеты», 4 — «Экраны», 5 — блок «Тип индикатора», 6 — блок «Значения»

../../_images/node-knob-screen-2.png

Окно узла knob screen, продолжение: «Настройки спиц» и тексты внутри индикатора (строки 1–3); стрелок нет

Поля окна (снимки — режим «GAUGE (Индикатор)», тип индикатора «Spokes (Спицы)»):

  1. «Подключение» — подключение к устройству (см. выше).

  2. «Режим» — «GAUGE (Индикатор)» (по умолчанию) или «TEXT (Текст)» — три строки текста.

  3. «Свайп → пресеты» — какой свайп переключает экраны: «Отключено» (по умолчанию), «← Влево», «→ Вправо», «↑ Вверх», «↓ Вниз», «← → Горизонтальный», «↑ ↓ Вертикальный».

  4. «Экраны» — вкладки 1, 2, 3 и так далее: набор готовых настроек дисплея. Кнопки «+» и «копия» добавляют экран, «–» удаляет.

  5. Блок «Тип индикатора»: «Тип» — «Arc (Сплошная дуга)», «Sections (Цветные секции)» или «Spokes (Спицы)» (в окне на снимке стоят спицы).

  6. Блок «Значения»: «Минимум» (0), «Максимум» (100), «Значение» (50) — начальное значение индикатора, «Шаг энкодера» (1) — на сколько меняется значение при повороте ручки.

Ещё в окне:

  • «Имя» — подпись на вкладке.

  • «Отправить при старте» — флажок; включён по умолчанию.

  • «Превью» — картинка дисплея, как он будет выглядеть.

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

  • Блок «Цвета»: «Цвет заполнения» и «Цвет фона».

  • Блок «Геометрия»: «Толщина», «Начальный угол», «Конечный угол».

  • Блок «Настройки спиц» (только для типа «Spokes (Спицы)»): «Количество спиц», «Волновая анимация».

  • Блок «Секции» (только для типа «Sections (Цветные секции)»): цветные участки шкалы.

  • Три блока «Текст в gauge»: строка 1 (заголовок), строка 2 (основная, по умолчанию {value} — текущее значение) и строка 3 (подпись). В каждом: «Текст», «Иконка», «Размер иконки», «Цвет иконки», «Размер текста», «Цвет текста», «Шрифт».

Что принимает узел. Сообщение, в msg.payload которого лежит объект:

Что отправить

Что произойдёт

{ "value": 75 }

индикатор показывает 75

{ "preset": 2 }

включается экран 2 (нумерация с 1)

{ "notify": 1 }

показывается уведомление № 1 из списка

Что-либо кроме объекта узел игнорирует.

Что выдаёт узел. Один выход: события устройства в msg.payload — вращение ручки (encoder, с направлением cw/ccw по часовой и против и значением), свайп (swipe, направление left/right/up/down), готовность дисплея и смену экрана. К событию добавляется номер текущего экрана. Свайп, которым переключён экран, дальше в программу не передаётся.

Что вы увидите. Состояние подключения — в статусе под узлом: зелёный — подключено (написан адрес устройства), жёлтый «connecting…» — идёт подключение, красный «disconnected», «error», «socket error» или «no config» — нет связи или не выбрано подключение.

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

  • Красный статус «no config» — не выбрано подключение: откройте узел и выберите его в списке «Подключение».

  • «disconnected» или «error» — проверьте адрес устройства в подключении и что устройство включено и находится в той же сети.

  • Адрес в подключении остался условным, заданным по умолчанию — узел не найдёт устройство.

  • Значение не меняется — на вход пришло не объект (например, просто число). Положите число в поле value: { "value": 75 }.

device control: управлять самим устройством

Зачем. knob screen отвечает за картинку на дисплее. Узел device control управляет остальным: включить и выключить экран, поменять яркость, заблокировать клавиши, зажечь светодиод, отправить инфракрасную команду. Он же передаёт в программу показания датчиков устройства (присутствие, температура, влажность, освещённость) и нажатия клавиш.

../../_images/node-device-control.png

Окно узла device control: 1 — «Устройство», 2 — «Действие», 3 — блок «Фильтр событий (выход)»

Поля окна:

  1. «Устройство» — то же подключение, что у knob screen (кнопки «карандаш» и «+» рядом со списком).

  2. «Действие» — что делает узел при получении сообщения. По умолчанию «– Нет (только события) –»: узел только принимает события устройства. Действия в списке, по группам:

    • «Экран»: «Включить экран», «Выключить экран», «Статус экрана»;

    • «Яркость»: «Установить яркость» — значение 0–255 в поле «Яркость» (по умолчанию 128; подпись рядом: «0-255 (или msg.payload = число)»). Если в пришедшем сообщении msg.payload — число, берётся оно, а не значение из окна; любое другое содержимое msg.payload игнорируется и берётся значение из окна. Значение вне 0–255 приводится к ближайшей границе;

    • «Клавиши»: «Заблокировать клавиши», «Разблокировать клавиши»;

    • «LED (D10)»: «LED включить», «LED выключить», «LED мигать» — с полями «LED индекс» и «Интервал мс»;

    • «IR (тип R)»: «Отправить IR команду» (поля «Профиль», «Команда», «Повторы»), «Список IR профилей»;

    • «Система»: «Статус устройства»;

    • «Расширенное»: «Передать msg.payload» — действие и его параметры берутся из msg.payload сообщения;

    • служебная группа действий самого устройства (статус, перезапуск, наблюдение за работой) — для обычной программы не нужна.

  3. Блок «Фильтр событий (выход)»: флажок «Фильтровать» («Выбрать какие события выводить», выключен по умолчанию). Когда он включён, вы выбираете, какие события пропускать на выход: «Presence (датчик присутствия)», «Sensors (температура, влажность, свет)», «Daemon (события демона)» (служебные события устройства), «Keys (клавиши, D10)», «Responses (ответы на команды)». Пока «Фильтровать» выключен, на выход идут все события.

Ещё в окне: «Имя» — подпись на вкладке («Device Control» — подсказка в пустом поле).

Что принимает и выдаёт узел. Любое сообщение на входе запускает выбранное «Действие» (при «– Нет –» — ничего). Один выход выдаёт события и ответы устройства в msg.payload, например показание датчика присутствия { "type": "presence", "value": 1 } или температуры { "type": "temperature", "value": 27.5 }. Чтобы разложить события по веткам, добавьте после узла switch по полю payload.type. Вращение ручки и свайпы идут на выход knob screen, а не сюда.

Типовая схема: inject → device control с действием «Установить яркость» меняет яркость экрана устройства. Узел inject по умолчанию кладёт в msg.payload метку времени: это число, и яркость станет 255. Чтобы взять яркость из окна узла device control, задайте в inject для msg.payload тип «строка» и оставьте поле пустым; чтобы задать яркость из inject, выберите тип «число» и впишите значение от 0 до 255. Результат виден только на устройстве.

Что вы увидите. Статус под узлом — состояние подключения: так же, как у knob screen. Красный «no config» — не выбрано устройство.

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

  • Нет событий на выходе — устройство не подключено (красный статус) или включён «Фильтровать», а нужный тип события не отмечен.

  • Сообщение пришло, а команда не выполнена — для «Передать msg.payload» в payload лежит не объект нужного вида.

  • Ждёте на выходе вращение ручки — оно приходит на выход узла knob screen.

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