Задача: Хочу чтобы по наступлению временного промежутка времени у меня на участке отрабатывал скрипт в задачу которого входит включение Relay Sonoff TH10 (в последствии будет заменено на связку MegaD2561 + Mega D-14-R – прорабатываю, документирую) на которое запитано два светильника, один освещает место парковки, а второй кессон, дорожку до дома. В процессе связки двух светильников используют распаечную коробку и клеммы WAGO.

Шаг №1: У меня все еще в качестве системы "Умный дом" используется Domoticz на Ubuntu 18.04. Знаю! Что есть более новая версия на Ubuntu 20.04, но я как поставил на Ubuntu 18.04 Server, отключил автоматические обновления, то мне этого достаточно. Мой Domoticz крутится на HP MicroServer Gen8, но скоро переедет на домашний сервер:

Шаг №2: Чтобы воплотить задумку, буду писать событие:

http://IP&DNS:8080 (http://172.33.33.122) - user&pass - Настройка - Дополнительно - События – нажимаю на "плюсик" – выбираю dzVents – шаблон Timer и на его основе у меня получается вот такой вот скрипт:

--так обозначается комментарий
return {
        on = {
                timer = {
                        --Если время в промежутке между 20:00-21:00
                        'at 19:00-21:00'
                        --'at 20:00-21:00'
                }
        },

execute = function(domoticz, timer)
    --Присваиваем переменной значение устройства
    local light1 = domoticz.devices('Свет Парковка')

    --Если состояние устройства выключено
    if (light1.state == 'Off') then
        --Если время от промежутка прошло 1 минута, то 
        --Включаем Реле
        light1.switchOn().forMin(1)
                domoticz.log('Timer event was triggered by ' .. timer.trigger, domoticz.LOG_INFO)
                domoticz.log('Light1 On' .. timer.trigger, domoticz.LOG_INFO)
    elseif
        (Light1.state == 'On') then
            --Если время больше через промежуток то выключаем реле
            light1.switchOff().forMin(1)
            domoticz.log('Light1 Off' .. timer.trigger, domoticz.LOG_INFO)
        --return true
    end
end
}

После его написания нажимаю "Сохранить" и "Включен"
Ниже наглядный результат скрипта:

Написанный скрипт реализующий задачу заметки, сохранен и включен

На заметку: Созданный скрипт через визуальное написание выше располагается

ekzorchik@srv-domoticz:~$ ls domoticz/scripts/dzVents/generated_scripts/ -lh
total 8.0K
-rw-r----- 1 root root 1.3K Sep 19 20:51 LightGarazheOn1.lua

Но также можно не через визуальное написание расположить код по пути:

ekzorchik@srv-domoticz:~$ ls domoticz/scripts/dzVents/scripts/LightGarazheOn1.lua

Шаг №3: В процессе написания скрипта (события) отлавливал ошибки (не удобно правда) через меню:
http://IP&DNS:8080 (http://172.33.33.122) - user&pass - Настройка - Журнал – вкладка "Состояние"

Шаг №4: Я свой код как мог задокумментировал, на проверку если указать временной промежуток, то если время между, что через 1 минуту включается реле, если промежуток выходит за пределы то выключается.

На заметку: Я все наработки по части скриптов перебрасываю в домашний репозитарий на базе Mercurial.

Пока данный код выполняет задачу, по мере опыта он будет совершенствоваться.

Шаг №5: От 20.09.2021 было замечено что скрипт каждую минуту то включает реле то выключает реле – неправильно. Я пока не понял как сделать по нормальному. И тут пришла идея путь будет два скрипта:

на включение по наступлению временного промежутка:

return {
        on = {
                timer = {
                        --'at 18:30-21:00',                     -- between 12:45 and 21:15. You cannot use '*'!
                        --Если время в промежутке между 20:00-21:00
                        'at 19:00-20:30'
                        --'at 20:00-21:00'
                }
        },

execute = function(domoticz, timer)
    --Присваиваем переменной значение устройства
    local light1 = domoticz.devices('Свет Парковка')

    --Если состояние устройства выключено
    if (light1.state == 'Off') then
        --Если время от промежутка прошло 1 минута, то 
        --Включаем Реле
        light1.switchOn()
                domoticz.log('Timer event was triggered by ' .. timer.trigger, domoticz.LOG_INFO)
                domoticz.log('Light1 On' .. timer.trigger, domoticz.LOG_INFO)
    
    end
end
}

на выключение если время на 1 минуту больше чем промежуток дабы если я поздно возвращаюсь я мог подключившись через OpenVPN к домашней сети, открыв приложение Domoticz включить свет и погасить свет:

return {
	on = {
		timer = {
			
			'at 20:31'
			
		}
	},
	execute = function(domoticz, timer)
	   --Присваиваем переменной значение устройства
    local light1 = domoticz.devices('Свет Парковка')

    --Если состояние устройства выключено
    if (light1.state == 'On') then
        --Если время от промежутка прошло 1 минута, то 
        --Включаем Реле
        light1.switchOff()
                domoticz.log('Timer event was triggered by ' .. timer.trigger, domoticz.LOG_INFO)
                domoticz.log('Light1 Off' .. timer.trigger, domoticz.LOG_INFO)
	end
end
}

Пока так, если разберусь как сделать один единственный скрипт то дополню заметку.

На этом у меня все, с уважением автор блога Олло Александр
Email: support@ekzorchik.ru
Telegram: @aka_ekzorchik