Добрый день! Может кто подскажет?
Есть некий модуль управления кондиционером, висит на 485 шине, работает по модбасу. Есть набор принадлежащих ему топиков на брокере mqtt. Возьмем для примера режим работы, топик /device/module1/controls/mode. Есть UI (iridium) который привязан к нему. Управляющая команда пишет в /device/module1/controls/mode/on
И вот я такой беру микроконтроллер с вайфаем (esp8266) с намерением заменить им проводной модуль. Он умеет управлять кондишеном и читать/писать топики на WB, (они подключены к одному роутеру). Я делаю следующее:
- Отключаю питание на modbus модуле, делаю ему enabled=false в конфигурации mqtt-serial.
- В прошивке esp8266 устанавливаю client_id = module1 и прописываю для всех параметров те же топики, которые использовались в модуле.
Подробный алгоритм программы на примере сигнала “режим работы”:
- В функции чтения настроек кондиционера я беру значение режима работы и публикую его в топик /device/module1/controls/mode, чтобы он отобразился в интерфейсе
- Подписавшись на топик /device/module1/controls/mode/on, я получаю значение режима, которое задал пользователь и записываю его в кондиционер. Потом происходит чтение настроек, которое опубликует с топике /device/module1/controls/mode новое значение режима (см. п. 1)
По плану интерфейс должен был не заметить подмены и продолжать работать. По факту он показывал потерю связи и ничего не показывал. управляющие команды проходили, но не всегда и система в целом вела себя неадекватно. Полный провал.
Где я был не прав? неправильно понял концепцию чтение: “топик”, запись: “топик/on”? Нельзя захватывать чужие топики? Может тот модуль надо было не дизейблить, а удалить совсем? В общем, буду рад любым подсказкам