Управление шторами

Здравствуйте!

Написал скрипт управления шторами с кнопки, все работает хорошо, но хотелось бы сделать, чтобы при одном нажатии штора опускалась до конца, а при повторном останавливалась в текущем месте. Получается в скрипт добавляю переменную, которая считает количество нажатий и оформляю через if. Если количество нажатий равно 1, то запускаю свой старый скрипт, если равно 2, то снимаю питание с реле и обнуляю счетчик. Неправильно, видимо, оформляю команду. Подскажите, как оформить правильно данный if и соответственно else.

var motion_timer_21_timeout_ms = 60 * 1000;
var motion_timer_21_id = null;
var quantity = null;

defineRule(“roller cabinet room down”, {
whenChanged: [“Roller blinds/Кабинет_З”, “wb-gpio/EXT5_IN4”],
then: function (newValue, devName, cellName) {
if (newValue) {
quantity=quantity+1;
if quantity=1 then: {
dev[“Roller blinds”][“Кабинет_О”] = false;
dev[“wb-gpio”][“EXT3_ON2”] = false;
setTimeout(function () {
dev[“wb-gpio”][“EXT3_DIR2”] = false;
}, 200);
setTimeout(function () {
dev[“wb-gpio”][“EXT3_ON2”] = true;
}, 200);

         if (motion_timer_21_id) {
            clearTimeout(motion_timer_21_id);
        }
        motion_timer_21_id = setTimeout(function () {
            dev["wb-gpio"]["EXT3_ON2"] = false;  
        	dev["Roller blinds"]["Кабинет_З"] = false; 
            motion_timer_21_id = null;
        }, motion_timer_21_timeout_ms);
    }
    }
},

});

Здравствуйте!
Для начала исправил синтаксические ошибки:

var motion_timer_21_timeout_ms = 60 * 1000;
var motion_timer_21_id = null;
var quantity = null;

defineRule('roller cabinet room down', {
    whenChanged: ['Roller blinds/Кабинет_З', 'wb-gpio/EXT5_IN4'],
    then: function (newValue, devName, cellName) {
        if (newValue) {
        quantity=quantity+1;
            if (quantity==1) then: {
            dev['Roller blinds']['Кабинет_О'] = false;
            dev['wb-gpio']['EXT3_ON2'] = false;
            setTimeout(function () {
            dev['wb-gpio']['EXT3_DIR2'] = false;
            }, 200);
            setTimeout(function () {
            dev['wb-gpio']['EXT3_ON2'] = true;
            }, 200);

                if (motion_timer_21_id) {
                    clearTimeout(motion_timer_21_id);
                }
                motion_timer_21_id = setTimeout(function () {
                    dev["wb-gpio"]["EXT3_ON2"] = false;  
                    dev["Roller blinds"]["Кабинет_З"] = false; 
                    motion_timer_21_id = null;
                }, motion_timer_21_timeout_ms);
            }
        }
    },
});

Теперь правило сохраняется без ошибок

var motion_timer_21_timeout_ms = 60 * 1000;
var motion_timer_21_id = null;

var quantitycabd = null;
var quantitycabu = null;

defineRule(‘roller cabinet room down’, {
whenChanged: [‘Roller blinds/Кабинет_З’, ‘wb-gpio/EXT5_IN4’],
then: function (newValue, devName, cellName) {
if (newValue) {

    quantitycabd=quantitycabd+1;
    quantitycabu=null;
        if (quantitycabd==1) then: {
          
       		 dev['Roller blinds']['Кабинет_О'] = false;
       		 dev['wb-gpio']['EXT3_ON2'] = false;
       		 setTimeout(function () {
       		 dev['wb-gpio']['EXT3_DIR2'] = false;
       		 }, 200);
     		   setTimeout(function () {
    		    dev['wb-gpio']['EXT3_ON2'] = true;
    		    }, 200);

    		        if (motion_timer_21_id) {
       		         clearTimeout(motion_timer_21_id);
       		     }
      		      motion_timer_21_id = setTimeout(function () {
      		          dev["wb-gpio"]["EXT3_ON2"] = false;  
      		          dev["Roller blinds"]["Кабинет_З"] = false; 
      		          motion_timer_21_id = null;
      		      }, motion_timer_21_timeout_ms);
          
        }
      else
      {
            quantitycabd=null;  
        	quantitycabu=null;
        	dev['Roller blinds']['Кабинет_О'] = false;
       		 dev['wb-gpio']['EXT3_ON2'] = false;
       		 setTimeout(function () {
       		 dev['wb-gpio']['EXT3_DIR2'] = false;
       		 }, 200);
     		   setTimeout(function () {
    		    dev['wb-gpio']['EXT3_ON2'] = false;
    		    }, 200);
    		        if (motion_timer_21_id) {
       		         clearTimeout(motion_timer_21_id);
       		     }
      		      motion_timer_21_id = setTimeout(function () {
      		          dev["wb-gpio"]["EXT3_ON2"] = false;  
      		          dev["Roller blinds"]["Кабинет_З"] = false; 
      		          motion_timer_21_id = null;
      		      }, motion_timer_21_timeout_ms);
     		   }

    }
},

});

defineRule(“roller cabinet room up”, {
whenChanged: [“Roller blinds/Кабинет_О”, “wb-gpio/EXT5_IN5”],
then: function (newValue, devName, cellName) {
if (newValue) {

   	    quantitycabu=quantitycabu+1;
    	quantitycabd=null;
        if (quantitycabu==1) then: {
      
       dev["Roller blinds"]["Кабинет_З"] = false; 
       dev["wb-gpio"]["EXT3_ON2"] = false;
       setTimeout(function () {
       dev["wb-gpio"]["EXT3_DIR2"] = true;
}, 200);
        setTimeout(function () {
        dev["wb-gpio"]["EXT3_ON2"] = true;
}, 200);

         if (motion_timer_21_id) {
            clearTimeout(motion_timer_21_id);
        }
        motion_timer_21_id = setTimeout(function () {
        dev["wb-gpio"]["EXT3_ON2"] = false;  
        dev["Roller blinds"]["Кабинет_О"] = false; 
            motion_timer_21_id = null;
        }, motion_timer_21_timeout_ms);
                   
        }
      else
      {
            quantitycabd=null;  
        	quantitycabu=null;  
        
       dev["Roller blinds"]["Кабинет_З"] = false; 
       dev["wb-gpio"]["EXT3_ON2"] = false;
       setTimeout(function () {
       dev["wb-gpio"]["EXT3_DIR2"] = true;
}, 200);
        setTimeout(function () {
        dev["wb-gpio"]["EXT3_ON2"] = false;
}, 200);

         if (motion_timer_21_id) {
            clearTimeout(motion_timer_21_id);
        }
        motion_timer_21_id = setTimeout(function () {
        dev["wb-gpio"]["EXT3_ON2"] = false;  
        dev["Roller blinds"]["Кабинет_О"] = false; 
            motion_timer_21_id = null;
        }, motion_timer_21_timeout_ms);
                   
        }    
    }
},

});

Наконец-то через год использования системы я на шаг ближе к результату, который изначально планировался!)) Выкладываю рабочий код. Штора при нажатии кнопки один раз закрывается до конца, второй раз, если не закрылась до конца, останавливается, третий - продолжает И так далее.
Код кривоват, конечно, но может кому будет полезным

Подскажите, есть возможность как-то защититься от потери кода скриптов? Какое-нибудь резервное копирование на внешний источник? Ну и возможно все настройки

Можно сделать резервную копию всех пользовательских скриптов, скопировав директорию /mnt/data/etc/wb-rules на резервный носитель или компьютер.

Если хотите сохранить все пользовательские настройки вместе со скриптами, тогда нужно сделать резервную копию архива директории /mnt/data/etc. Архив позволит сохранить атрибуты файлов в файловой системе. Есть видео на эту тему: Резервное копирование Wirenboard (архивирование основных директорий) - YouTube

Готовая команда: Резервное копирование настроек контроллера — Wiren Board
Архив, само собой можно или куда-то отправить (ftp, rsync, другие методы).

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.