Правило управления шторами


#1

Использую модель для управления штор. Написал правило управления по импульсу. По задумке необходимо следующая последовательность управления:

  1. Нажатие №1 - запустить двигатель в сторону A
  2. Нажатие №2 - Остановить двигатель, если таймер еще активен, запустить двигатель в сторону B, если таймер уже прошел.
  3. Нажатие №3 - запустить двигатель в сторону B
var timer_id = null;
  var timeout_s = 10*1000

defineRule("rollet", { 
whenChanged: "wb-mr6c_24/Input 3 counter", //модуль DL.1
      then: function(newValue, devName, cellName) {
        if (dev["wb-gpio/EXT1_ON3"] = "0";) {
         dev["wb-gpio/EXT1_ON3"] = "1";
         dev["wb-gpio/EXT1_DIR3"] = !dev["wb-gpio/EXT1_DIR3"];
          if (timer_id) {
            clearTimeout(timer_id);
          }
          timer_id =  setTimeout(function () {
            dev["wb-gpio/EXT1_ON3"] = "0";
              timer_id = null;
          }, timeout_s);
     } else {
         dev["wb-gpio/EXT1_ON3"] = "0";
        }
      }
});

По факту правило только поочередно запускает двигатель в разные стороны независимо от таймера. Т.е. Я не могу остановить шторы в промежуточном положении.
Похоже я не правильно оперирую с оператором else.
Помогите пожалуйста разобраться


#2

Вот что сразу вижу:
if (dev["wb-gpio/EXT1_ON3"] = "0";) {
знак равенства один —это присвоение, а не сравнение, поэтому проверка всегда выполняется с результатом true.
Так попробуйте:
if (dev["wb-gpio/EXT1_ON3"] == "0";) {


#3

; внутри ещё — не надо так :slight_smile: Удивительно, что хоть что-то работает.