datacollectorpub.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. #include "datacollectorpub.h"
  2. DataCollectorPub::DataCollectorPub(QObject *parent) : QThread(parent)
  3. {
  4. keep = false;
  5. devMsgList.clear();
  6. }
  7. void DataCollectorPub::stop()
  8. {
  9. keep = false;
  10. }
  11. void DataCollectorPub::run()
  12. {
  13. keep = true;
  14. while (keep) {
  15. if(devMsgList.length()>0){
  16. while(devMsgList.length()>0){
  17. DevData devdata = devMsgList.first();
  18. //this->publishData(devdata.topic,devdata.data);
  19. QString topic = devdata.topic;
  20. QByteArray data = devdata.data;
  21. QString devType = (topic.split("/")).at(2);
  22. QString productId = "";
  23. QString deviceId = (topic.split("/")).at(4);
  24. QString jsonStr = "";
  25. QJsonParseError json_err;
  26. QJsonDocument doc = QJsonDocument::fromJson(data,&json_err);
  27. if(json_err.error == QJsonParseError::NoError){
  28. QString Status = "0";
  29. QString PowerAlarm="0";
  30. QString ManualAct = "0";
  31. QString DevWorking01 = "0";
  32. QString DevWorking02 = "0";
  33. QString DevAlarm01 = "0";
  34. QString DevAlarm02 = "0";
  35. QString FireAutoAct = "0";
  36. QString Temperature = "0.0";
  37. QString Humidity = "0.0";
  38. QString WaterPL = "0.0";
  39. QString VoltageA = "0.0";
  40. QString VoltageB = "0.0";
  41. QString VoltageC = "0.0";
  42. QString CurrentA = "0.0";
  43. QString CurrentB = "0.0";
  44. QString CurrentC = "0.0";
  45. QString TemperatureA = "0.0";
  46. QString TemperatureB = "0.0";
  47. QString TemperatureC = "0.0";
  48. QString battery = "0.0";
  49. QString signal = "0.0";
  50. QString smoke = "7";
  51. QString sjstatus = "1";
  52. QString density = "0";
  53. QString angle = "0";
  54. QString deviceType = "";
  55. QJsonObject root_obj = doc.object();
  56. QString connType = root_obj.value("connType").toString();
  57. QString dataType = root_obj.value("type").toString();
  58. QString timeStamp = root_obj.value("timeStamp").toString();
  59. QJsonValue dev_value = root_obj.value("devs");
  60. if(dev_value.isArray()){
  61. QJsonObject dev_obj = dev_value.toArray().at(0).toObject();
  62. QJsonValue dp_value = dev_obj.value("dp");
  63. if(dp_value.isArray()){
  64. QJsonArray dp_array = dp_value.toArray();
  65. for(int i=0;i<dp_array.size();i++){
  66. QJsonObject dp_obj = dp_array.at(i).toObject();
  67. QString name = dp_obj.value("property").toString();
  68. QString value = "";
  69. if(devType.compare("ytDP0008")==0){
  70. value = QString("%1").arg(dp_obj.value("value").toDouble());
  71. }else{
  72. value = dp_obj.value("value").toString();
  73. }
  74. if((name.compare("状态")==0)||(name.compare("井盖状态")==0)){
  75. Status = value;
  76. //printf("Status: %s\n",Status.toUtf8().data());
  77. }else if((name.compare("水压")==0)||(name.compare("水位")==0)||(name.compare("液位")==0)){
  78. WaterPL = value;
  79. //printf("WaterPL: %s\n",WaterPL.toUtf8().data());
  80. }else if((name.compare("电量")==0)||(name.compare("剩余电量")==0)){
  81. battery = value;
  82. //printf("battery: %s\n",battery.toUtf8().data());
  83. }else if((name.compare("信号")==0)||(name.compare("无线信号")==0)){
  84. signal = value;
  85. //printf("signal: %s\n",signal.toUtf8().data());
  86. }else if(name.compare("角度")==0){
  87. angle = value;
  88. //printf("angle: %s\n",angle.toUtf8().data());
  89. }else if(name.contains("电源") && value.compare("00")==0){
  90. PowerAlarm = "1";
  91. //printf("PowerAlarm: %s\n",PowerAlarm.toUtf8().data());
  92. }else if(name.contains("手自动状态") && value.compare("00")==0){
  93. ManualAct = "1";
  94. //printf("ManualAct: %s\n",ManualAct.toUtf8().data());
  95. }else if(name.contains("运行状态") && name.contains("1#") && value.compare("00")==0){
  96. DevWorking01 = "1";
  97. //printf("DevWorking01: %s\n",DevWorking01.toUtf8().data());
  98. }else if((name.compare("泵运行状态")==0||name.compare("消防泵运行状态")==0) && value.compare("00")==0){
  99. DevWorking01 = "1";
  100. //printf("DevWorking01: %s\n",DevWorking01.toUtf8().data());
  101. }else if(name.contains("运行状态") && name.contains("2#") && value.compare("00")==0){
  102. DevWorking02 = "1";
  103. //printf("DevWorking02: %s\n",DevWorking02.toUtf8().data());
  104. }else if(name.contains("故障") && name.contains("1#") && value.compare("00")==0){
  105. DevAlarm01 = "1";
  106. //printf("DevAlarm01: %s\n",DevAlarm01.toUtf8().data());
  107. }else if(name.contains("故障") && name.contains("2#") && value.compare("00")==0){
  108. DevAlarm02 = "1";
  109. //printf("DevAlarm02: %s\n",DevAlarm02.toUtf8().data());
  110. }else if(name.contains("消防联动") && value.compare("00")==0){
  111. FireAutoAct = "1";
  112. //printf("FireAutoAct: %s\n",FireAutoAct.toUtf8().data());
  113. }else if((name.compare("1#温度")==0)||(name.compare("温度")==0)){
  114. Temperature = value;
  115. //printf("Temperature: %s\n",Temperature.toUtf8().data());
  116. }else if(name.compare("1#湿度")==0){
  117. Humidity = value;
  118. //printf("Humidity: %s\n",Humidity.toUtf8().data());
  119. }else if(name.compare("浓度")==0){
  120. density = value;
  121. //printf("density: %s\n",density.toUtf8().data());
  122. }else if(name.compare("A相电压")==0){
  123. VoltageA = value;
  124. //printf("VoltageA: %s\n",VoltageA.toUtf8().data());
  125. }else if(name.compare("B相电压")==0){
  126. VoltageB = value;
  127. //printf("VoltageB: %s\n",VoltageB.toUtf8().data());
  128. }else if(name.compare("C相电压")==0){
  129. VoltageC = value;
  130. //printf("VoltageC: %s\n",VoltageC.toUtf8().data());
  131. }else if(name.compare("A相电流")==0){
  132. CurrentA = value;
  133. //printf("CurrentA: %s\n",CurrentA.toUtf8().data());
  134. }else if(name.compare("B相电流")==0){
  135. CurrentB = value;
  136. //printf("CurrentB: %s\n",CurrentB.toUtf8().data());
  137. }else if(name.compare("C相电流")==0){
  138. CurrentC = value;
  139. //printf("CurrentC: %s\n",CurrentC.toUtf8().data());
  140. }else if(name.compare("A相线缆温度")==0){
  141. TemperatureA = value;
  142. //printf("property = %s, value = %s, TemperatureA = %s\n",name.toUtf8().data(),value.toUtf8().data(),TemperatureA.toUtf8().data());
  143. }else if(name.compare("B相线缆温度")==0){
  144. TemperatureB = value;
  145. //printf("TemperatureB: %s\n",TemperatureB.toUtf8().data());
  146. }else if(name.compare("C相线缆温度")==0){
  147. TemperatureC = value;
  148. //printf("TemperatureC: %s\n",TemperatureC.toUtf8().data());
  149. }
  150. //printf("name = %s, value = %s, battery = %s, signal = %s\n",name.toUtf8().data(),value.toUtf8().data(),battery.toUtf8().data(),signal.toUtf8().data());
  151. }
  152. }
  153. QString dt = dev_obj.value("deviceType").toString();
  154. if(dt.compare("1")==0){
  155. deviceType = "1-fhj";
  156. productId = "1_0001";
  157. jsonStr = QString("{\"device_id\":\"%1\",\"product_id\":\"%2\",\"timestamp\":%3,\"tags\":{\"conn_type\":\"%4\",\"type\":\"%5\"},\"metrics\":{\"status\":%6},\"device_type\":\"%7\"}").arg(deviceId).arg(productId).arg(timeStamp).arg(connType).arg(dataType).arg(Status).arg(deviceType);
  158. }else if(dt.compare("2")==0){
  159. deviceType = "2-fsy";
  160. productId = "2_0001";
  161. jsonStr = QString("{\"device_id\":\"%1\",\"product_id\":\"%2\",\"timestamp\":%3,\"tags\":{\"conn_type\":\"%4\",\"type\":\"%5\"},\"metrics\":{\"battery\":%6,\"signal\":%7,\"water_pl\":%8,\"status\":%9},\"device_type\":\"%10\"}").arg(deviceId).arg(productId).arg(timeStamp).arg(connType).arg(dataType).arg(battery).arg(signal).arg(WaterPL).arg(Status).arg(deviceType);
  162. }else if(dt.compare("3")==0){
  163. deviceType = "3-fyg";
  164. productId = "3_0001";
  165. jsonStr = QString("{\"device_id\":\"%1\",\"product_id\":\"%2\",\"timestamp\":%3,\"tags\":{\"conn_type\":\"%4\",\"type\":\"%5\"},\"metrics\":{\"battery\":%6,\"signal\":%7,\"temperature\":%8,\"density\":%9,\"status\":%10},\"device_type\":\"%11\"}").arg(deviceId).arg(productId).arg(timeStamp).arg(connType).arg(dataType).arg(battery).arg(signal).arg(Temperature).arg(density).arg(Status).arg(deviceType);
  166. }else if(dt.compare("4")==0){
  167. deviceType = "4-fxhs";
  168. productId = "4_0001";
  169. jsonStr = QString("{\"device_id\":\"%1\",\"product_id\":\"%2\",\"timestamp\":%3,\"tags\":{\"conn_type\":\"%4\",\"type\":\"%5\"},\"metrics\":{\"battery\":%6,\"signal\":%7,\"water_pl\":%8,\"status\":%9},\"device_type\":\"%10\"}").arg(deviceId).arg(productId).arg(timeStamp).arg(connType).arg(dataType).arg(battery).arg(signal).arg(WaterPL).arg(Status).arg(deviceType);
  170. }else if(dt.compare("5")==0){
  171. deviceType = "5-fyw";
  172. productId = "5_0001";
  173. jsonStr = QString("{\"device_id\":\"%1\",\"product_id\":\"%2\",\"timestamp\":%3,\"tags\":{\"conn_type\":\"%4\",\"type\":\"%5\"},\"metrics\":{\"battery\":%6,\"signal\":%7,\"water_pl\":%8,\"status\":%9},\"device_type\":\"%10\"}").arg(deviceId).arg(productId).arg(timeStamp).arg(connType).arg(dataType).arg(battery).arg(signal).arg(WaterPL).arg(Status).arg(deviceType);
  174. }else if(dt.compare("6")==0){
  175. deviceType = "6-frtu";
  176. productId = "6_0001";
  177. jsonStr = QString("{\"device_id\":\"%1\",\"product_id\":\"%2\",\"timestamp\":%3,\"tags\":{\"conn_type\":\"%4\",\"type\":\"%5\"},\"metrics\":{\"power_alarm\":%6,\"manual_act\":%7,\"dev_working01\":%8,\"dev_working02\":%9,\"dev_alarm01\":%10,\"dev_alarm02\":%11,\"fire_auto_act\":%12},\"device_type\":\"%13\"}").arg(deviceId).arg(productId).arg(timeStamp).arg(connType).arg(dataType).arg(PowerAlarm).arg(ManualAct).arg(DevWorking01).arg(DevWorking02).arg(DevAlarm01).arg(DevAlarm02).arg(FireAutoAct).arg(deviceType);
  178. }else if(dt.compare("7")==0){
  179. deviceType = "7-fef";
  180. productId = "7_0001";
  181. jsonStr = QString("{\"device_id\":\"%1\",\"product_id\":\"%2\",\"timestamp\":%3,\"tags\":{\"conn_type\":\"%4\",\"type\":\"%5\"},\"metrics\":{\"voltage_a\":%6,\"voltage_b\":%7,\"voltage_c\":%8,\"current_a\":%9,\"current_b\":%10,\"current_c\":%11,\"temperature_a\":%12,\"temperature_b\":%13,\"temperature_c\":%14},\"device_type\":\"%15\"}").arg(deviceId).arg(productId).arg(timeStamp).arg(connType).arg(dataType).arg(VoltageA).arg(VoltageB).arg(VoltageC).arg(CurrentA).arg(CurrentB).arg(CurrentC).arg(TemperatureA).arg(TemperatureB).arg(TemperatureC).arg(deviceType);
  182. }else if(dt.compare("16")==0){
  183. deviceType = "16-fvd";
  184. productId = "16_0001";
  185. }else if(dt.compare("128")==0){
  186. deviceType = "128-fiw";
  187. productId = "128_0001";
  188. jsonStr = QString("{\"device_id\":\"%1\",\"product_id\":\"%2\",\"timestamp\":%3,\"tags\":{\"conn_type\":\"%4\",\"type\":\"%5\"},\"metrics\":{\"angle\":%6,\"battery\":%7,\"signal\":%8,\"liquid\":%9,\"status\":%10},\"device_type\":\"%11\"}").arg(deviceId).arg(productId).arg(timeStamp).arg(connType).arg(dataType).arg(angle).arg(battery).arg(signal).arg(WaterPL).arg(Status).arg(deviceType);
  189. }else if(dt.compare("129")==0){
  190. deviceType = "129-fdc";
  191. productId = "129_0001";
  192. jsonStr = QString("{\"device_id\":\"%1\",\"product_id\":\"%2\",\"timestamp\":%3,\"tags\":{\"conn_type\":\"%4\",\"type\":\"%5\"},\"metrics\":{\"battery\":%6,\"signal\":%7,\"status\":%8},\"device_type\":\"%9\"}").arg(deviceId).arg(productId).arg(timeStamp).arg(connType).arg(dataType).arg(battery).arg(signal).arg(Status).arg(deviceType);
  193. }else if(dt.compare("130")==0){
  194. deviceType = "130-feg";
  195. productId = "130_0001";
  196. }else if(dt.compare("131")==0){
  197. deviceType = "131-fgas";
  198. productId = "131_0001";
  199. }
  200. }
  201. emit dataListLog(QString("[%1] devMsgList.length: %2, topic: %3, jsonStr: %4").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(devMsgList.length()).arg(topic).arg(jsonStr));
  202. emit publishDevData(jsonStr.toUtf8());
  203. }else{
  204. printf("parse json error\n");
  205. }
  206. devMsgList.removeFirst();
  207. usleep(1000);
  208. }
  209. }
  210. usleep(50000);
  211. }
  212. }
  213. void DataCollectorPub::devMessage(DevData dev)
  214. {
  215. devMsgList.append(dev);
  216. }