Commit 3b417c34 authored by Pavel Vainerman's avatar Pavel Vainerman

(MQTTPulisher): сделал возможность задавать не просто название ветки

где будут публиковаться датчики.. а полность задавать topic.
parent 0f8b9eb1
...@@ -22,7 +22,17 @@ MQTTPublisher::MQTTPublisher(UniSetTypes::ObjectId objId, xmlNode* cnode, UniSet ...@@ -22,7 +22,17 @@ MQTTPublisher::MQTTPublisher(UniSetTypes::ObjectId objId, xmlNode* cnode, UniSet
UniXML::iterator it(cnode); UniXML::iterator it(cnode);
topicsensors = conf->getRootSection() + "/" + conf->getArg2Param("--" + argprefix + "mqtt-topic-sensors", it.getProp("topicsensors"), "sensors"); std::string t = conf->getArg2Param("--" + argprefix + "mqtt-topic", it.getProp("topic"), "");
{
ostringstream s;
if( t.empty() )
s << conf->getRootSection() << "/sensors";
else
s << t;
topic = s.str();
}
string ff = conf->getArg2Param("--" + argprefix + "filter-field", it.getProp("filterField"), ""); string ff = conf->getArg2Param("--" + argprefix + "filter-field", it.getProp("filterField"), "");
string fv = conf->getArg2Param("--" + argprefix + "filter-value", it.getProp("filterValue"), ""); string fv = conf->getArg2Param("--" + argprefix + "filter-value", it.getProp("filterValue"), "");
...@@ -68,7 +78,7 @@ MQTTPublisher::MQTTPublisher(UniSetTypes::ObjectId objId, xmlNode* cnode, UniSet ...@@ -68,7 +78,7 @@ MQTTPublisher::MQTTPublisher(UniSetTypes::ObjectId objId, xmlNode* cnode, UniSet
} }
pubname.str(""); pubname.str("");
pubname << topicsensors << "/" << sname; pubname << topic << "/" << sname;
MQTTInfo m(sid, pubname.str()); MQTTInfo m(sid, pubname.str());
publist.emplace(sid, std::move(m) ); publist.emplace(sid, std::move(m) );
...@@ -84,7 +94,7 @@ MQTTPublisher::MQTTPublisher(UniSetTypes::ObjectId objId, xmlNode* cnode, UniSet ...@@ -84,7 +94,7 @@ MQTTPublisher::MQTTPublisher(UniSetTypes::ObjectId objId, xmlNode* cnode, UniSet
if( !i.find("mqtt") ) if( !i.find("mqtt") )
continue; continue;
MQTTTextInfo mi(topicsensors, sit, i); MQTTTextInfo mi(topic, sit, i);
textpublist.emplace(sid, std::move(mi) ); textpublist.emplace(sid, std::move(mi) );
} }
...@@ -154,8 +164,7 @@ void MQTTPublisher::help_print( int argc, const char* const* argv ) ...@@ -154,8 +164,7 @@ void MQTTPublisher::help_print( int argc, const char* const* argv )
cout << "--prefix-filter-value - Значение фильтра для загрузки списка датчиков." << endl; cout << "--prefix-filter-value - Значение фильтра для загрузки списка датчиков." << endl;
cout << endl; cout << endl;
cout << " MQTT: " << endl; cout << " MQTT: " << endl;
cout << "--prefix-mqtt-topic-sensors name - Name for topic. Default: 'sensors'" << endl; cout << "--prefix-mqtt-topic name - Name for topic. Default: ROOT_NAME_PRROJECT/sensors/sensorname'" << 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-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-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-keepalive val - keepalive for connection to MQTT Broker (server). Default: 60" << endl;
......
...@@ -26,11 +26,12 @@ ...@@ -26,11 +26,12 @@
\section sec_MQTT_Conf Настройка MQTTPublisher \section sec_MQTT_Conf Настройка MQTTPublisher
Топик для публикации событий имеет вид: ROOTPROJECT/topicsensors/sensorname, где Топик для публикации событий имеет вид: TOPIC
- \b ROOTPROJECT - это название корневой uniset-секции заданное в configure.xml (RootSection="..") - \b TOPIC - заданный topic.
- \b topicsensors - это название секции для публикации в MQTT-сервере (брокере).
Название можно задать при помощи аргумента конмадной строки --prefix-mqtt-topicsensors Топик можно задать при помощи аргумента комадной строки --prefix-mqtt-topic или в настроечной секции topic="..".
или в настроечной секции topicsensors="..". По умолчанию topicsensors='sensors'. По умолчанию берётся ROOTPROJECT/sensors/sensorname, где
ROOTPROJECT - это название корневой uniset-секции заданное в configure.xml (RootSection="..")
События по каким датчикам "публиковать" можно задавать при помощи filter-field и filter-value параметров. События по каким датчикам "публиковать" можно задавать при помощи filter-field и filter-value параметров.
--prefix-filter-field - задаёт фильтрующее поле для датчиков --prefix-filter-field - задаёт фильтрующее поле для датчиков
...@@ -160,7 +161,7 @@ class MQTTPublisher: ...@@ -160,7 +161,7 @@ class MQTTPublisher:
private: private:
std::string prefix; std::string prefix;
std::string topicsensors; // "топик" для публикации датчиков std::string topic; // "топик" для публикации датчиков
bool connectOK = { false }; bool connectOK = { false };
std::string host = { "localhost" }; std::string host = { "localhost" };
int port = { 1883 }; int port = { 1883 };
......
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