Через Алису включаю этот свич, в веб интерфейсе свич включается. Но правило wb rule все равно продолжает видеть этот свич как false.
Сначала правило было написано как whenChanged: “ventilation_vd/on” и это работало только при включении через веб интерфейс в ВУ, а при изменении через Алису не работало. Я подумал, что просто изменение топика не фиксируется при изменение через Алису. Переписал правило через крон, чтобы раз в 5 сек проверялся топик ventilation_vd/on. Оказалось, что топик остается false все время после изменения через Алису.
На скрине ниже видно. Запуск правла (false), включаю свич через ВУ в вебе, появляется true, так же выключаю, затем включаю через Алису и видим дальше только false. Ничего не меняется.
Добрый день! Спасибо большое за детальное описание проблемы и иллюстрации. А к чему привязано в движке правил состояние контрола “ventilation_vd/on”, как оно изменяется у вас?
Когда добавил к Алисе устройство со ссылкой на это реле, то все работает без проблем.
Но нужно управлять вытяжкой именно через свичер в ВУ. Чтобы все связанное с вытяжкой было в одном месте.
Просто если такую жесткую ссылку кинуть в устройство Алисы и в правило, то в дальнейшем, при возможной смене реле, придется менять ссылки сразу в двух местах.
Хочу придерживаться правила, что жесткая ссылка только в одном месте (в правиле вытяжки).
То есть получается, что в веб интерфейсе переключатель изменяет состояние, но при этом контрол виртуального устройства остается false?
Есть ли возможность ознакомится с кодом вашего правила? (Можете отправить мне в личном сообщении, если в нем есть чувствительная информация).
Мне кажется, что тут проблема с интерпритацией /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);
}
});
Так же. К тому же, если бы в этом было дело, то при изменении положения свича в ВУ правило бы не срабатывало, а оно срабатывает. Не срабатывает только при управлении через алису. Если сюда можно видео загрузить, то сейчас демку скину
Если вы хотите управлять контролом виртуального девайса извне (Алисой той же), то у него надо установить readonly = false. Еще извне команду на изменение значения контрола надо писать в сабтопик /devices/…/controls/…/on.
Дмитрий, здравствуйте! readonly = false был установлен по умолчанию. Добавил явно. Ситуация не изменилась. А вот совет поменять название контрола в ВУ вместо on назвать по другому (я назвал enabled) сработало. Теперь изменение происходит через Алису нормально. Спасибо!
И по поводу записывать значение в субтопик /devices/…/controls/…/on. Я ведь не могу этого указать в блоке “интеграция” через веб интерфейс.
Создали задачу для исправления данной проблемы. Чтобы можно было использовать топик типа /devices/.../controls/on. По нашей конвенции это не запрещено.