Горячая линия Embedded System Rus:8-800-775-06-34 (звонок по России бесплатный)

LM5_N
LM-Wall_N
DALI_N
Vita_N

Световые сценарии, редактируемые пользователем

Цель: Создать возможность пользователю самому изменять предопределенные световые сценарии используя визуализацию на 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

Принцип работы скрипта:

  1. Получаем имя сценария из параметров функции – event.dst.
  2. Определяем режим работы системы. Если переменная learn_mode равна 1, то режим обучения включен и происходит запись в сценарий, если переменная равна 0, то режим обучения выключен и будет производиться запуск скриптов.
  3. Если запись, то получаем все объекты системы, имеющие тег (tag) «light» и сохраняем под именем скрипта.
  4. Если запуск, то по имени скрипта загружаем список объектов, и посылаем команды в систему по данным загруженного списка объектов.

Использование скрипта: После того как установлены все групповые адреса и скрипты, отображение участвующих в сценариях объектов, кнопки вызова сценариев и кнопка включения режима обучения могут отображаться в любой системе визуализации, как встроенной в EVIKA LogicMachine, так любой другой как, например, iRidium Mobile. Мало того, можно обойтись вообще без визуализации, привязав эти адреса к реально существующим выключателям или сенсорным панелям.

Для записи сценариев, пользователь включает объект ‘learn_mode’, и после этого выбирает какие светильники должны быть включены, какие выключены и нажимает на кнопку сценария. Записывает последовательность объектов в память. После отключает объект ‘learn_mode’. Теперь при нажатии на кнопку сценария, сценарий запускается.