Trans2Mqtt.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #include "Trans2Mqtt.h"
  2. #include <QDebug>
  3. #include <QJsonDocument>
  4. #include <QJsonArray>
  5. #include <QJsonObject>
  6. Trans2Mqtt::Trans2Mqtt() {
  7. mqtt = new MQTTClient();
  8. //tdclient->start();
  9. }
  10. Trans2Mqtt::~Trans2Mqtt(){
  11. delete mqtt;
  12. qDebug() << __FILE__ << __FUNCTION__<< __LINE__;
  13. }
  14. void Trans2Mqtt::Run(const ConsumerInfo& ci)
  15. {
  16. QString host = "192.168.9.6";
  17. quint16 port = 1883;
  18. QString usr = "admin";
  19. QString passwd = "N6pNXbZjspDRqNGnxMmc";
  20. QString clientID = "Trans2mqtt";
  21. QJsonParseError jsonParseError;
  22. QJsonDocument jsonDocument(QJsonDocument::fromJson(QString::fromStdString(ci.Settings.c_str()).toUtf8(), &jsonParseError));
  23. if(QJsonParseError::NoError != jsonParseError.error)
  24. {
  25. //LOGERROR("parse json file {} error", fullpath.toStdString().c_str());
  26. qDebug() << "ERROR:" << __FILE__ << __FUNCTION__<< __LINE__;
  27. }
  28. QJsonArray ja = jsonDocument.array();
  29. foreach (auto var, ja) {
  30. host = var["host"].toString();
  31. usr = var["usr"].toString();
  32. port = var["port"].toVariant().toInt();
  33. passwd = var["passwd"].toString();
  34. }
  35. clientID = QString("%1@%2").arg(usr, passwd);
  36. dataItems = ci.dataItems;
  37. topicsMap = ci.topicsMap;
  38. foreach (auto var, ci.dataItems) {
  39. dataMap.insert({var, {}});
  40. }
  41. mqtt->connect2Host(host, port, usr, passwd, clientID);
  42. //start();
  43. }
  44. void Trans2Mqtt::OnData(const QString& user, const QString& key, const QVariant& val)
  45. {
  46. qDebug() << __FILE__ << __FUNCTION__<< __LINE__ << user << key << val;
  47. QString topic = key;
  48. // QByteArray payload = "data";
  49. // QByteArray byteArray(val.c_str(), val.length());
  50. QJsonParseError err;
  51. QJsonDocument jsonDoc(QJsonDocument::fromJson(val.toString().toLatin1(),&err));
  52. QJsonObject jsonObject = jsonDoc.object();
  53. // QStringList keys = jsonObject.keys();
  54. // auto itTopic = topicsMap.find(topic.toStdString());
  55. auto range = topicsMap.equal_range(key.toStdString());
  56. for (auto it = range.first; it != range.second; ++it) {
  57. // std::cout << it->first << ' ' << it->second << '\n';
  58. QJsonObject val = jsonObject[QString::fromStdString(it->second)].toObject();
  59. QString dataName = QString("%1.%2").arg(key, it->second.c_str());
  60. dataMap[dataName.toStdString()] = val;
  61. int type = val["type"].toInt();
  62. switch (type) {
  63. case QMetaType::Type::ULongLong:
  64. break;
  65. case QMetaType::Type::QString:
  66. break;
  67. case QMetaType::Type::Double:
  68. break;
  69. case QMetaType::Type::Float:
  70. break;
  71. case QMetaType::Type::Int:
  72. break;
  73. case QMetaType::Type::LongLong:
  74. break;
  75. default:
  76. break;
  77. }
  78. }
  79. mqtt->publish(topic, val.toString().toLatin1());
  80. }
  81. void Trans2Mqtt::setLoader(QLibrary *)
  82. {
  83. }
  84. void Trans2Mqtt::run()
  85. {
  86. /*while(!isInterruptionRequested()){
  87. qDebug() << __FILE__ << __FUNCTION__;
  88. QThread::msleep(1000);
  89. }*/
  90. }
  91. Client* instance()
  92. {
  93. return new Trans2Mqtt();
  94. }
  95. void destroy(Client* pInstance)
  96. {
  97. if( pInstance )
  98. {
  99. delete pInstance;
  100. }
  101. }