Заметил одну особенность. Если мы хотим выполнить ряд комманд, например выключить и затем включить реле (нажать кнопку), отправить сиглал ИК под номером 1, а затем под номером 2, первая команда может не выполниться, или вторая может выполниться слишком быстро без должной задержки.
Это происходит при загрузке контроллера или при systemctl start wb-rules wb-mqtt-serial.
wb-rules грузится быстрее чем wb-mqtt-serial, и когда wb-rules начинает управлять оборудованием, wb-mqtt-serial еще не готово.
Этому багу больше 2 лет. Я предлагал запускать демоны в определенном порядке для исключения пердимоноклей с неготовностью, но в официальном образе пока грусть. Сделал свой скрипт, чего и Вам желаю.
С последовательным запуском скриптов в рулях пришлось поприседать куда серьезней, но тоже распедалил, чего желаю и Вам. ))
Недавно оптимизировал старт своего кода скриптов wb-rules и он стал быстрее с̶к̶о̶р̶о̶с̶т̶и̶ ̶с̶в̶е̶т̶а запуска wb-mqtt-serial. Придется таймаут ставить.
Здравствуйте!
Также, думаю, можно при запуске правила проверять, запущен ли сервис wb-mqtt-serial. Если нет, то ждать некоторое время и снова проверять. Если запущен - то выполнять требуемые действия.
Да, некоторое время сервис будет создавать топики и инициализировать устройства. В таком случае можно добавить таймаут на запуск сервиса после получения статуса о его готовности.
Да, сейчас так и сделано, но не понятно какой именно таймаут нужно ставить, а при настройке оборудования лишнюю минуту терять не хочется. Тем более, что часто делается много попыток и минута таймаута выливается в дополнительные пол часа.
Я давно предлагаю авторам разгрести эйфелеву башню (исторических?) костылей, но их представления о работоспособном продукте принципиально отличаются от моих.
Если серьезно, serial не единственный демон, который нужно синхронить с правилами. Проблему эту, как и много других, надо решать архитектурно.
Добрый день!
Подниму тему и опишу проблему еще раз.
При загрузке контроллера или при перезапуске сервисов wb-mqtt-serial и wb-rules, wb-rules пытается выполнять команды по cron или некоторые регуляции. Это может произойти раньше, чем wb-mqtt-serial создало все топики устройств (у нас отключено сохранение в БД состояния mosquitto).
Из-за этого получаю ошибку:
wb-rules[9771]: ERROR: failed to SetValue for unexisting control wb-mir_v2_224/Play from ROM2: true
Это может привести к неправильной последовательности или к пропуску части команд.
Как проверить, что определенный control уже создан и wb-mqtt-serial готово к работе?
У меня есть мысли, что теперь, когда wb-mqtt-serial чистит топики при перезапуске, есть возможность проверить те или иные признаки, например мета информацию устройства, чтобы определить, можно ли начинать управление или нет.
Здравствуйте! Какого-то штатного механизма нет. Думаю, что можно проверять с помощью trackMqtt наличие значения в топике устройства. Если оно есть, то выполнять правило.