Как сделать, чтобы в WB-MRWL3 единовременно включалось только 1 реле?

Есть вопрос насчёт использования WB-MRWL3.
Всё управление по modbus, т.е. дискретные входы не используются. В роли контроллера у меня WB6.

Как лучше/надёжнее настроить так, чтобы только одно реле было включено в любой момент времени?
Как исключить человеческий фактор и вероятность включения двух реле одновременно? Например понятно, что в javascript коде я могу добавить эти проверки, но при этом в web интерфейсе всё равно можно будет нечаянно включить больше одного реле.

Причина вопроса — управление вентилятором https://www.solerpalau.com/ru-ru/in-line-duct-fans-td-500-150-160-silent-3v-220-240v-50-60-n8/ — у него 1 вход ноль, и 3 входа на фазу, каждая фаза — это скорости 1, 2, 3.
Но ни в коем случае нельзя одновременно подать ток на две или три фазы — потому что сгорит.
Т.е. перед включением другого реле, нужно сначала разомкнуть включённое реле, а только потом замкнуть нужное.

P.S. Видел в Wiki про mapping матрицу https://wirenboard.com/wiki/I/O_Mapping_Matrix . Похоже, что это близко к тому, что нужно, но кажется, что это всё-таки не совсем оно. Например если настроить матрицу вот так
image
то вроде бы оно должно сработать, сейчас доступа к оборудованию нет, не могу проверить.

Несколько моментов мне непонятно:

  1. Могу ли я по modbus “эмулировать” включение/выключение дискретных входов? Как это сделать?
  2. Когда я по modbus отправлю команду на включение входа 1, а потом отправлю команду на включение входа 2, как поведёт себя WB-MRWL3 ? И что будет если я потом выключу вход 1?

Матрица обрабатывает только изменения входов. Через Modbus можно включать-выключать любые выходы. И нет, эмулровать входы не получится, но можно написать правило, которое будет при включении одновременно двух реле - выключать какое-то из них.

@BrainRoot, т.е. допустим сценарий такой:

  1. В веб интерфейсе сейчас уже включено реле1
  2. Там же в web интерфейсе я нажимаю на реле2
  3. Срабатывает правило, которое сначала выключает реле1, а только потом включает реле2
    Это так будет работать?
    Если да, то не могли бы вы пожалуйста намекнуть как написать такое правило?
    Я пробежался по https://wirenboard.com/wiki/Движок_правил_wb-rules/en и https://github.com/wirenboard/wb-rules, но не увидел чего-то похожего на мой кейс.

p.s. а нет ли где исходников прошивки для этого реле – мне кажется наиболее безопасным было бы реализовать это там, чтобы сам WB-MRWL3 отказывался включать ещё одно реле, если какое-то уже включено.
p.p.s. (не)кстати ссылка в wiki битая

Не совсем. Если включить сразу реле в Devices - то оно сразу включится. Потом отработает правило, которое выключит остальные.
Пример:

//disable_other.js
defineVirtualDevice("testvirtual", {
  title: "relay",
  cells: {  
   	relay_1: { 
           type: "switch",
           value: false
    },
    relay_2: { 
           type: "switch",
           value: false
    },
    relay_3: { 
           type: "switch",
           value: false
    }    
  },
});

var relay_1_String = "testvirtual/relay_1";
var relay_2_String = "testvirtual/relay_2";
var relay_3_String = "testvirtual/relay_3";



defineRule("Relay_1", { //название правила
  whenChanged: relay_1_String, //при изменении состояния
  then: function (newValue, devName, cellName) { //выполняй следующие действия
    if ( newValue == true ) {
      dev[relay_2_String] = false;
      dev[relay_3_String] = false;
    }
  }
});

defineRule("Relay_2", { //название правила
  whenChanged: relay_2_String, //при изменении состояния
  then: function (newValue, devName, cellName) { //выполняй следующие действия
    if (newValue == true) {
      dev[relay_1_String] = false;
      dev[relay_3_String] = false;
    }
  }
});

defineRule("Relay_3", { //название правила
  whenChanged: relay_3_String, //при изменении состояния
  then: function (newValue, devName, cellName) { //выполняй следующие действия
    if (newValue == true) {
      dev[relay_1_String] = false;
      dev[relay_2_String] = false;
    }
  }
});

[quote=“Sergey_Karpushin, post:4, topic:5514”]
p.s. а нет ли где исходников прошивки для этого реле – мне кажется наиболее безопасным было бы реализовать это там[/quote]
Исходники - закрытые. В принципе если нужно единичное устройство и не жалко пару-тройку часов времени его можно и на ардуинке написать, прицепив к ней модбас-платку.

Благодарю, сейчас поправлю.

@BrainRoot, спасибо за пример кода!