Может кто уже делал?


#1

Полтора дня потратил на простенькую вроде бы задачку., так и не одолел ( Ну не программист я …) Может кто уже делал такое: Перед ( в принципе можно и одновременно) срабатыванием релюшки WB должен подать короткий сигнал через Buzzer. Все Гиты и Хабы переворошил (там всё по созданию с кнопками частоты и громкости., меня устроило бы фиксированные…)., чёт никак…
Простенький код:

defineRule(“Rele_control”, { //название правила - “управление реле”
whenChanged: “wb-adc/R1”, //при изменении состояния датчика света
then: function (newValue, devName, cellName) { //выполняй следующие действия

 if ( dev["wb-adc"]["R1"] > 800) { //если сопротивление датчика меньше  500,
  dev["wb-gpio"]["EXT1_R3A5"] = 0; //установи на выходе wb-gpio устройство EXT1_R3A1  в состояние "выключено"
 
 } else {  // иначе
    if ( dev["wb-adc"]["R1"] < 1550) {//если сопротивление датчика больше 1550, (обеспечиваем гистерезис)
   dev["wb-gpio"]["EXT1_R3A5"] = 1; //установи EXT1_R3A1  в состояние "включено"

}
}
}
});

Не могу понять - что и куда вставлять для “Бип-Бип”…

Спасибо.


#2

Гуглить по setTimeout

тут: https://github.com/contactless/wb-rules/blob/master/README.md и в интернете.


#3

Ок., уполз ваять…


#4

Доваялся - в веб интерфейсе,закладка Device появился второй Buzzer (только не работающий) не могу никак убрать… :frowning:


#5
    function beep(freq, vol, duration) {    // объявление функции "пискнуть", задается частота, громкость и длительность в мс
      dev["buzzer"]["frequency"] = freq;    // устанавливаем частоту,
      dev["buzzer"]["volume"] = vol;        // .. громкость
      dev["buzzer"]["enabled"] = true;      // .. включаем пищалку
      setTimeout(function() {               // задаем функцию, которая выполнится по истечению времени
        dev["buzzer"]["enabled"] = false;   // она просто выключит пищалку
      }, duration);                         // через заданное количество миллисекунд
    }
    
    defineRule("Rele_control", {                      //название правила - "управление реле"
      whenChanged: "wb-adc/R1",                       //при изменении состояния датчика света
      then: function (newValue, devName, cellName) {  //выполняй следующие действия
        if (newValue > 800) {                         //если сопротивление датчика меньше  500,
          dev["wb-gpio"]["EXT1_R3A5"] = 0;            //установи на выходе wb-gpio устройство EXT1_R3A1  в состояние "выключено"
          beep(2000, 50, 50);                         //бип 2000 Гц, половина громкости, 50 мс
        } else if (newValue < 1550) {                 //иначе если сопротивление датчика больше 1550, (обеспечиваем гистерезис)
          dev["wb-gpio"]["EXT1_R3A5"] = 1;            //установи EXT1_R3A1  в состояние "включено"
          beep(3000, 100, 100);                       //бип 3000 Гц, полная громкость, 100 мс
        }
      }
    });

#6

Вон оно как, Михалыч… (С НашаРаша). Теперь понятно. Я то пытался функцию пристроить в середине цикла…
Получилось… Правда попискивает в выключеном состоянии реле - это видимо “0” приходит… Ну с этими мелочами улажу.
Спасибо огромное!.


#7

Всё сделал как хотел. Правда пришлось -таки для бипера отдельное правило ваять, и следит он не за датчиком, а за переключением реле. Иначе при каждом изменении значений датчика срабатывает сигнал… а так - канал включился - прошел сигнал., выключается - сигнал… Можно разные по длительности и тональности… Вобщем тут на любой вкус. Я вот думаю - а может темку открыть с примерами правил? Для таких зелёных не программистов как я - много будет интересного. Тут кусочек кода присмотрел., там углядел. А то трудновато попервоначалу вникнуть во все ньюансы.


#8

Полностью поддерживаю!


#9

Пожалуйста: Движок правил: примеры кода