Управление освещением
    Презентации
    Технические решения на LogicMachine
    Визуализация
      evika.ru    Технические решения на LogicMachine    Световые сценарии, редактируемые пользователем

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

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

     




    Copyright
    © Embedded Systems Rus
    2017. All Rights Reserved