ytmqttpub.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #include "ytmqttpub.h"
  2. #include "../AGBoxDog/boxshm.h"
  3. YTMqttPub::YTMqttPub(QObject *parent) : QThread(parent)
  4. {
  5. keep = false;
  6. mqttDataList.clear();
  7. }
  8. void YTMqttPub::run()
  9. {
  10. keep = true;
  11. while (keep) {
  12. if(mqttDataList.length()>0){
  13. while (mqttDataList.length()>0) {
  14. MqttData md = mqttDataList.first();
  15. QString topic = md.topic;
  16. QByteArray data = md.data;
  17. QJsonParseError parseErr;
  18. QJsonDocument doc = QJsonDocument::fromJson(data,&parseErr);
  19. printf("yts device parseErr.error %d\n",parseErr.error);
  20. if(parseErr.error==QJsonParseError::NoError){
  21. QString nodeInfo = "";
  22. QString deviceId = "";
  23. QString productCode = "";
  24. QString deviceType = "";
  25. QJsonObject obj_doc = doc.object();
  26. int ts = obj_doc.value("ts").toInt();
  27. QDateTime datatime = QDateTime::fromTime_t(ts);
  28. int minute = datatime.time().minute();
  29. QJsonValue dev_value = obj_doc.value("devs");
  30. if(dev_value.isArray() && (minute == 00)){
  31. int ts = QDateTime::fromString(datatime.toString("yyyy-MM-dd HH")+":00:00","yyyy-MM-dd HH:mm:ss").toTime_t();
  32. QJsonArray list_array = dev_value.toArray();
  33. for(int i=0;i<list_array.size();i++){
  34. QJsonObject obj_dev = list_array.at(i).toObject();
  35. QJsonValue d_value = obj_dev.value("d");
  36. if(d_value.isArray()){
  37. QJsonArray d_array = d_value.toArray();
  38. if(d_array.size() > 0){
  39. QString deviceCode = d_array.at(0).toObject().value("m").toString().mid(0,6);
  40. printf("yts deviceCode: %s\n",deviceCode.toUtf8().data());
  41. for(int j=0;j<1024;j++){
  42. if(agBoxShm->device[j].Enabled == 0x01){
  43. if(deviceCode.compare(QString(agBoxShm->device[j].device_code))==0){
  44. deviceId = QString(agBoxShm->device[j].device_id);
  45. productCode = QString(agBoxShm->device[j].product_code);
  46. deviceType = QString::number(agBoxShm->device[j].device_type);
  47. for(int k=0;k<d_array.size();k++){
  48. QJsonObject obj_d = d_array.at(k).toObject();
  49. QString name = obj_d.value("m").toString();
  50. QList<QString> nameList = name.split("_");
  51. int value = obj_d.value("v").toInt();
  52. if(QString(nameList.at(2)).compare("CO2")==0){
  53. nodeInfo.append(QString("\"co2\":%1,").arg(value));
  54. }else if(QString(nameList.at(2)).compare("FLDW")==0){
  55. nodeInfo.append(QString("\"fldw\":%1,").arg(value));
  56. }else if(QString(nameList.at(2)).compare("PM2")==0){
  57. nodeInfo.append(QString("\"pm2_5\":%1,").arg(value));
  58. }else if(QString(nameList.at(2)).compare("SNSD")==0){
  59. nodeInfo.append(QString("\"sd\":%1,").arg(value));
  60. }else if(QString(nameList.at(2)).compare("SNWD")==0){
  61. nodeInfo.append(QString("\"wd\":%1,").arg(value));
  62. }else if(QString(nameList.at(2)).compare("VOC")==0){
  63. nodeInfo.append(QString("\"voc\":%1,").arg(value));
  64. }else if(QString(nameList.at(2)).compare("YXMS")==0){
  65. nodeInfo.append(QString("\"yxms\":%1,").arg(value));
  66. }else if(QString(nameList.at(2)).compare("YXZT")==0){
  67. nodeInfo.append(QString("\"yxzt\":%1,").arg(value));
  68. }
  69. }
  70. nodeInfo = nodeInfo.left(nodeInfo.length()-1);
  71. emit mqttData(QString("{\"device_id\":\"%1\",\"device_code\":\"%2\",\"product_id\":\"%3\",\"timestamp\":%4,\"tags\":{\"conn_type\":\"\",\"type\":\"\"},\"metrics\":{%5},\"device_type\":\"%6-xf\"}")
  72. .arg(deviceId).arg(deviceCode).arg(productCode).arg(ts).arg(nodeInfo).arg(deviceType));
  73. break;
  74. }
  75. }
  76. }
  77. }
  78. }
  79. }
  80. }
  81. }
  82. mqttDataList.removeFirst();
  83. usleep(1000);
  84. }
  85. }
  86. usleep(50000);
  87. }
  88. }
  89. void YTMqttPub::stop()
  90. {
  91. keep = false;
  92. }
  93. void YTMqttPub::devMessage(MqttData dev)
  94. {
  95. mqttDataList.append(dev);
  96. }