E
Поправил сценарий.
/**
* @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();
}
});
С первоначальным условием запуска он не запускался. И сравнение с числами работает надежнее, чем проверка состояния он/офф. ПО крайней мере в моем случае.
Ну и команду актуатора замка поменял на "переключить". Можно теперь его включить и выключить попеременно.