Позволяет управлять светом соединив один или несколько выключателей с одним или несколькими световыми приборами Удобен для реализации разных случаев:
- Мастер выключателя - один выключатель выключает весь свет в помешениях
- Проходной выключатель - несколько выключателей управляют одним световым прибором
- Управление шторами
Конфигурация выглядит следующим образом
Каждому сценарию создается виртуальное устройство
Поведение это событие/действие просто названное одним словом.
Для добавления новых типов отслеживаемых событий или действий над контролом - нужно
- Изменить WEBUI
Добавить в файл схемы wb-scenarios.schema.json
новый тип события/действия в соответствующий выпадающий список
- Для событий:
inControls.items.properties.behaviorType
- Для действий:
outControls.items.properties.behaviorType
- Реализовать логику обработки
Описания событий и действий находятся в отдельных файл с таблицами:
- Для событий:
table-handling-events.mod.js
- Для действий:
table-handling-actions.mod.js
Процесс добавления выглядит следующим образом:
- Добавить в таблицу событие или действие с тем же названием enum которое выбрали в схеме
- Описать функцию хендлер которая
- Событие - вернет тру если событие произошло
- Действие - вернет новое значение параметра в зависимости от логики действия
Так как логика сценариев подразумевает связь трех сущностей между собой Каждое событие или действие имеет
- ключ, который соответствует типу события/действия и включает параметры:
- @param {Array} reqCtrlTypes - Required Control Types Разрешенные типы контрол топиков MQTT для данного события/действия
- @param {function} handler - Функция обработчика события или действия При изменении состояния любого из входных топиков, согласно настроенным событиям, все выходные топики изменяют своё состояние в соответствии с настроенным действием.
Хендлер события должен содержать логику обработки события и отвечать на вопрос - произошел ли данный тип события
Возвращать должна для ясности переменную с именем isEventTriggered
Хендлер действия должен содержать логику вычисления нового значения контрола и отвечать на вопрос - какое новое значение контрола нужно записать в соответствии с данным типом действия
Возвращать должна для ясности переменную с именем newControlValue