Commit bb263d34 authored by Pavel Vainerman's avatar Pavel Vainerman

(MQTTPublisher): накидал небольшую документацию,

сделал protected наследование от mosqpp::mosquittopp (т.к. цель MQTTPublisher-а работа шлюзом для событий uniset-системы, а не самостоятельным mqtt-publisher-ом).
parent dd3046b2
......@@ -9,8 +9,8 @@ using namespace UniSetExtensions;
// -----------------------------------------------------------------------------
MQTTPublisher::MQTTPublisher(UniSetTypes::ObjectId objId, xmlNode* cnode, UniSetTypes::ObjectId shmId, const std::shared_ptr<SharedMemory>& ic,
const string& prefix ):
UObject_SK(objId, cnode, string(prefix + "-")),
mosquittopp(NULL),
UObject_SK(objId, cnode, string(prefix + "-")),
prefix(prefix)
{
auto conf = uniset_conf();
......@@ -22,7 +22,7 @@ MQTTPublisher::MQTTPublisher(UniSetTypes::ObjectId objId, xmlNode* cnode, UniSet
UniXML::iterator it(cnode);
topicsensors = conf->getRootSection() + "/" + conf->getArg2Param("--" + prefix + "topic-sensors", it.getProp("topicsensors"), "sensors");
topicsensors = conf->getRootSection() + "/" + conf->getArg2Param("--" + argprefix + "mqtt-topic-sensors", it.getProp("topicsensors"), "sensors");
string ff = conf->getArg2Param("--" + argprefix + "filter-field", it.getProp("filterField"), "");
string fv = conf->getArg2Param("--" + argprefix + "filter-value", it.getProp("filterValue"), "");
......@@ -84,8 +84,8 @@ MQTTPublisher::MQTTPublisher(UniSetTypes::ObjectId objId, xmlNode* cnode, UniSet
// Работа с MQTT
mosqpp::lib_init();
host = conf->getArg2Param("--" + argprefix + "mqtt-host", it.getProp("mqttHost"), "localhost");
port = conf->getArgPInt("--" + argprefix + "-mqtt-port", it.getProp("mqttPort"), 1883);
keepalive = conf->getArgPInt("--" + argprefix + "-mqtt-keepalive", it.getProp("mqttKeepAlive"), 60);
port = conf->getArgPInt("--" + argprefix + "mqtt-port", it.getProp("mqttPort"), 1883);
keepalive = conf->getArgPInt("--" + argprefix + "mqtt-keepalive", it.getProp("mqttKeepAlive"), 60);
// см. sysCommad()
// connect_async(host.c_str(),port,keepalive);
......@@ -138,9 +138,11 @@ void MQTTPublisher::help_print( int argc, const char* const* argv )
cout << "--prefix-filter-value - Значение фильтра для загрузки списка датчиков." << endl;
cout << endl;
cout << " MQTT: " << endl;
cout << "--prefix-mqtt-host host - host(ip) MQTT Broker (server). Default: localhost" << endl;
cout << "--prefix-mqtt-port port - port for MQTT Broker (server). Default: 1883" << endl;
cout << "--prefix-mqtt-keepalive val - keepalive for connection to MQTT Broker (server). Default: 60" << endl;
cout << "--prefix-mqtt-topic-sensors name - Name for topic. Default: 'sensors'" << endl;
cout << " Result topic: ROOT_NAME_PRROJECT/topicsensors/sensorname'" << endl;
cout << "--prefix-mqtt-host host - host(ip) MQTT Broker (server). Default: localhost" << endl;
cout << "--prefix-mqtt-port port - port for MQTT Broker (server). Default: 1883" << endl;
cout << "--prefix-mqtt-keepalive val - keepalive for connection to MQTT Broker (server). Default: 60" << endl;
cout << endl;
cout << " Logs: " << endl;
cout << "--prefix-log-... - log control" << endl;
......
......@@ -21,14 +21,41 @@
MQTT - это..
Данная реализация построена на использованиие билиотеки mosquitto.
Издатель публикует события по каждому изменению датчика в указанном топике.
\section sec_MQTT_Conf Настройка MQTTPublisher
Топик для публикации событий имеет вид: ROOTPROJECT/topicsensors/sensorname, где
- \b ROOTPROJECT - это название корневой uniset-секции заданное в configure.xml (RootSection="..")
- \b topicsensors - это название секции для публикации в MQTT-сервере (брокере).
Название можно задать при помощи аргумента конмадной строки --prefix-mqtt-topicsensors
или в настроечной секции topicsensors="..". По умолчанию topicsensors='sensors'.
Какие датчики "публиковать" можно задавать при помощи 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" ...параметры">.
\todo Доделать контрольный таймер (контроль наличия соединения с сервером)
*/
class MQTTPublisher:
public UObject_SK,
public mosqpp::mosquittopp
protected mosqpp::mosquittopp,
public UObject_SK
{
public:
MQTTPublisher( UniSetTypes::ObjectId objId, xmlNode* cnode, UniSetTypes::ObjectId shmID, const std::shared_ptr<SharedMemory>& ic = nullptr,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment