Проверка работы wb-rules

Добрый день! Прошу проверить правильность написания скрипта для работы кнопочного выключателя.
Выключатель подключаем ко входу одного модуля (например MDM3), и при нажатии кнопки должен переключаться канал на другом модуле (например WB-LED). Каждое нажатие на кнопочный выключатель должно переключать канал (вкл/выкл).

defineRule("test_switch", {
    whenChanged: "wb-mdm3_110/Input 6",
    then: function(newValue, devName, cellName) {
      if (newValue == true) {
            if (dev["wb-led_113/Channel 1"] == false) {
                dev["wb-led_113/Channel 1"] = true;
            }
      }
    }
});


defineRule("test_switch2", {
    whenChanged: "wb-mdm3_110/Input 6",
    then: function(newValue, devName, cellName) {
      if (newValue == true ) {
            if (dev["wb-led_113/Channel 1"] == true) {
                dev["wb-led_113/Channel 1"] = false;
            }
      }
    }
});

Эти правила будут срабатывать одновременно, и одно будет включать, а второе выключать.

Правильно будет сделать одно правило:

defineRule("test_switch", {
    whenChanged: "wb-mdm3_110/Input 6",
    then: function(newValue, devName, cellName) {
      if (newValue) {
         dev["wb-led_113/Channel 1"] = !dev["wb-led_113/Channel 1"] ;
      }
    }
});

В данном правиле в топик записывается противоположное значение от текущего

1 лайк

Спасибо! Так действительно лучше получилось, всё работает.
Первый вариант тоже работал корректно, я проверял на устройствах.

Действительно, вы правы, у вас была проверка по текущему состоянию

1 лайк