Кодовый замок из настенных выключателей (скрипт-шутка)
-
Если у вас есть ряд из 4-х настенных выключателей (именно выключателей, а не кнопок) можно сделать из них кодовый замок.
Работает так - ввести стартовую комбинацию, после чего проделать определенную последовательность переключений. На каждое переключение дается 2 сек. Любая ошибка остановит скрипт.
После окончания включится или выключится выбранное устройство. Например разблокируется замок минибара. Или отключится режим охраны.Сам скрипт
/** * @name кодовый замок * @desc * @version 4 */ const Sw1 = Device("SensorD", "Выключатель1"); const Sw2 = Device("SensorD", "Выключатель2"); const Sw3 = Device("SensorD", "Выключатель3"); const Sw4 = Device("SensorD", "Выключатель4"); const Actor = Device("ActorD", "Секрет"); startOnChange([Sw2], Sw1.isOn() && Sw3.isOff() && Sw4.isOn()); script({ start() { if (Sw1.isOn() && Sw2.isOn() && Sw3.isOff() && Sw4.isOn()) { // взводим таймер, чтобы отключить this.startTimer("T1", 2, "turnOff"); } this.addListener(Sw1, "onSw1"); this.addListener(Sw2, "onSw2"); this.addListener(Sw3, "onSw3"); this.addListener(Sw4, "onSw4"); }, onSw1() { if (Sw1.isOff() && Sw2.isOn() && Sw3.isOff() && Sw4.isOn()) { this.stopTimer("T1"); this.startTimer("T1", 2, "turnOff"); } if (Sw1.isOn() && Sw2.isOff() && Sw3.isOn() && Sw4.isOff()) { this.stopTimer("T1"); this.startTimer("T1", 2, "turnOff"); } }, onSw2() { if (Sw1.isOff() && Sw2.isOff() && Sw3.isOn() && Sw4.isOff()) { this.stopTimer("T1"); this.startTimer("T1", 2, "turnOff"); } }, onSw3() { if (Sw1.isff() && Sw2.isOn() && Sw3.isOn() && Sw4.isOn()) { this.stopTimer("T1"); this.startTimer("T1", 2, "turnOff"); } if (Sw1.isOn() && Sw2.isOff() && Sw3.isOff() && Sw4.isOn()) { Actor.Off(); this.exit(); } }, onSw4() { if (Sw1.isOff() && Sw2.isOn() && Sw3.isOn() && Sw4.isOff()) { this.stopTimer("T1"); this.startTimer("T1", 2, "turnOff"); } if (Sw1.isOn() && Sw2.isOff() && Sw3.isOn() && Sw4.isOn()) { this.stopTimer("T1"); this.startTimer("T1", 2, "turnOff"); } }, turnOff() { this.exit(); } });
В нем :
1 0 0 1 - стартовое положение выключателей.Последовательность переключений:
1 1 0 1
0 1 0 1
0 1 1 1
0 1 1 0
0 0 1 0
1 0 1 0
1 0 1 1
1 0 0 1Можно использовать выключатели в разных концах дома, только нужно увеличить время таймера.
-
@Erik Классная идея, особенно для минибара И отличная реализация
-
Поправил сценарий.
/** * @name кодовый замок * @desc * @version 4 */ const Sw1 = Device("SensorD", "Выключатель1"); const Sw2 = Device("SensorD", "Выключатель2"); const Sw3 = Device("SensorD", "Выключатель3"); const Sw4 = Device("SensorD", "Выключатель4"); const Actor = Device("ActorD", "Секрет"); startOnChange([Sw2]); script({ // 1. 1101 start() { if (Sw1.value==1 && Sw2.value==1 && Sw3.value===0 && Sw4.value==1) { // взводим таймер, чтобы отключить this.startTimer("T1", 2, "turnOff"); } this.addListener(Sw1, "onSw1"); this.addListener(Sw2, "onSw2"); this.addListener(Sw3, "onSw3"); this.addListener(Sw4, "onSw4"); }, onSw1() { // 2. 0101 if (Sw1.value===0 && Sw2.value==1 && Sw3.value===0 && Sw4.ivalue==1) { this.stopTimer("T1"); this.startTimer("T1", 2, "turnOff"); } // 6. 1010 if (Sw1.value==1 && Sw2.value===0 && Sw3.value==1 && Sw4.value===0) { this.stopTimer("T1"); this.startTimer("T1", 2, "turnOff"); } }, onSw2() { // 5. 0010 if (Sw1.value===0 && Sw2.value===0 && Sw3.value==1 && Sw4.value===0) { this.stopTimer("T1"); this.startTimer("T1", 2, "turnOff"); } }, onSw3() { // 3. 0111 if (Sw1.value===0 && Sw2.value==1 && Sw3.value==1 && Sw4.value==1) { this.stopTimer("T1"); this.startTimer("T1", 2, "turnOff"); } // 8. 1001 if (Sw1.value==1 && Sw2.value===0 && Sw3.value===0 && Sw4.value==1) { this.stopTimer("T1"); Actor.toggle(); this.exit(); } }, onSw4() { // 4. 0110 if (Sw1.value===0 && Sw2.value==1 && Sw3.value==1 && Sw4.value===0) { this.stopTimer("T1"); this.startTimer("T1", 2, "turnOff"); } // 7. 1011 if (Sw1.value==1 && Sw2.value===0 && Sw3.value==1 && Sw4.value==1) { this.stopTimer("T1"); this.startTimer("T1", 2, "turnOff"); } }, turnOff() { this.exit(); } });
С первоначальным условием запуска он не запускался. И сравнение с числами работает надежнее, чем проверка состояния он/офф. ПО крайней мере в моем случае.
Ну и команду актуатора замка поменял на "переключить". Можно теперь его включить и выключить попеременно.