Добрый день.
Занимаюсь разработкой стороннего софта для контроллеров wirenboard и счетчиков WB-MAP. Один блок софта занимается сбором mqtt топиков, второй - работает с wb-map счетчиками напрямую по modbus. Для работы по modbus необходимо отключать wb-mqtt-serial драйвер. Суть проблемы: как я заметил, при отключении wb-mqtt-serial топики устройств затираются (почти во все топики публикуется null), из-за чего ломается логика работы с топиками.
Подскажите пожалуйста, можно ли принудительно задать retain избранным топикам через шаблон или файл конфигурации, чтобы их можно было вычитать даже при остановленном wb-mqtt-serial? Можно ли отменить публикацию null в топики устройств?
Здравствуйте.
Если правильно понял контекст, то вижу пару путей решения вашей задачи.
С помощью движка правил wb-rules создать виртуальное устройство, которое копирует нужные значения в свои топики и помечает retain true.
Примерно будет выглядеть так:
defineRule(“map_cache_voltage”, {
whenChanged: “wb-map/Voltage”,
then: function (newValue) {
publish(“/mycache/wb-map/Voltage”, newValue, 1, true) // qos1 + retain
}
})
Далее уже вычитывать /mycache/…, топики сохранятся, даже если драйвер затрет свои.
Посмотрите примеры правил там есть интересные варианты.
Другой способ, использовать утилиту modbus_client_rpc.
Синтаксис идентичен modbus_client , но работает через драйвер wb-mqtt-serial, поэтому можно читать и писать регистры устройств не останавливая драйвер.
Нет. Логику работы при завершении нельзя изменить.
Но зачем для работы с Modbus останавливать драйвер? Достаточно использовать его RPC метод.