UniSet 2.32.1
Реализация MQTT издателя

Общее описание MQTTPublisher

MQTT - это..

Данная реализация построена на использованиие библиотеки mosquitto. Издатель публикует события по каждому изменению датчика в указанном топике.

Настройка MQTTPublisher

Топик для публикации событий имеет вид: TOPIC

  • TOPIC - заданный topic.

Топик можно задать при помощи аргумента комадной строки –prefix-mqtt-topic или в настроечной секции topic="..". По умолчанию берётся ROOTPROJECT/sensors/sensorname, где ROOTPROJECT - это название корневой uniset-секции заданное в configure.xml (RootSection="..")

События по каким датчикам "публиковать" можно задавать при помощи filter-field и filter-value параметров. –prefix-filter-field - задаёт фильтрующее поле для датчиков –prefix-filter-value - задаётзначение фильтрующего поля для датчиков. Необязательнй параметр.

Либо можно указать в настроечной секции: filterField=".." filterValue=".."

По умолчанию загружаются и публикуются ВСЕ датчики из секции <sensors> конфигурационного файла.

Сервер для публикации указывается параметрами: –prefix-mqtt-host ip|hostname - По умолчаню "localhost" –prefix-mqtt-port num - По умолчанию: 1883 (mosquitto)

Но можно задать и в настроечной секции: mqttHost=".." и mqttPort=".."

Помимо этого можно задать время проверки соединения, параметром –prefix-mqtt-keepalive sec - По умолчанию: 60 или и в настроечной секции: mqttKeepAlive=".."

Для запуска издателя, неоходимо наличие в configure.xml секции: <ObjectName name="ObjectName" ...параметры">. \xrefitem todo 41. @section sec_MQTT_Text Генерирование текстовых сообщений Имеется возможность сопоставлять значения датчиков текстовым сообщениям, посылаемым на сервер. Для этого необходимо в настроечной секции для датчика создать подсекцию <mqtt>. Пример: @code <item id="10" name="MySensor1" filter_field="filter_value"...> <mqtt subtopic="myevent"> <msg value="12" text="My text for value v"/> <msg value="13" text="My text for value v"/> <msg value="14" text="My text for value v"/> <range min="10" max="20" text="My text for range r. n = v"/> <mqtt> ... </item> \endcode - \b range - задаёт диапазон включающий [min,max] - \b subtopic - задаёт подраздел в корневом топике (см. topicsensors). Т.е. полный топик для публикации текстовых сообщений будет иметь вид ROOTPROJECT/topicsensors/sensorname/textevent или если задано поле \subtopic то события будут опубликованы в ROOTPROJECT/topicsensors/subtopic При этом в тексте можно применять следующие "подстановки": - \b %v - текущее значение (value) - \b %n - name - \b %t - textname - \b %i - ID - \b %r - заданный диапазон (range). Заменяется на "[min:max]" - \b %rmin - минимальное значение диапазона (range min) - \b %rmax - максимальное значение диапазона (range max) \note Если заданные "одиночные" значения совпадают с диапазоном, то будет сгенерировано несколько сообщений. Т.е. диапазоны могут пересекаться.