elcommthreadpub.cpp 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. #include "elcommthreadpub.h"
  2. ELCommThreadPub::ELCommThreadPub(QObject *parent) : QThread(parent)
  3. {
  4. mqttIdx=1;
  5. client = new QMQTT::Client(QHostAddress("123.60.11.86"), 1883, this);
  6. client->setUsername("admin");
  7. client->setPassword("a10vE0s73g5");
  8. connect(client,&QMQTT::Client::connected,this,&ELCommThreadPub::onConnected);
  9. client->connectToHost();
  10. }
  11. ELCommThreadPub::~ELCommThreadPub()
  12. {
  13. }
  14. void ELCommThreadPub::run()
  15. {
  16. }
  17. void ELCommThreadPub::dataPub(QString devicename,QString method,QString faultrecordtype,QString starttime,QString endtime)
  18. {
  19. if(client->connectionState()==QMQTT::STATE_INIT || client->connectionState()==QMQTT::STATE_DISCONNECTED)
  20. {
  21. client->connectToHost();
  22. }
  23. QDateTime stTime ,endTime;
  24. if(method.compare("thing.service.GetFaultRecordList")==0){
  25. stTime = QDateTime::fromString(starttime.append(" 00:00:00.000"),"yyyy-MM-dd HH:mm:ss.zzz");
  26. endTime = QDateTime::fromString(endtime.append(" 00:00:00.000"),"yyyy-MM-dd HH:mm:ss.zzz");
  27. }else{
  28. stTime = QDateTime::fromString(starttime,"yyyy-MM-dd HH:mm:ss.zzz");
  29. endTime = QDateTime::fromString(endtime,"yyyy-MM-dd HH:mm:ss.zzz");
  30. }
  31. qint64 STime = stTime.toMSecsSinceEpoch();//毫秒级时间戳
  32. qint64 ETime = endTime.toMSecsSinceEpoch();
  33. QString saTime = QString::number(STime,16);
  34. QString enTime = QString::number(ETime,16);
  35. QString tes1,tes2,recordtype;
  36. tes1.append("0").append(saTime.mid(0,1));
  37. tes2.append("0").append(enTime.mid(0,1));
  38. recordtype.append("0").append(faultrecordtype);
  39. printf("stTime = %s, endTime = %s\n",stTime.toString("yyyy-MM-dd HH:mm:ss.zzz").toUtf8().data(),endTime.toString("yyyy-MM-dd HH:mm:ss.zzz").toUtf8().data());
  40. QByteArray data;
  41. if(method.compare("thing.service.GetFaultRecordList")==0){
  42. printf("enter method getFaultRecordList\n");
  43. data = QByteArray(22,0x00);
  44. data[0] = static_cast<char>(0xeb);
  45. data[1] = static_cast<char>(0x90);
  46. data[2] = static_cast<char>(0x10);
  47. data[3] = static_cast<char>(0x00);
  48. data[4] = static_cast<char>(0x17);
  49. data[5] = static_cast<char>(0x10);
  50. data[6] = static_cast<char>(hexstr_to_byte(recordtype)&0xff);
  51. data[7] = static_cast<char>(0x00);
  52. // data[8] = static_cast<char>(0x00);
  53. // data[9] = static_cast<char>(0xb2);
  54. // data[10] = static_cast<char>(0xc3);
  55. // data[11] = static_cast<char>(0x85);
  56. // data[12] = static_cast<char>(0x7b);
  57. // data[13] = static_cast<char>(0x01);
  58. // data[14] = static_cast<char>(0x00);
  59. // data[15] = static_cast<char>(0xc6);
  60. // data[16] = static_cast<char>(0x36);
  61. // data[17] = static_cast<char>(0x95);
  62. // data[18] = static_cast<char>(0x7b);
  63. // data[19] = static_cast<char>(0x01);
  64. data[8] = static_cast<char>(hexstr_to_byte(saTime.mid(9,2))&0xff);
  65. data[9] = static_cast<char>(hexstr_to_byte(saTime.mid(7,2))&0xff);
  66. data[10] = static_cast<char>(hexstr_to_byte(saTime.mid(5,2))&0xff);
  67. data[11] = static_cast<char>(hexstr_to_byte(saTime.mid(3,2))&0xff);
  68. data[12] = static_cast<char>(hexstr_to_byte(saTime.mid(1,2))&0xff);
  69. data[13] = static_cast<char>(hexstr_to_byte(tes1)&0xff);
  70. data[14] = static_cast<char>(hexstr_to_byte(enTime.mid(9,2))&0xff);
  71. data[15] = static_cast<char>(hexstr_to_byte(enTime.mid(7,2))&0xff);
  72. data[16] = static_cast<char>(hexstr_to_byte(enTime.mid(5,2))&0xff);
  73. data[17] = static_cast<char>(hexstr_to_byte(enTime.mid(3,2))&0xff);
  74. data[18] = static_cast<char>(hexstr_to_byte(enTime.mid(1,2))&0xff);
  75. data[19] = static_cast<char>(hexstr_to_byte(tes2)&0xff);
  76. quint16 Crc = chk_sum(data);
  77. data[20] = static_cast<char>(Crc&0xff);
  78. data[21] = static_cast<char>((Crc>>8)&0xff);
  79. }else if(method == "thing.service.GetFaultRecordConfig"){
  80. printf("enter method GetFaultRecordConfig\n");
  81. data = QByteArray(16,0x00);
  82. data[0] = static_cast<char>(0xeb);
  83. data[1] = static_cast<char>(0x90);
  84. data[2] = static_cast<char>(0x0A);
  85. data[3] = static_cast<char>(0x00);
  86. data[4] = static_cast<char>(0x17);
  87. data[5] = static_cast<char>(0x11);
  88. data[6] = static_cast<char>(hexstr_to_byte(recordtype)&0xff);
  89. data[7] = static_cast<char>(0x00);
  90. data[8] = static_cast<char>(hexstr_to_byte(saTime.mid(9,2))&0xff);
  91. data[9] = static_cast<char>(hexstr_to_byte(saTime.mid(7,2))&0xff);
  92. data[10] = static_cast<char>(hexstr_to_byte(saTime.mid(5,2))&0xff);
  93. data[11] = static_cast<char>(hexstr_to_byte(saTime.mid(3,2))&0xff);
  94. data[12] = static_cast<char>(hexstr_to_byte(saTime.mid(1,2))&0xff);
  95. data[13] = static_cast<char>(hexstr_to_byte(tes1)&0xff);
  96. quint16 Crc = chk_sum(data);
  97. data[14] = static_cast<char>(Crc&0xff);
  98. data[15] = static_cast<char>((Crc>>8)&0xff);
  99. }else if(method == "thing.service.GetFaultRecordData"){
  100. printf("enter method GetFaultRecordData\n");
  101. data = QByteArray(16,0x00);
  102. data[0] = static_cast<char>(0xeb);
  103. data[1] = static_cast<char>(0x90);
  104. data[2] = static_cast<char>(0x0A);
  105. data[3] = static_cast<char>(0x00);
  106. data[4] = static_cast<char>(0x17);
  107. data[5] = static_cast<char>(0x12);
  108. data[6] = static_cast<char>(hexstr_to_byte(recordtype)&0xff);
  109. data[7] = static_cast<char>(0x00);
  110. data[8] = static_cast<char>(hexstr_to_byte(saTime.mid(9,2))&0xff);
  111. data[9] = static_cast<char>(hexstr_to_byte(saTime.mid(7,2))&0xff);
  112. data[10] = static_cast<char>(hexstr_to_byte(saTime.mid(5,2))&0xff);
  113. data[11] = static_cast<char>(hexstr_to_byte(saTime.mid(3,2))&0xff);
  114. data[12] = static_cast<char>(hexstr_to_byte(saTime.mid(1,2))&0xff);
  115. data[13] = static_cast<char>(hexstr_to_byte(tes1)&0xff);
  116. quint16 Crc = chk_sum(data);
  117. data[14] = static_cast<char>(Crc&0xff);
  118. data[15] = static_cast<char>((Crc>>8)&0xff);
  119. }
  120. QString topic = QString("/anyoee/data/a10vE0s73g5/%1/down_raw").arg(devicename);
  121. emit SendPubData(topic,"SendPubSubData-publish-test",data);
  122. client->publish(QMQTT::Message(mqttIdx++,topic,data));
  123. if(mqttIdx>9999)
  124. mqttIdx = 1;
  125. }
  126. quint8 ELCommThreadPub::hexstr_to_byte(QString dat)
  127. {
  128. quint8 tmp[2];
  129. QByteArray Dat = dat.toLower().toLatin1();
  130. quint8 temp;
  131. temp = Dat.at(0)&0xff;
  132. if((temp>=0x30)&&(temp<=0x39))
  133. tmp[0] = temp-0x30;
  134. else
  135. tmp[0] = temp-0x37;
  136. temp = Dat.at(1)&0xff;
  137. if((temp>=0x30)&&(temp<=0x39))
  138. tmp[1] = temp-0x30;
  139. else
  140. tmp[1] = temp-0x37;
  141. return static_cast<quint8>(((tmp[0]&0x0f)<<4)|(tmp[1]&0x0f));
  142. }
  143. quint16 ELCommThreadPub::chk_sum(QByteArray buff)
  144. {
  145. quint16 crc = 0x0000;
  146. for(quint16 j=2;j<buff.length()-2;j++)
  147. {
  148. crc += static_cast<quint16>(buff[j]&0x00ff);
  149. }
  150. return crc;
  151. }
  152. void ELCommThreadPub::onConnected()
  153. {
  154. printf("ELCommThreadPub::onConnected \n");
  155. }