Управление шторами с одной кнопки в "поле"
-
Добрый день. Хочу поделиться скриптом для управления шторами с одной физической кнопки в комнате и двумя кнопками на интерфейсе.
Вводные данные:- Актуатор на привод для открытия штор
- Актуатор на привод для закрытия штор
- Кнопка без фиксации в комнате на стене с одним контактом
Задача:
Реализовать открытие штор по одинарному нажатию на кнопку, по двойному нажатию закрывать шторы. Во время движения штор, одинарное нажатие отключает привод. Управление двумя кнопками из интерфейса системы./* * * @name Управление шторами * @desc * @version 4 */ const buttonF = Device("ActorD","Кнопка в комнате"); const buttonOp = Device("ActorD","Кнопка открыть", [ {"name":"timeOpen", "note":"Максимально время открытия, сек", "type":"number", "val": 10} ]); const buttonCl = Device("ActorD","Кнопка закрыть", [ {"name":"timeClose", "note":"Максимально время закрытия, сек", "type":"number", "val": 10} ]); const driverOp = Device("ActorD","Привод открытия"); const driverCl = Device("ActorD","Привод закрытия"); startOnChange([buttonF, buttonOp, buttonCl]); script({ start() { this.addTimer("T1"); this.addTimer("T2"); this.addTimer("T3"); //Ручное управление закрытием штор из интерфейса if (buttonCl.isOn() && driverOp.isOff()) { driverCl.on(); this.startTimer("T2", buttonCl.getParam("timeClose"), "timeOutClose"); this.addListener(buttonCl, "driverCloseOff"); } //Ручное управление открытием штор из интерфейса if (buttonOp.isOn() && driverCl.isOff()) { driverOp.on(); this.startTimer("T3", buttonOp.getParam("timeOpen"), "timeOutOpen"); this.addListener(buttonOp, "driverOpenOff"); } //Обработка двойного клика выключателя if (buttonF.isOn()) { this.startTimer("T1", 0.5, "timeOut"); this.addListener(buttonF, "dblClick"); } }, dblClick() { if (buttonF.isOn() && driverOp.isOff() && driverCl.isOff()) { this.stopTimer("T1"); driverCl.on(); this.startTimer("T2", buttonCl.getParam("timeClose"), "timeOutClose"); this.addListener(buttonF, "timeOut1"); } }, //Обработка одинарного нажатия выключателя timeOut() { this.removeListener(buttonF, "dblClick"); if (buttonF.isOn() && driverOp.isOff() && driverCl.isOff()) { this.startTimer("T3", buttonOp.getParam("timeOpen"), "timeOutOpen"); this.addListener(buttonF, "timeOut1"); driverOp.on(); } }, //Остановка работы приводов timeOut1() { if (buttonF.isOn() && driverOp.isOn()) { driverOp.off(); this.exit(); } if (buttonF.isOn() && driverCl.isOn()) { driverCl.off(); this.exit(); } }, //Отключение приводов в ручном режиме driverCloseOff () { driverCl.off(); this.exit(); }, driverOpenOff() { driverOp.off(); this.exit(); }, //Отключение приводов через заданное время автоматически timeOutClose() { driverCl.off(); buttonCl.off(); this.exit(); }, timeOutOpen() { driverOp.off(); buttonOp.off(); this.exit(); } });