//Программно-аппаратный ватчдог. Циклически с периодом time включает на полпериода выход output //и на полпериода его отключает. //Предназначен на вход реле, которое при остановке этих сигналов в любом состоянии отреагирует и просигнализирует зависание var WatchDog = function (name,interval,output) { {//конструктор первичные установки var RN = name;//"WatchDog"; //ВНЕСТИ ССЫЛКУ НА ВИРТ ДЕВАЙ title var SC = "start"; // имя переключателя - старта правила //dev[RN + "/" + "time"] = 1000;// из-за "фичи" wb, сюда можно внести стартовое значение по умолчанию. Потом закомментить. var logPreff = RN + ":"; //this.StartStateWD = dev[RN + "/" + SC]; //свойство, показываеющее текущее состояние объекта WD - включено или нет var OUTPUT = output; var DEFAULT_OUTPUT = "wb-gpio/V_OUT"; if (OUTPUT == undefined || OUTPUT == "") {OUTPUT = DEFAULT_OUTPUT}; var INTERVAL = interval; var DEFAULT_INTERVAL = 3000; if (INTERVAL == undefined || INTERVAL == 0) { log(logPreff + "присваиваю INTERVAL значение " + DEFAULT_INTERVAL); INTERVAL = DEFAULT_INTERVAL; } var firstStart = true; defineRule(RN + "firstStart",{ when: function(){return firstStart}, then:function(){ log(logPreff + "Создаю виртуальное устройство " + RN); defineVirtualDevice(RN, { title: RN, cells:{ _name: { type: "text", value: RN }, start: { type: "switch", value: false }, sygnal: { type: "text", value: dev[OUTPUT] }, interval: { type: "text", value: INTERVAL }, output: { type: "text", value: OUTPUT } } }); firstStart = false; } }); }////конструктор первичные установки // запуск в работу по событию - включению в интерфейсе. this.main = function (){ var self = this; var timer_blink_name = RN + "_blink"; defineRule(RN + "_start",{ asSoonAs: function(){ return dev[RN + "/" + SC] == true; }, then:function(){ startTicker(timer_blink_name, INTERVAL); timers[timer_blink_name].name = timer_blink_name; log(logPreff + "Запущен таймер мигания выходом для " + OUTPUT); } }); defineRule(RN + "_change_output",{ when: function(){return timers[timer_blink_name].firing;}, then: function(){ dev[OUTPUT] = !dev[OUTPUT]; dev[RN + "/" + "sygnal"] = dev[OUTPUT]; //log(logPreff + "Состояние " + OUTPUT + " изменено на " + dev[OUTPUT]); } }); defineRule(RN + "_stop",{ asSoonAs: function(){ return dev[RN + "/" + SC] == false; }, then:function(){ timers[timer_blink_name].stop(); log(logPreff + "Таймер работы остановлен"); } }); } }; var WD = new WatchDog("WatchDog1",1000,"wb-gpio/V_OUT"); WD.main();