#include "Trans2Mqtt.h" #include #include #include #include Trans2Mqtt::Trans2Mqtt() { mqtt = new MQTTClient(); //tdclient->start(); } Trans2Mqtt::~Trans2Mqtt(){ delete mqtt; qDebug() << __FILE__ << __FUNCTION__<< __LINE__; } void Trans2Mqtt::Run(const ConsumerInfo& ci) { QString host = "192.168.9.6"; quint16 port = 1883; QString usr = "admin"; QString passwd = "N6pNXbZjspDRqNGnxMmc"; QString clientID = "Trans2mqtt"; QJsonParseError jsonParseError; QJsonDocument jsonDocument(QJsonDocument::fromJson(QString::fromStdString(ci.Settings.c_str()).toUtf8(), &jsonParseError)); if(QJsonParseError::NoError != jsonParseError.error) { //LOGERROR("parse json file {} error", fullpath.toStdString().c_str()); qDebug() << "ERROR:" << __FILE__ << __FUNCTION__<< __LINE__; } QJsonObject jo = jsonDocument.object(); // QJsonArray ja = jsonDocument.array(); // foreach (auto var, ja) { host = jo["host"].toString(); usr = jo["usr"].toString(); port = jo["port"].toVariant().toInt(); passwd = jo["passwd"].toString(); // } clientID = QString("%1@%2").arg(usr, passwd); dataItems = ci.dataItems; topicsMap = ci.topicsMap; foreach (auto var, ci.dataItems) { dataMap.insert({var, {}}); } mqtt->connect2Host(host, port, usr, passwd, clientID); //start(); } void Trans2Mqtt::OnData(const QString& user, const QString& key, const QVariant& val) { qDebug() << __FILE__ << __FUNCTION__<< __LINE__ << user << key << val; QString topic = key; // QByteArray payload = "data"; // QByteArray byteArray(val.c_str(), val.length()); QJsonParseError err; QJsonDocument jsonDoc(QJsonDocument::fromJson(val.toString().toLatin1(),&err)); QJsonObject jsonObject = jsonDoc.object(); // QStringList keys = jsonObject.keys(); // auto itTopic = topicsMap.find(topic.toStdString()); auto range = topicsMap.equal_range(key.toStdString()); for (auto it = range.first; it != range.second; ++it) { // std::cout << it->first << ' ' << it->second << '\n'; QJsonObject val = jsonObject[QString::fromStdString(it->second)].toObject(); QString dataName = QString("%1.%2").arg(key, it->second.c_str()); dataMap[dataName.toStdString()] = val; int type = val["type"].toInt(); switch (type) { case QMetaType::Type::ULongLong: break; case QMetaType::Type::QString: break; case QMetaType::Type::Double: break; case QMetaType::Type::Float: break; case QMetaType::Type::Int: break; case QMetaType::Type::LongLong: break; default: break; } } mqtt->publish(topic, val.toString().toLatin1()); } void Trans2Mqtt::setLoader(QLibrary *) { } void Trans2Mqtt::run() { /*while(!isInterruptionRequested()){ qDebug() << __FILE__ << __FUNCTION__; QThread::msleep(1000); }*/ } Client* instance() { return new Trans2Mqtt(); } void destroy(Client* pInstance) { if( pInstance ) { delete pInstance; } }