Управление свичером в виртуальном устройстве через алису

Решил попробовать управление релешками через алису. Алису подключил. Добавил устройство свичер из виртуального устройства вытяжки.

Адрес топика ventilation_vd/on.

Через Алису включаю этот свич, в веб интерфейсе свич включается. Но правило wb rule все равно продолжает видеть этот свич как false.

Сначала правило было написано как whenChanged: “ventilation_vd/on” и это работало только при включении через веб интерфейс в ВУ, а при изменении через Алису не работало. Я подумал, что просто изменение топика не фиксируется при изменение через Алису. Переписал правило через крон, чтобы раз в 5 сек проверялся топик ventilation_vd/on. Оказалось, что топик остается false все время после изменения через Алису.

На скрине ниже видно. Запуск правла (false), включаю свич через ВУ в вебе, появляется true, так же выключаю, затем включаю через Алису и видим дальше только false. Ничего не меняется.

При этом релешки mr6c для управления светом работают отлично через Алису.

Добрый день! Спасибо большое за детальное описание проблемы и иллюстрации. А к чему привязано в движке правил состояние контрола “ventilation_vd/on”, как оно изменяется у вас?

привязано к ‘wb-gpio/EXT2_R3A6’

Когда добавил к Алисе устройство со ссылкой на это реле, то все работает без проблем.

Но нужно управлять вытяжкой именно через свичер в ВУ. Чтобы все связанное с вытяжкой было в одном месте.

Просто если такую жесткую ссылку кинуть в устройство Алисы и в правило, то в дальнейшем, при возможной смене реле, придется менять ссылки сразу в двух местах.
Хочу придерживаться правила, что жесткая ссылка только в одном месте (в правиле вытяжки).

То есть получается, что в веб интерфейсе переключатель изменяет состояние, но при этом контрол виртуального устройства остается false?
Есть ли возможность ознакомится с кодом вашего правила? (Можете отправить мне в личном сообщении, если в нем есть чувствительная информация).

да, в веб интерфейсе свич меняет положение от Алисы, но у меня какие то странности происходят.

тут свичер true

тут контрол true
На изображении представлена таблица с информацией об устройстве "ventilation_vd/on", типе "switch", MQTT-топике "/devices/ventilation_vd/controls/on", значении "true" и статусе "OK". (Captioned by AI)

а скрипт пишет false.

Вот фрагмент скрипта:

var ventilation_relay_link = 'wb-gpio/EXT2_R3A6'; // реле включения вытяжки
var ventilation_vd_on_link = 'ventilation_vd/on'; // кнопка включения вытяжки в виртуальном устройстве

function vent_switch(on) {
  if (on === dev[ventilation_relay_link]) return; // Если состояние не изменилось, выходим

  debug_mes("Вытяжка " + (on ? "включена" : "выключена"));
  dev[ventilation_relay_link] = on;
  on ? buzzer_beep(1, 500) : buzzer_beep(2, 400);
}

defineRule("button_vd_on", {
  // whenChanged: ventilation_vd_on_link,
  when: cron('*/5 * * * * *'), // Каждые 5 секунд
  then: function (newValue, devName, cellName) {
    on = dev[ventilation_vd_on_link];
    debug_mes("ventilation_vd/on = " + on);
    vent_switch(on);
  }
});

Мне кажется, что тут проблема с интерпритацией /on. Неоднозначный топик получается.
Предлагаю для теста контрол on виртуального устройства переименовать во что-то более другое. В state, или во что угодно.

попробовал:

function vent_switch(state) {
  if (state === dev[ventilation_relay_link]) return; // Если состояние не изменилось, выходим

  debug_mes("Вытяжка " + (state ? "включена" : "выключена"));
  dev[ventilation_relay_link] = state;
  state ? buzzer_beep(1, 500) : buzzer_beep(2, 400);
}

defineRule("button_vd_on", {
  // whenChanged: ventilation_vd_on_link,
  when: cron('*/5 * * * * *'), // Каждые 5 секунд
  then: function (newValue, devName, cellName) {
    state = dev[ventilation_vd_on_link];
    debug_mes("ventilation_vd/on = " + state);
    vent_switch(state);
  }
});

Так же. К тому же, если бы в этом было дело, то при изменении положения свича в ВУ правило бы не срабатывало, а оно срабатывает. Не срабатывает только при управлении через алису. Если сюда можно видео загрузить, то сейчас демку скину

Я про этот on

Если вы хотите управлять контролом виртуального девайса извне (Алисой той же), то у него надо установить readonly = false. Еще извне команду на изменение значения контрола надо писать в сабтопик /devices/…/controls/…/on.

Дмитрий, здравствуйте! readonly = false был установлен по умолчанию. Добавил явно. Ситуация не изменилась. А вот совет поменять название контрола в ВУ вместо on назвать по другому (я назвал enabled) сработало. Теперь изменение происходит через Алису нормально. Спасибо!

И по поводу записывать значение в субтопик /devices/…/controls/…/on. Я ведь не могу этого указать в блоке “интеграция” через веб интерфейс.

Видимо, это в интеграции сделано.

Добрый день.
Спасибо за обратную связь.

Создали задачу для исправления данной проблемы. Чтобы можно было использовать топик типа /devices/.../controls/on. По нашей конвенции это не запрещено.