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

LM5_N
LM-Wall_N
DALI_N
Vita_N

Динамическое изменение времени запуска программ по расписанию из визуализации LogicMachine

Задача

Позволить конечному пользователю изменять время открытия и закрытия жалюзи утром и вечером из визуализации, не заходя в раздел «Скрипты».

Создаем 3 объекта:

— Время открытия (тип: 10. 3 байта время / день недели)
— Время закрытия (тип: 10. 3 байта время / день недели)
— Управляемый объект, например жалюзи (тип: 1. 1 бит (бинарный))

Пользовательская библиотека программ

Добавляем следующий код в Скрипты — > Общие функции (Scripts -> Common functions)

 

function matchdate(now, obj)
    -- получить значение объекта 
    local odate = grp.getvalue(obj)
    -- проверяем только часы и минуты, секунды игнорируем
    return type(odate) == 'table' and now.hour == odate.hour and now.min == odate.minute
  end
  function scheduler(startobj, endobj, ctrlobj)
    -- текущая дата и время как тип table
 local now = os.date('*t')
    -- проверяем, не нужно ли открывать жалюзи
   if matchdate(now, startobj) then
   grp.write(ctrlobj, true, dt.bool)
   end
   -- проверяем, не нужно ли закрывать жалюзи 
   if matchdate(now, endobj) then
   grp.write(ctrlobj, false, dt.bool)
 end
 end

Программа по расписанию

Создаем скрипт по расписанию, который запускается каждую минуту и содержит следующий код

scheduler("Время открытия", "Время закрытия", "Жалюзи")

Редактирование объектов из визуализации

В этом примере учитывается только значение времени, значение даты (дня недели) игнорируется.

Создание более сложной логики

Для создания более сложной логики мы можем создать событийный скрипт, который будет обрабатывать событие при записи в групповой адрес управляемого объекта. Например:

-- Утро: открыть жалюзи1 на 50%, жалюзи2 – 100%
-- Вечер: оставить открытыми жалюзи 1 на 10%, жалюзи 2 закрыть полностью
value = event.getvalue()
 
-- Утро
if value then
    grp.write('Жалюзи 1', 50)
    grp.write('Жалюзи 2', 100)
-- Вечер
else
    grp.write('Жалюзи 1', 10)
    grp.write('Жалюзи 2', 0)
end