Задача
Позволить конечному пользователю изменять время открытия и закрытия жалюзи утром и вечером из визуализации, не заходя в раздел «Скрипты».
Создаем 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