Цель: Создать возможность пользователю самому изменять предопределенные световые сценарии используя визуализацию на iPad или компьютере.
Требования к оборудованию: решение можно реализовать только при помощи свободно программируемого контроллера EVIKA LogicMachine.
Решение: Определяем групповые адреса, которые будут участвовать в сценарии. Для них определяем теги (tags) «light». Определяем групповые адреса, которые будут отвечать за сценарии. Важно дать осмысленные имена переменным, соответствующим этим адресам (Scenе_1, Scenе_2 и так далее).
Для переключения системы из режима обучения скрипту в режим показа скриптов, определяем групповой адрес, в котором будет храниться информация о статусе системы. Назовем переменную learn_mode. Важно, чтобы тип переменной был бинарный (boolean).
На каждый групповой адрес, выбранный как обработчик кнопки (Scene 1, Scene 2 и т.д.), создаем скрипт в Скрипты –> Событийные (Scripts ->Event-based).
В каждый скрипт добавляем одну запись:
scene_manager(event)
Здесь происходит вызов общей для всех скриптов функции, которая используется для создания или выполнения сценария, где через параметр event передается структура, содержащая информацию об источнике события. Далее в Скрипты -> Общие функции (Scripts -> Common functions) записываем следующий скрипт, где определяем эту функцию.
function scene_manager(event)
-- получаем имя переменной, она является именем сценария
name_scenario = grp.alias(event.dst)
-- определяемся находимся ли мы в режиме обучения
is_learn_mode = grp.getvalue('learn_mode')
-- если переменная определена в системе
if(is_learn_mode ~= nil) then
-- включен режим обучения, записываем в память
if(is_learn_mode == true) then
-- сохраняем массив в память под именем переменной сценария
-- получаем все объекты системы с меткой 'light'
lights = grp.tag('light')
-- сохраняем список объектов и
-- их состояния под именем переменной сценария
storage.set(name_scenario, lights)
else
-- иначе считываем массив из памяти
lights = storage.get(name_scenario, 'no data')
-- и устанавливаем в цикле значения по имени объекта
-- для установки по групповому адресу нужно использовать
-- light.address вместо light.name
if type(lights) == 'string' then
alert('No data')
end
log (type(lights))
if type(lights) == 'table' then
for index, light in ipairs(lights) do
log(light.name, light.data)
grp.write(light.name, light.data)
end
end
end
end
end
Принцип работы скрипта:
- Получаем имя сценария из параметров функции – event.dst.
- Определяем режим работы системы. Если переменная learn_mode равна 1, то режим обучения включен и происходит запись в сценарий, если переменная равна 0, то режим обучения выключен и будет производиться запуск скриптов.
- Если запись, то получаем все объекты системы, имеющие тег (tag) «light» и сохраняем под именем скрипта.
- Если запуск, то по имени скрипта загружаем список объектов, и посылаем команды в систему по данным загруженного списка объектов.
Использование скрипта: После того как установлены все групповые адреса и скрипты, отображение участвующих в сценариях объектов, кнопки вызова сценариев и кнопка включения режима обучения могут отображаться в любой системе визуализации, как встроенной в EVIKA LogicMachine, так любой другой как, например, iRidium Mobile. Мало того, можно обойтись вообще без визуализации, привязав эти адреса к реально существующим выключателям или сенсорным панелям.
Для записи сценариев, пользователь включает объект ‘learn_mode’, и после этого выбирает какие светильники должны быть включены, какие выключены и нажимает на кнопку сценария. Записывает последовательность объектов в память. После отключает объект ‘learn_mode’. Теперь при нажатии на кнопку сценария, сценарий запускается.