Здравствуйте!
При создании “логики защиты” столкнулся с очень не приятной проблемой.
Имеется модуль WBIO-DI-HVD-16 - который следит за состояниями трех концевых выключателей.
На данный момент пишем свой клиент для Windows, на Python с использованием библиотеки paho-mqtt. Сценарий такой: программа (клиент) при успешном подключении к MQTT брокеру подписывается на 3 топика, узнает текущие значения “концевиков” и в зависимости от этого как - то реагирует (в нашем случае если хотя бы один концевик разомкнут - показывает предупреждение). Собственно далее выяснилось что MQTT просто так никому ничего не расскажет, если только не установлено retain значение. Попробовали развернуть локальный брокер (без контроллера) установили retain значения в топики соответствующие реальным топикам на контроллере - работает штатно, при подписки брокер прислал последнее установленное значение. Далее подключаемся к контроллеру - при подписке ожидаемо тишина. Реакция только если вручную “переключить” все контролируемые топики.
Собственно вопрос ? Можно ли как - то активировать флаг retain? Чтоб при подписке наше ПО могло получать текущее значение топиков?
Тогда не понятно почему такое поведение. По логам клиент (программа на ПК) - успешно подключается к брокеру контроллера и успешно выполняет подписку на нужные топики. Но на это все. Брокер контроллера не возвращает текущее значение топика (как это было бы при retain), при этом если вручную “переключить” нужные топики (состояние true/false) начинают прилетать сообщения об изменении состояния топика. Может при подписке на топик нужно добавить какой либо флаг или параметр?
В общем, не знаю в чем была загвоздка.
Попробовал подписку через mosquitto_sub, в консоли получил текущее значение топика.
Пробую подписку через свой софт - тишина. Полез в исходный код, проверил имена топиков, проверил код метода подписки - все верно. Смотрю в логи - подписка проходит успешно, значения с топиков не идут. Переустановил библиотеку paho-mqtt, на контроллере (8.4) накатил крайний testing релиз, подключаюсь вновь и о чудо! В логах получены сообщения о текущих значениях топиков!
В общем что - то одно точно помогло)
Пока понаблюдаю за поведением.
UPD: Подтверждаю, дело все таки в библиотеке. Попробовали воспроизвести на другом ПК, самая актуальная версия paho-mqtt - 2.1.0 , почему - то работает с таким косяком. Откатились к версии 1.6 - все ок.
Может кому в будущем инфа будет полезна)
Изначально при установке через pip загружается файл с названием:
paho_mqtt-2.1.0-py3-none-any.whl
С ним, у меня почему - то при подписке на топики текущие значения не прилетают.
Командой pip install “paho-mqtt<2.0.0”, скачивается вот такой файл:
paho_mqtt-1.6.1-py3-none-any.whl, в таком случае корректно прилетают текущие значения топиков.
Не совсем понял, я веду разработку на ОС WIndows, в редакторе VS Code