Диковатый глюк в wb-rules

Ну а я всегда рад помочь.
Могу повторить предложение насчет участия в допиливании. Ибо нет ни времени, ни денег делать практически то же самое с нуля самому.

мы всегда только рады багрепортам и пуллреквестам

Коллеги, после полутора лет интенсивного колупания я знаю только две вещи, делающие контроллер неработоспособным: древний москито, за который вы вроде бы уже взялись, и wb-rules, который, на мой взгляд разработчика, пора прекращать гальванизировать, и нужно срочно переделать с нуля на живом и поддерживаемом движке. Это я долдоню не чаще раза в месяц, благодаря неимоверной выдержке, воспитанной годами упражнений. :slight_smile:

С остальным уже вполне можно жить.

это мы понимаем, есть в планах, правда в ближайшие полгода уже вряд ли успеем.

Тут, пожалуй, помочь можно одним способом - рассказать про наши замечательные вакансии всем знакомым специалистам.

Го в личку?! :star_struck:

Добрый день!

На всякий случай, если вопрос еще не решен.

Если сообщение в лог выводится, значит правило выполняется. Если К2 не срабатывает, то вероятнее всего, как уже писал коллега, newValue имеет тип не boolean и команда не выполняется или newValue может быть всегда 1 (после преобразования в тип boolean).
Можно попробовать такую конструкцию проверки типа переменной newValue на bool. Если переменная имеет другой тип, то попытаться его корректно преобразовать:

defineRule("pump_run", {
  whenChanged: ["PUMP/run_text"],
  then: function (newValue) {
    log.info("starting pump", newValue, typeof(newValue));
    
    if (typeof (newValue) != "boolean")
        {
            log("not bool");
            boolNewValue = Boolean (parseInt(newValue));
        }

    log.info("bool value", boolNewValue, typeof(boolNewValue));
    dev["wb-mr6c_78/K2"] = boolNewValue;
  }
});

Еще раз. Выкрутиться-то я смог, подставив очередной костыль. :slight_smile: Не привыкать.

Вопрос - как именно обычный, нормальный, человек смог бы понять, почему работающее с виду и не выдающее ошибок сооружение - по факту не работает.

Т.е. если эта волчья яма - “фича”, как было предположено выше, то нужно документировать ее, а также пути ее обхода. Если бага - лечить каленым железом.

О, еще один… Та же проблема, только задом наперед.

Нет, тут - просто мост всего со всем и в обе стороны.

Это не отменяет, а всего лишь оттеняет туманность алгоритма взаимодействия рулей с мостом.

А это, на минуточку, единственное, за чем лично я полез в ВБ: нативная работа в сети. Остальные контроллеры, имя им легион, превосходно мигают лампочками и щелкают релюшками офлайн, не виснут, не падают и не чудят. За примерно те же деньги.

Нет туманности. Как видно из результатов подписки - при двунаправленном мосте два раза пишется в /on
И это объясняется так,для брокеров 1 и 2
1 ага, топик поменялся, теперь true. Этот топик у меня в мосту! Отправляю его на брокер 2
2 Пришло true, ставлю
1 ага, кто-то (rules) установил топик в false. А тут на брокере 2 по подписке (мост-то двунаправленный) пришло true. Ставлю опять true
В общем типичная картина коллизий с петлей ОС.

Эт понятно. После как вляпался, помогли, распутался. Где доки? :slight_smile:

И где хоть одно объяснение первого вопроса в топике? Думаю, если бы оно было, оно бы уже было. Смоделить удалось? Или недосуг пока.

Вот думаю как это подоходчивей расписать.

Удалось, воспроизводится. Думаю на днях поймем все ж почему так.

1 лайк

Я еще смешное нашел, отлаживая удаленные узлы.
Как говорил выше, делаю publish с флагом retained для того, чтобы они команду вдуплили. При этом посредством ползунков на вебальнике сделать выкл-вкл тоже можно, ими я при отладке и пользовался.
Но!!!
Если релейко было включено посредством publish, а затем выключено ползунком, минут через ДЕСЯТЬ оно (и ползунок тоже) возвращается во “включено”. Это - странно. Я бы понял, если сразу же, или по истечении цикла опроса устройств (2…20с), но - десять минут??!
Попроверял 100 раз везде - нигде больше в эту переменную и топик никто не пишет.

Ага.
Ну получается, что вебальник постит без флага retained? Ибо за 10 минут (на разных экземплярах время разное) полностью проворачивается очередь брокера и не-retained телеграмма улетает, соотв. брокер заново ловит сохраненную телеграмму и двигает ползунок обратно.
Так, что ли?

Нет, не лепится.
Еще экземпляр [того же?] глюка.
Три контроллера, все релиза 2110, два из них, слейва, коннектятся к мастеру с полным отображением его виртуального устройства, qos=2. На обоих слейвах изменения канала виртустройства на вебальнике отображаются корректно.
Но!!!
На одном из слейвов в переменной dev[] видно реальное значение канала, а на другом - стабильно 0 (или «0»), при этом typeof() отдает правильный тип.
Подписка с trackMqtt() дает также правильное значение.

Я бы таки ОЧЕНЬ попросил уважаемых авторов понять наконец, как идет взаимодействие wb-rules и mqtt, и рассказать нам. Помнится, речь шла о какой-то фиче, но позже всё опять затихло.

Я слабо себе представляю, как это можно реально осуществить.

Пожалуйста подготовьте снова полный и подробный набор данных, чтобы воспроизвести проблему. В теме 49 сообщений за 2 месяца, это очень сложно осознать.

Я более-менее представляю, как это пофиксить (сразу под node.js) - выдалась свободная ночь, качнул, поставил, кое-что из скриптов уже работает. :slight_smile:
Но придется переделать логику общения с устройствами - источник багов как раз в ней.
Сделаю - покажу.

Нда. Ослепительной примитивности откровение посетило меня в процессе примерки шкуры программиста: мое хроническое недоумение на тему глюков и многочисленные гневные посты можно разбить о единственный немудрящий довод: оно и не должно работать, юзай недокументированные фичи на свой страх и риск. Жаль, что уважаемые авторы, с присущим им тактом, не отважились сразу сунуть меня носом в эту очевидность. Я приношу авторам искренние извинения за войну с ветряными мельницами. Не со зла, честно.

Обсуждаемый движок никогда не предназначался для сетевой работы, вот и всё. Локально он ведет себя практически предсказуемо, а по сети это не получится архитектурно.

Посидел пару суток, сделал свой эрзац wb-rulez, пока на голом node, зверюшка получилась нешустрая, однако работает. Ее потихоньку и доведу до ума.

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.