Trans2Mqtt.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. QJsonObject jo = jsonDocument.object();
  29. // QJsonArray ja = jsonDocument.array();
  30. // foreach (auto var, ja) {
  31. host = jo["host"].toString();
  32. usr = jo["usr"].toString();
  33. port = jo["port"].toVariant().toInt();
  34. passwd = jo["passwd"].toString();
  35. // }
  36. clientID = QString("%1@%2").arg(usr, passwd);
  37. dataItems = ci.dataItems;
  38. topicsMap = ci.topicsMap;
  39. foreach (auto var, ci.dataItems) {
  40. dataMap.insert({var, {}});
  41. }
  42. mqtt->connect2Host(host, port, usr, passwd, clientID);
  43. //start();
  44. }
  45. void Trans2Mqtt::OnData(const QString& user, const QString& key, const QVariant& val)
  46. {
  47. qDebug() << __FILE__ << __FUNCTION__<< __LINE__ << user << key << val;
  48. QString topic = key;
  49. // QByteArray payload = "data";
  50. // QByteArray byteArray(val.c_str(), val.length());
  51. QJsonParseError err;
  52. QJsonDocument jsonDoc(QJsonDocument::fromJson(val.toString().toLatin1(),&err));
  53. QJsonObject jsonObject = jsonDoc.object();
  54. // QStringList keys = jsonObject.keys();
  55. // auto itTopic = topicsMap.find(topic.toStdString());
  56. auto range = topicsMap.equal_range(key.toStdString());
  57. for (auto it = range.first; it != range.second; ++it) {
  58. // std::cout << it->first << ' ' << it->second << '\n';
  59. QJsonObject val = jsonObject[QString::fromStdString(it->second)].toObject();
  60. QString dataName = QString("%1.%2").arg(key, it->second.c_str());
  61. dataMap[dataName.toStdString()] = val;
  62. int type = val["type"].toInt();
  63. switch (type) {
  64. case QMetaType::Type::ULongLong:
  65. break;
  66. case QMetaType::Type::QString:
  67. break;
  68. case QMetaType::Type::Double:
  69. break;
  70. case QMetaType::Type::Float:
  71. break;
  72. case QMetaType::Type::Int:
  73. break;
  74. case QMetaType::Type::LongLong:
  75. break;
  76. default:
  77. break;
  78. }
  79. }
  80. mqtt->publish(topic, val.toString().toLatin1());
  81. }
  82. void Trans2Mqtt::setLoader(QLibrary *)
  83. {
  84. }
  85. void Trans2Mqtt::run()
  86. {
  87. /*while(!isInterruptionRequested()){
  88. qDebug() << __FILE__ << __FUNCTION__;
  89. QThread::msleep(1000);
  90. }*/
  91. }
  92. Client* instance()
  93. {
  94. return new Trans2Mqtt();
  95. }
  96. void destroy(Client* pInstance)
  97. {
  98. if( pInstance )
  99. {
  100. delete pInstance;
  101. }
  102. }