123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #include "Trans2Mqtt.h"
- #include <QDebug>
- #include <QJsonDocument>
- #include <QJsonArray>
- #include <QJsonObject>
- 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;
- }
- }
|