Задача: Хочу чтобы по наступлению временного промежутка времени у меня на участке отрабатывал скрипт в задачу которого входит включение 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
, но скоро переедет на домашний сервер:
Как установить Proxmox 6.4.4 on Gigabyte C246 WU4
Внедряю ZFS для моего сервера Gigabyte C246 WU4
Как подружить Sonoff TH10 с Domoticz
Шаг №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