Представим себе на одном контроллере (мастере) тумблер, который при помощи whenChanged включает или выключает поле RUN (тип switch) в виртуальном устройстве. Это устройство через бридж отображается на виртуальное устройство на другом ВБ (слейве). По изменению значения этого контрола слейв щелкает своим реле.
Тык вот. Когда тумблер на мастере переключается, то в обеих копиях виртуального устройства ползунок-switch включается и выключается как надо. Правило на слейве отрабатывает (пишет в лог строку). А реле - НЕТ, ибо в его адрес не летит никакой телеграммы!!!
Если ЖЕ я щелкаю не тумблером на мастере, а в вебальнике мышой (неважно, на мастере или слейве), то в очереди штатно появляется телеграмма /devices/mwac_1/K1/on 1 и реле срабатывает как нужно.
Дополнение.
Если я дергаю физическим тумблером, на слейв прилетает /devices/vdev/controls/run 1
Если дергаю ползунок на вебальнике, то:
/devices/vdev/controls/run/on 1
/devices/vdev/controls/run 1
Вероятно, разница в этом. Почему - я опросил все звёзды и луну, но ответа не получил. Как пришпандрючить /on к топику через рули?
И почему правило на слейве - СРАБАТЫВАЕТ, но не включает реле?! Как такое технически возможно?!
Это фича, а не баг. wb-rules является владельцем виртуального устройства, а /on-топик предназначен для передачи сотояния сервису-владельцу устройства.
Иначе всё будет ещё сложнее.
Можно хотя бы первичное понимание, как безопасно обходить эту фичу? И логику того, что правило срабатывает, а безусловно прописанная в нем команда - не срабатывает.
А можете минимальный пример правила для теста прислать? Ведь, как я понимаю, это и без бриджа можно протестировать? Публикуем вручную топик, имитируя полученный с другого контроллера, и смотрим как выполняется правило.
Вот log.info в предпоследней строчке срабатывает, а К2 - хрен. Я минут с полчаса проходил онлайн разные психиатрические тесты, прежде чем вдуплил сделать publish вместо assign…
Вообще, конечно, надо бросать попытки заставить это всё работать…
Два контроллера, одна и та же версия софта. На одном dev[virtdev/control] показывает значения из топика mqtt /devices/virtdev/controls/control, на другом, в том же скрипте, получаю ноль.
При этом на вебальнике всё отображается корректно.
Достало слегка.
Нет, ни одну не решило. Я прикостылил ее с двух сторон: publish() на одной и trackMqtt на другой. При этом понятия, почему оно так странно глюкает, у меня не появилось, документации об опасных «фичах» также не дождался.
Учитывая, что число контроллеров у меня подползает к сотне, я вскорости премило забуду, какой именно из костылей является позвоночником и буду иметь риск одним движением всё повалить. Это не работа.
Уже предлагал в личной беседе заплатить вам денег, чтоб сесть и сделать уже нормально. Ответа предсказуемо не последовало. Жаль.
Да пишется новая, “хорошая” версия wb-rules.
Насчет бага:
На мастере и на слейве надо глянуть в топик, то есть mosquitto_sub …/PUMP1/#
Подозреваю - что-то с типом, ну и строку с логом дополнить
Я бы хотел понимать, когда. Вся автоматизация второй год держится на десятках костылей в разных местах и все равно падает.
Пока я в статусе энтузиаста, нет смысла бесить вас каждую неделю. Если же делаем договор, появляется таймлайн и обязательства по его исполнению.
Я не понимаю, как поверх бриджа передается тип. Вероятно, ваш демон - тоже не понимает, см. пост выше про разное поведение идентичных скриптов на идентичной версии софта.
В топике устройства есть type параметр. Вот им-то, значением и определяется тип. Но я сам при настройке межсистемного" взаимодействия - забиваю половину кода проверками. Не надеюсь. Так что typeof возвращает?
О!!! Еще любопытственнее! Ничего.
Не в смысле undef, а в лог вывода теперь нету. Если typeof() убрать, в лог ВЫВОДИТ, но релейкой не щелкает. Шайтан.
При этом на вебальнике слейва переключатель в виртустройстве переключается как ни в чем не бывало.