mkcore.cpp 93 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642
  1. #include "mkcore.h"
  2. #include <string.h>
  3. #include "../ytUserInfoProcess/userinfo.h"
  4. #include "../DataPrecessDog/dataprecess.h"
  5. #include "waterMk01.h"
  6. // 1. 提取硬编码魔法值为常量,便于统一修改和维护
  7. const QString MQTT_ID = "a71c40bb-5b02-4741-881b-24449f699db9";
  8. const QString ACTION_TYPE = "transpush";
  9. const QString PROVIDER = "Usky";
  10. const QString DEVICE_TYPE = "xiaofangshuiya";
  11. const QString DATA_TYPE = "deviceInfo";
  12. const QString SOFT_VERSION = "1.00.00";
  13. const QString HARD_VERSION = "0.1";
  14. const QString SENSOR_DESC = "";
  15. const QString SENSOR_UNIT = "MPa";
  16. const double LOW_THRESHOLD = 0.07;
  17. const double HIGH_THRESHOLD = 1.2;
  18. const QString API_URL = "http://47.98.201.73:55126";
  19. #define comm_debug
  20. #define UN_REFERENCED_PARAMETER(x) {(x) = (x);}
  21. MKCore::MKCore(QObject *parent) :
  22. QObject(parent)
  23. {
  24. logThread = new LogThread(this);
  25. dbThread = new DatabaseThread(this);
  26. timer = new QTimer(this);
  27. connect(timer,SIGNAL(timeout()),this,SLOT(timeout()));
  28. connect(dbThread,SIGNAL(AlarmReport(QString,quint64,QString,QString)),this,SLOT(AlarmReport(QString,quint64,QString,QString)));
  29. connect(dbThread, &DatabaseThread::SqlLog, this, &MKCore::SqlLog);
  30. connect(dbThread, &DatabaseThread::mqttInfo,this,&MKCore::mqttConnect);
  31. svr = new QTcpServer(this);
  32. connect(svr, SIGNAL(newConnection()),this,SLOT(new_incomming()));
  33. for(quint16 i=0;i<16;i++){
  34. wxThreads[3][i] = new WechartThreads(this,i,"47.98.201.73","/jdxf/wxapp2.php/Home/GeneralPush/voice_alarm");
  35. wxThreads[2][i] = new WechartThreads(this,i,"47.98.201.73","/jdxf/wxapp2.php/Home/ManholeCoverwarn/message_manhole_cover");
  36. wxThreads[1][i] = new WechartThreads(this,i,"47.98.201.73","/jdxf/wxapp2.php/Home/Waterwarn/message_water");
  37. wxThreads[0][i] = new WechartThreads(this,i,"47.98.201.73","/jdxf/wxapp2.php/Home/Yeweiwarn/message_water");
  38. connect(wxThreads[3][i],SIGNAL(wxchart(quint16,QDateTime,QString,bool)),this,SLOT(wxchart(quint16,QDateTime,QString,bool)));
  39. connect(wxThreads[2][i],SIGNAL(wxchart(quint16,QDateTime,QString,bool)),this,SLOT(wxchart(quint16,QDateTime,QString,bool)));
  40. connect(wxThreads[1][i],SIGNAL(wxchart(quint16,QDateTime,QString,bool)),this,SLOT(wxchart(quint16,QDateTime,QString,bool)));
  41. connect(wxThreads[0][i],SIGNAL(wxchart(quint16,QDateTime,QString,bool)),this,SLOT(wxchart(quint16,QDateTime,QString,bool)));
  42. repThread[i] = new ttsThreads(this,i,"127.0.0.1","/report",55335);
  43. connect(repThread[i],&ttsThreads::ttslog,this,&MKCore::repLog);
  44. wssThread[i] = new ttsThreads(this,i,"47.98.201.73","/report",55125);
  45. connect(wssThread[i],&ttsThreads::ttslog,this,&MKCore::repLog);
  46. lhThread[i] = new ttsThreads(this,i,"47.98.201.73","/report",55126);
  47. connect(lhThread[i],&ttsThreads::ttslog,this,&MKCore::repLog);
  48. wxThreads[3][i]->start();
  49. wxThreads[2][i]->start();
  50. wxThreads[1][i]->start();
  51. wxThreads[0][i]->start();
  52. wssThread[i]->start();
  53. repThread[i]->start();
  54. lhThread[i]->start();
  55. }
  56. wxcur = 0;
  57. repcur = 0;
  58. lhcur = 0;
  59. DevIdx3 = -1;
  60. mkwaterserver = new Mkwaterserver(this);
  61. connect(mkwaterserver,&Mkwaterserver::getCommData,this,&MKCore::getCommData);
  62. connect(mkwaterserver,&Mkwaterserver::getValue,this,&MKCore::getValue);
  63. connect(mkwaterserver,&Mkwaterserver::getAlarm,this,&MKCore::getAlarm);
  64. dbThread->start();
  65. logThread->start();
  66. mqttinfoIdx = 1;
  67. mqttalarmIdx = 1;
  68. }
  69. MKCore::~MKCore()
  70. {
  71. logThread->stop();
  72. dbThread->stop();
  73. }
  74. void MKCore::mqttConnect(QString ip,QString port,QString name,QString passwd)
  75. {
  76. printf("mqtt init\n");
  77. printf("ip=%s, port=%s,name=%s,passwd=%s\n",ip.toUtf8().data(),port.toUtf8().data(),name.toUtf8().data(),passwd.toUtf8().data());
  78. m_client = new QMQTT::Client(QHostAddress(ip),static_cast<quint16>(port.toInt()),this);
  79. m_client -> setUsername(name);
  80. m_client -> setPassword(passwd.toLatin1());
  81. connect(m_client, &QMQTT::Client::connected,this,&MKCore::mqconnected);
  82. connect(m_client,&QMQTT::Client::subscribed,this,&MKCore::onSubscribed);
  83. connect(m_client,&QMQTT::Client::received,this,&MKCore::onReceived);
  84. m_client->connectToHost();
  85. }
  86. void MKCore::mqconnected()
  87. {
  88. printf("mqtt connected\n");
  89. }
  90. void MKCore::onSubscribed(const QString& topic)
  91. {
  92. printf("mqtt onSubscribed\n");
  93. getCommData(QString("MQTT=====:%1").arg(topic));
  94. }
  95. void MKCore::onReceived(const QMQTT::Message& message)
  96. {
  97. printf("mqtt onReceived\n");
  98. getCommData(QString("MQTTMESSAGE=====:%1").arg(QString::fromUtf8(message.payload())));
  99. }
  100. void MKCore::start(){
  101. if(!svr->listen(QHostAddress::Any,55334)){
  102. printf("55334 listen failed\n");
  103. exit(-1);
  104. }
  105. mkwaterserver->start();
  106. timer->start(1000);
  107. }
  108. void MKCore::timeout()
  109. {
  110. uint t = QDateTime::currentDateTime().toTime_t();
  111. dataProcessShm->processStatus[1].upTime[0].Enabled = 0x01;
  112. dataProcessShm->processStatus[1].upTime[0].t_time = t;
  113. }
  114. void MKCore::getCommData(QString data)
  115. {
  116. logThread->appendData(data);
  117. }
  118. void MKCore::repLog(quint16 idx, QDateTime t, QString data, bool dirflag)
  119. {
  120. //数据推送日志打印
  121. UN_REFERENCED_PARAMETER(idx);
  122. logThread->appendData(QString("[ %1 47.98.201.73 (rep) %2 ] %3")
  123. .arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
  124. .arg(dirflag?">>>":"<<<")
  125. .arg(data.replace('\n',"\\n").replace('\r',"\\r")));
  126. }
  127. void MKCore::wxchart(quint16 idx, QDateTime t, QString data, bool dirflag)
  128. {
  129. UN_REFERENCED_PARAMETER(idx);
  130. logThread->appendData(QString("[ %1 47.98.201.73 (wx) %2 ] %3")
  131. .arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
  132. .arg(dirflag?">>>":"<<<")
  133. .arg(data.replace('\n',"\\n").replace('\r',"\\r")));
  134. }
  135. void MKCore::SqlLog(QString log)
  136. {
  137. logThread->appendData(log);
  138. }
  139. void MKCore::getOnLine(QString deviceidx,bool flag, QDateTime t)
  140. {
  141. t = QDateTime::currentDateTime();
  142. if(flag)
  143. {
  144. for(int i=0;i<10240;i++){
  145. if(QString::compare(deviceidx,QString(mkList->sensors[i].Device_Code))==0){
  146. if(mkList->sensors[i].Enabled!=0x01)
  147. return;
  148. mkList->sensors[i].LastCommtime = t.toTime_t();
  149. if(mkList->sensors[i].Online_Flag!=0x01)
  150. {
  151. mkList->sensors[i].Online_Flag = 0x01;
  152. }
  153. dbThread->appendSql(QString("update sp_devices_status set devicestatus=0, true_status=0, statustime='%1', lastcommtime='%1' where deviceid='%2'")
  154. .arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  155. }
  156. }
  157. }
  158. }
  159. void MKCore::getValue(QString deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t)
  160. {
  161. dbThread->appendSql(QString("insert into sp_d%1 (id, device_code, port, time, data1, data2, data3, data4, data5) values (NULL, '%1', '%2', '%3', '%4', %5, %6, %7, '%8')")
  162. .arg(deviceidx).arg("mk_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5),1);
  163. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=0, data_time='%1', content='正常' where device_id='%2' and point_code=1").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  164. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=2").arg(d2).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  165. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=3").arg(d3).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  166. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=4").arg(d4).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  167. QStringList strArray = {"SHYT25100007","SHYT25100006","SHYT25100009","SHYT25100004","SHYT25100005","SHYT25100008","SHYT25100001","SHYT25100002","SHYT25100003"};
  168. if(strArray.contains(deviceidx)){
  169. QJsonObject jqhsdata;
  170. QJsonObject jqhsRTU;
  171. jqhsRTU.insert("provider", "Usky");
  172. jqhsRTU.insert("deviceType", "xiaofangshuiya");
  173. jqhsRTU.insert("dataType", "deviceInfo");
  174. jqhsRTU.insert("softVersion", "1.00.00");
  175. jqhsRTU.insert("hardVersion", "0.1");
  176. QJsonArray jajsonArray;
  177. QJsonObject jaobjRTU;
  178. for(int i=0;i<10240;i++){
  179. if(QString::compare(QString(mkList->sensors[i].Device_Code),deviceidx)==0){
  180. jaobjRTU.insert("sensorId", mkList->sensors[i].id);
  181. break;
  182. }
  183. }
  184. jaobjRTU.insert("desc", "");
  185. jaobjRTU.insert("status", 0);
  186. jaobjRTU.insert("pointValue", round(d4 * 10000) / 10000.0);
  187. jaobjRTU.insert("unit", "MPa");
  188. jaobjRTU.insert("lowThreshold", 0.07);
  189. jaobjRTU.insert("highThreshold", 1.2);
  190. jaobjRTU.insert("sendTime", QDateTime::currentDateTimeUtc().toSecsSinceEpoch());
  191. jajsonArray.append(jaobjRTU);
  192. jqhsRTU.insert("sensorList", jajsonArray);
  193. QString rep = QString("{\"mqttId\":\"a71c40bb-5b02-4741-881b-24449f699db9\",\"action\":\"transpush\",\"data\": %1}").arg(QString(QJsonDocument(jqhsRTU).toJson()));
  194. lhThread[lhcur]->appendData(rep);
  195. printf("lh rep:%s\n",rep.toUtf8().data());
  196. lhcur++;
  197. lhcur &= 0x0f;
  198. // QJsonObject mainJson; // 优化命名:jqhsdata -> mainJson(见名知义)
  199. // QJsonObject rtuJson; // 优化命名:jqhsRTU -> rtuJson
  200. // // 构建RTU基础信息(保留原始赋值逻辑)
  201. // rtuJson.insert("provider", PROVIDER);
  202. // rtuJson.insert("deviceType", DEVICE_TYPE);
  203. // rtuJson.insert("dataType", DATA_TYPE);
  204. // rtuJson.insert("softVersion", SOFT_VERSION);
  205. // rtuJson.insert("hardVersion", HARD_VERSION);
  206. // // 构建主JSON基础信息
  207. // mainJson.insert("mqttId", MQTT_ID);
  208. // mainJson.insert("action", ACTION_TYPE);
  209. // QJsonArray sensorArray; // 优化命名:jajsonArray -> sensorArray
  210. // QJsonObject sensorJson; // 优化命名:jaobjRTU -> sensorJson
  211. // // 2. 修复数组越界风险:用传感器实际数量替代固定10240
  212. // // 若 mkList->sensors 是 QList 类型:
  213. // for(int i=0;i<10240;i++){
  214. // if(QString::compare(QString(mkList->sensors[i].Device_Code),deviceidx)==0){
  215. // sensorJson.insert("sensorId", mkList->sensors[i].id);
  216. // break;
  217. // }
  218. // }
  219. // // 填充传感器数据(保留原始逻辑)
  220. // sensorJson.insert("desc", SENSOR_DESC);
  221. // sensorJson.insert("status", 0);
  222. // sensorJson.insert("pointValue", d4);
  223. // sensorJson.insert("unit", SENSOR_UNIT);
  224. // sensorJson.insert("lowThreshold", LOW_THRESHOLD);
  225. // sensorJson.insert("highThreshold", HIGH_THRESHOLD);
  226. // sensorJson.insert("sendTime", QDateTime::currentDateTimeUtc().toSecsSinceEpoch());
  227. // // 组装传感器数组
  228. // sensorArray.append(sensorJson);
  229. // rtuJson.insert("sensorList", sensorArray);
  230. // mainJson.insert("data", rtuJson);
  231. // // 3. 修复JSON打印问题:通过QJsonDocument转换后输出
  232. // QJsonDocument jsonDoc(mainJson);
  233. // QString debugJsonStr = jsonDoc.toJson(QJsonDocument::Indented); // 格式化输出,便于调试
  234. // qDebug() << "待发送JSON数据:\n" << debugJsonStr;
  235. // // 若坚持使用printf(需转换为C风格字符串)
  236. // printf("jqhsdata %s\n", debugJsonStr.toUtf8().constData());
  237. // // 4. 修复JSON转QByteArray问题:正确转换为HTTP请求所需数据
  238. // QByteArray requestData = debugJsonStr.toUtf8(); // 紧凑格式,减少传输体积
  239. // // 5. 修复内存泄漏:使用栈上QNetworkRequest,无需动态分配
  240. // QNetworkRequest request;
  241. // QUrl apiUrl(API_URL);
  242. // if (!apiUrl.isValid()) { // 增加URL有效性检查,提升健壮性
  243. // qCritical() << "接口URL无效:" << API_URL;
  244. // return;
  245. // }
  246. // request.setUrl(apiUrl);
  247. // request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=UTF-8");
  248. // request.setRawHeader("User-Agent", "QtNetwork/5.15.2"); // 必填
  249. // request.setRawHeader("Accept", "*/*");
  250. // request.setRawHeader("Connection", "keep-alive");
  251. // // 6. 发送POST请求,并处理响应和内存释放
  252. // QNetworkReply *reply = netAccessManager->post(request, requestData);
  253. // // 绑定finished信号,使用lambda表达式处理响应,自动释放reply内存
  254. // QObject::connect(reply, &QNetworkReply::finished, [=]() {
  255. // reply->deleteLater(); // 自动释放reply,避免内存泄漏
  256. // // 处理请求结果
  257. // if (reply->error() != QNetworkReply::NoError) {
  258. // // 打印错误信息,便于问题排查
  259. // qCritical() << "HTTP POST请求失败:" << reply->errorString() << "错误码:" << reply->error();
  260. // return;
  261. // }
  262. // // 读取并打印成功响应
  263. // QByteArray responseData = reply->readAll();
  264. // qInfo() << "HTTP POST请求成功,响应数据:" << responseData;
  265. // // 可选:解析响应JSON(增强功能性)
  266. // QJsonParseError jsonError;
  267. // QJsonDocument responseDoc = QJsonDocument::fromJson(responseData, &jsonError);
  268. // if (jsonError.error != QJsonParseError::NoError) {
  269. // qWarning() << "响应JSON解析失败:" << jsonError.errorString();
  270. // return;
  271. // }
  272. // qDebug() << "解析后的响应JSON:\n" << responseDoc.toJson(QJsonDocument::Indented);
  273. // });
  274. }
  275. }
  276. void MKCore::getCoverValue(QString deviceidx, QString iotId, int repackage, int sensor_status, int manhole_cover_position_state, int lean_angle, double battery_voltage,int temperature,long etime,int serviceId)
  277. {
  278. dbThread->appendSql(QString("insert into sp_iw%1 (id, device_id, iot_id, isRetrans, angleSensorStatus, tempSensorStatus, isRecover, openStatus, angle, rssi, voltage, temp, hum, rsrp, snr, service, addtime, notifytype, serviceId) values (NULL, '%1', '%2', '%3', '%4', %5, %6, %7, '%8', '%9', '%10', '%11', '%12', '%13', '%14', '%15', '%16', '%17', '%18')")
  279. .arg(deviceidx).arg(iotId).arg(repackage).arg(sensor_status).arg(0).arg(0).arg(manhole_cover_position_state).arg(lean_angle).arg(0).arg(battery_voltage).arg(temperature).arg(0).arg(0).arg(0).arg(0).arg(QDateTime::fromTime_t(etime).toString("yyyy-MM-dd HH:mm:ss")).arg(0).arg(serviceId),1);
  280. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=0, data_time='%1', content='正常' where device_id='%2' and point_code=1").arg(QDateTime::fromTime_t(etime).toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  281. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=2").arg(battery_voltage).arg(QDateTime::fromTime_t(etime).toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  282. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=3").arg(5).arg(QDateTime::fromTime_t(etime).toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  283. }
  284. void MKCore::getAlarm(QString deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t)
  285. {
  286. dbThread->appendAlarm(AlarmRep(deviceidx,
  287. QString("insert into sp_sj2017 (id, device_code, port, time, data1, data2, data3, data4, data5) values (NULL, '%1', '%2', '%3', '%4', %5, %6, %7, '%8')")
  288. .arg(deviceidx).arg("mk_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5),
  289. QString("%1").arg(note),
  290. t.toString("yyyy-MM-dd HH:mm:ss")),1);
  291. dbThread->appendSql(QString("insert into sp_d%1 (id, device_code, port, time, data1, data2, data3, data4, data5) values (NULL, '%1', '%2', '%3', '%4', %5, %6, %7, '%8')")
  292. .arg(deviceidx).arg("mk_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5),1);
  293. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2', content='%3' where device_id='%4' and point_code=1")
  294. .arg(d1.at(2)).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(note).arg(deviceidx),1);
  295. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=2").arg(d2).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  296. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=3").arg(d3).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  297. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=4").arg(d4).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  298. }
  299. void MKCore::getCoverAlarm(QString deviceidx, long jEventTime, QString ip, int lean_angle, double battery_voltage, int manhole_cover_position_state, QJsonObject jPayload,int serviceId,QString iotId)
  300. {
  301. getCommData(QString("[ %1 =============%2] ").arg(deviceidx).arg("ceshiCover123"));
  302. if(serviceId==1001){
  303. dbThread->appendAlarm(AlarmRep(deviceidx,
  304. QString("insert into sp_iw2017 (id, device_code, time, address, device_status,angle,voltage,data1, data3) values (NULL, '%1', '%2', '%3', '%4', '%5', '%6', '%7', '%8')")
  305. .arg(deviceidx).arg(QDateTime::fromTime_t(jEventTime).toString("yyyy-MM-dd HH:mm:ss")).arg(ip).arg(manhole_cover_position_state).arg(lean_angle).arg(battery_voltage).arg(manhole_cover_position_state==0?"4":"1").arg(QString(QJsonDocument(jPayload).toJson(QJsonDocument::Compact))),
  306. QString("%1").arg(QString::fromUtf8(manhole_cover_position_state==0?"打开恢复":"打开告警")),
  307. QDateTime::fromTime_t(jEventTime).toString("yyyy-MM-dd HH:mm:ss")),1);
  308. dbThread->appendSql(QString("insert into sp_iw%1 (id, device_id, iot_id, isRetrans, angleSensorStatus, tempSensorStatus, isRecover, openStatus, angle, rssi, voltage, temp, hum, rsrp, snr, service, addtime, notifytype, serviceId) values (NULL, '%1', '%2', '%3', '%4', %5, %6, %7, '%8', '%9', '%10', '%11', '%12', '%13', '%14', '%15', '%16', '%17', '%18')")
  309. .arg(deviceidx).arg(iotId).arg(0).arg(0).arg(0).arg(0).arg(manhole_cover_position_state).arg(lean_angle).arg(0).arg(battery_voltage).arg(0).arg(0).arg(0).arg(0).arg(0).arg(QDateTime::fromTime_t(jEventTime).toString("yyyy-MM-dd HH:mm:ss")).arg(0).arg(serviceId),1);
  310. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2', content='%3' where device_id='%4' and point_code=1")
  311. .arg(manhole_cover_position_state==0?"4":"1").arg(QDateTime::fromTime_t(jEventTime).toString("yyyy-MM-dd HH:mm:ss")).arg(QString::fromUtf8(manhole_cover_position_state==0?"打开恢复":"打开告警")).arg(deviceidx),1);
  312. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=2").arg(battery_voltage).arg(QDateTime::fromTime_t(jEventTime).toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  313. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=3").arg(5).arg(QDateTime::fromTime_t(jEventTime).toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  314. }else if (serviceId==1004) {
  315. dbThread->appendAlarm(AlarmRep(deviceidx,
  316. QString("insert into sp_iw2017 (id, device_code, time, address, device_status,angle,voltage,data1, data3) values (NULL, '%1', '%2', '%3', '%4', '%5', '%6', '%7', '%8')")
  317. .arg(deviceidx).arg(QDateTime::fromTime_t(jEventTime).toString("yyyy-MM-dd HH:mm:ss")).arg(ip).arg(manhole_cover_position_state==0?2:3).arg(0).arg(battery_voltage).arg(manhole_cover_position_state==0?"6":"7").arg(QString(QJsonDocument(jPayload).toJson(QJsonDocument::Compact))),
  318. QString("%1").arg(QString::fromUtf8(manhole_cover_position_state==0?"满溢恢复":"满溢告警")),
  319. QDateTime::fromTime_t(jEventTime).toString("yyyy-MM-dd HH:mm:ss")),1);
  320. dbThread->appendSql(QString("insert into sp_iw%1 (id, device_id, iot_id, isRetrans, angleSensorStatus, tempSensorStatus, isRecover, openStatus, angle, rssi, voltage, temp, hum, rsrp, snr, service, addtime, notifytype, serviceId) values (NULL, '%1', '%2', '%3', '%4', %5, %6, %7, '%8', '%9', '%10', '%11', '%12', '%13', '%14', '%15', '%16', '%17', '%18')")
  321. .arg(deviceidx).arg(iotId).arg(0).arg(0).arg(0).arg(0).arg(manhole_cover_position_state).arg(0).arg(0).arg(battery_voltage).arg(0).arg(0).arg(0).arg(0).arg(0).arg(QDateTime::fromTime_t(jEventTime).toString("yyyy-MM-dd HH:mm:ss")).arg(0).arg(serviceId),1);
  322. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2', content='%3' where device_id='%4' and point_code=1")
  323. .arg(manhole_cover_position_state==0?"4":"1").arg(QDateTime::fromTime_t(jEventTime).toString("yyyy-MM-dd HH:mm:ss")).arg(QString::fromUtf8(manhole_cover_position_state==0?"满溢恢复":"满溢告警")).arg(deviceidx),1);
  324. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=2").arg(battery_voltage).arg(QDateTime::fromTime_t(jEventTime).toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  325. dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=3").arg(5).arg(QDateTime::fromTime_t(jEventTime).toString("yyyy-MM-dd HH:mm:ss")).arg(deviceidx),1);
  326. }
  327. }
  328. void MKCore::AlarmReport(QString addr, quint64 insertid, QString type, QString time)
  329. {
  330. UN_REFERENCED_PARAMETER(time);
  331. UN_REFERENCED_PARAMETER(type);
  332. QString phonelist = "";
  333. QString companyCode = "",eventCode = "",evt = "";
  334. QString deviceType= "",deviceName= "";//设备类型
  335. for(int i=0;i<10240;i++){
  336. if(QString::compare(QString(mkList->sensors[i].Device_Code),addr)==0){
  337. companyCode = QString(mkList->sensors[i].Company_Code);
  338. deviceType = QString(mkList->sensors[i].Device_Type);
  339. deviceName = QString(mkList->sensors[i].Device_Name);
  340. break;
  341. }
  342. }
  343. // QString rep2 = QString("{\"SubType\":2,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":0,\"CompanyCode\":\"%3\",\"evt_name\":\"%4\",\"evt\":0,\"alarm_time\":\"%5\"}")
  344. // .arg(addr).arg(insertid).arg(companyCode).arg(type).arg(time);
  345. // wssThread[repcur]->appendData(rep2);
  346. // repcur++
  347. // repcur &= 0x0f;
  348. if(companyCode.length()>0){
  349. for(int i=0;i<102400;i++){
  350. if(companyCode.compare(QString(sysConfShm->userInfo[i].CompanyCode))==0){
  351. QString phone = QString(sysConfShm->userInfo[i].CellPhone);
  352. if(phone.trimmed().length()>0){
  353. if(phonelist.length()==0)
  354. phonelist = phone;
  355. else
  356. phonelist.append(","+phone);
  357. }
  358. }
  359. }
  360. phonelist="17630065224";
  361. if(QString::compare(deviceType,"128")==0){
  362. if(phonelist.length()>0){
  363. if(QString::compare(type,"打开告警")==0){
  364. eventCode = "JG02";
  365. evt = "53";
  366. }else if(QString::compare(type,"打开恢复")==0){
  367. eventCode = "JG01";
  368. evt = "54";
  369. }else if(QString::compare(type,"满溢告警")==0){
  370. eventCode = "JG07";
  371. }else if(QString::compare(type,"满溢恢复")==0){
  372. eventCode = "JG06";
  373. }
  374. QString data1 = QString("device_code=%1&insert_id=%2&phone=%3&time=%4&evt_name=%5&evt=%6&bz=%7&user_from=water_form").arg(addr).arg(insertid).arg(phonelist).arg(time).arg(type).arg(eventCode).arg(deviceName)
  375. .replace(",","%2C").replace(":","%3A").replace(" ","+");
  376. wxThreads[2][wxcur&0x0f]->appendData(data1);//井盖告警微信推送
  377. wxThreads[3][wxcur&0x0f]->appendData(data1);//井盖告警语音推送
  378. wxcur++;
  379. wxcur &= 0x0f;
  380. QString rep = QString("{\"SubType\":128,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":false}").arg(addr).arg(insertid);
  381. repThread[repcur]->appendData(rep);
  382. QString rep2 = QString("{\"SubType\":128,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":0,\"CompanyCode\":\"%3\",\"evt_name\":\"%4\",\"evt\":\"%6\",\"EventCode\":\"%6\",\"alarm_time\":\"%5\"}")
  383. .arg(addr).arg(insertid).arg(companyCode).arg(type).arg(time).arg(evt);
  384. printf("rep2:%s\n",rep2.toUtf8().data());
  385. wssThread[repcur++]->appendData(rep2);
  386. repcur &= 0x0f;
  387. }
  388. }else {
  389. QString rep = QString("{\"SubType\":2,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":false}").arg(addr).arg(insertid);
  390. QString rep2 = QString("{\"SubType\":2,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":0,\"CompanyCode\":\"%3\",\"evt_name\":\"%4\",\"evt\":0,\"alarm_time\":\"%5\"}")
  391. .arg(addr).arg(insertid).arg(companyCode).arg(type).arg(time);
  392. repThread[repcur]->appendData(rep);//数据同步模块告警推送
  393. wssThread[repcur++]->appendData(rep2);
  394. repcur &= 0x0f;
  395. if(phonelist.length()>0){
  396. if(QString::compare(deviceType,"5")==0){
  397. QString data1 = QString("IEMI=%1&insert_id=%2&phone=%3&time=%4&evt_c=%5&user_from=water_form").arg(addr).arg(insertid).arg(phonelist).arg(time).arg(type)
  398. .replace(",","%2C").replace(":","%3A").replace(" ","+");
  399. wxThreads[0][wxcur&0x0f]->appendData(data1);//液位告警微信推送
  400. }else if(QString::compare(deviceType,"2")==0){
  401. QString data = QString("IEMI=%1&insert_id=%2&phone=%3&time=%4&evt_c=%5&user_from=water_form").arg(addr).arg(insertid).arg(phonelist).arg(time).arg(type)
  402. .replace(",","%2C").replace(":","%3A").replace(" ","+");
  403. wxThreads[1][wxcur&0x0f]->appendData(data);//水表告警微信推送
  404. }
  405. wxcur++;
  406. wxcur &= 0x0f;
  407. }
  408. }
  409. }
  410. }
  411. void MKCore::new_incomming(){
  412. QTcpSocket *so = svr->nextPendingConnection();
  413. connect(so,SIGNAL(readyRead()),this,SLOT(read_data()));
  414. }
  415. quint8 MKCore::hexstr_to_byte(QString dat)
  416. {
  417. quint8 tmp[2];
  418. QByteArray Dat = dat.toLower().toLatin1();
  419. quint8 temp;
  420. temp = Dat.at(0)&0xff;
  421. if((temp>=0x30)&&(temp<=0x39))
  422. tmp[0] = temp-0x30;
  423. else
  424. tmp[0] = temp-0x37;
  425. temp = Dat.at(1)&0xff;
  426. if((temp>=0x30)&&(temp<=0x39))
  427. tmp[1] = temp-0x30;
  428. else
  429. tmp[1] = temp-0x37;
  430. return static_cast<quint8>(((tmp[0]&0x0f)<<4)|(tmp[1]&0x0f));
  431. }
  432. void MKCore::checkDevice(QString deviceid)
  433. {
  434. if((DevIdx3>=0)&&(DevIdx3<10240))
  435. {
  436. if(QString::compare(deviceid,QString(mkList->sensors[DevIdx3].Device_Code))!=0)
  437. {
  438. DevIdx3 = -1;
  439. DeviceID3 = "";
  440. }
  441. }else{
  442. for(int i=0;i<10240;i++)
  443. {
  444. if(QString::compare(deviceid,QString(mkList->sensors[i].Device_Code))==0)
  445. {
  446. DevIdx3 = i;
  447. DeviceID3 = QString(mkList->sensors[i].Device_Code);
  448. break;
  449. }
  450. }
  451. }
  452. getCommData(QString("DevIdx3=====:%1").arg(DevIdx3));
  453. }
  454. void MKCore::check_cover_framedata(QJsonObject jPayload, QString deviceId, long etime, QString iotId, int serviceId)
  455. {
  456. int water_level_state=0,vib_freq=0,temperature=0,sensor_status=0,repackage=0,manhole_cover_position_state=0,lean_angle=0,installation_status=0,gas_type=0,gas_concentration=0;
  457. int sinr=0,rsrp=0,pci=0,ecl=0,cell_id=0;
  458. QString soft_ver = "",hardware_ver = "";
  459. double battery_voltage=0;
  460. if((!jPayload.value("water_level_state").isUndefined())&&(!jPayload.value("water_level_state").isNull())){
  461. if(jPayload.value("water_level_state").isString())
  462. water_level_state = jPayload.value("water_level_state").toString().toInt();
  463. else
  464. water_level_state = jPayload.value("water_level_state").toInt();
  465. }
  466. if((!jPayload.value("vib_freq").isUndefined())&&(!jPayload.value("vib_freq").isNull())){
  467. if(jPayload.value("vib_freq").isString())
  468. vib_freq = jPayload.value("vib_freq").toString().toInt();
  469. else
  470. vib_freq = jPayload.value("vib_freq").toInt();
  471. }
  472. if((!jPayload.value("temperature").isUndefined())&&(!jPayload.value("temperature").isNull())){
  473. if(jPayload.value("temperature").isString())
  474. temperature = jPayload.value("temperature").toString().toInt();
  475. else
  476. temperature = jPayload.value("temperature").toInt();
  477. }
  478. if((!jPayload.value("soft_ver").isUndefined())&&(!jPayload.value("soft_ver").isNull())){
  479. if(jPayload.value("soft_ver").isString())
  480. soft_ver = jPayload.value("soft_ver").toString();
  481. else
  482. soft_ver = QString("%1").arg(jPayload.value("soft_ver").toInt());
  483. }
  484. if((!jPayload.value("sensor_status").isUndefined())&&(!jPayload.value("sensor_status").isNull())){
  485. if(jPayload.value("sensor_status").isString())
  486. sensor_status = jPayload.value("sensor_status").toString().toInt();
  487. else
  488. sensor_status = jPayload.value("sensor_status").toInt();
  489. }
  490. if((!jPayload.value("repackage").isUndefined())&&(!jPayload.value("repackage").isNull())){
  491. if(jPayload.value("repackage").isString())
  492. repackage = jPayload.value("repackage").toString().toInt();
  493. else
  494. repackage = jPayload.value("repackage").toInt();
  495. }
  496. if((!jPayload.value("manhole_cover_position_state").isUndefined())&&(!jPayload.value("manhole_cover_position_state").isNull())){
  497. if(jPayload.value("manhole_cover_position_state").isString())
  498. manhole_cover_position_state = jPayload.value("manhole_cover_position_state").toString().toInt();
  499. else
  500. manhole_cover_position_state = jPayload.value("manhole_cover_position_state").toInt();
  501. }
  502. if((!jPayload.value("lean_angle").isUndefined())&&(!jPayload.value("lean_angle").isNull())){
  503. if(jPayload.value("lean_angle").isString())
  504. lean_angle = jPayload.value("lean_angle").toString().toInt();
  505. else
  506. lean_angle = jPayload.value("lean_angle").toInt();
  507. }
  508. if((!jPayload.value("installation_status").isUndefined())&&(!jPayload.value("installation_status").isNull())){
  509. if(jPayload.value("installation_status").isString())
  510. installation_status = jPayload.value("installation_status").toString().toInt();
  511. else
  512. installation_status = jPayload.value("installation_status").toInt();
  513. }
  514. if((!jPayload.value("hardware_ver").isUndefined())&&(!jPayload.value("hardware_ver").isNull())){
  515. if(jPayload.value("hardware_ver").isString())
  516. hardware_ver = jPayload.value("hardware_ver").toString();
  517. else
  518. hardware_ver = QString("%1").arg(jPayload.value("hardware_ver").toInt());
  519. }
  520. if((!jPayload.value("gas_type").isUndefined())&&(!jPayload.value("gas_type").isNull())){
  521. if(jPayload.value("gas_type").isString())
  522. gas_type = jPayload.value("gas_type").toString().toInt();
  523. else
  524. gas_type = jPayload.value("gas_type").toInt();
  525. }
  526. if((!jPayload.value("gas_concentration").isUndefined())&&(!jPayload.value("gas_concentration").isNull())){
  527. if(jPayload.value("gas_concentration").isString())
  528. gas_concentration = jPayload.value("gas_concentration").toString().toInt();
  529. else
  530. gas_concentration = jPayload.value("gas_concentration").toInt();
  531. }
  532. if((!jPayload.value("battery_voltage").isUndefined())&&(!jPayload.value("battery_voltage").isNull())){
  533. if(jPayload.value("battery_voltage").isString())
  534. battery_voltage = jPayload.value("battery_voltage").toString().toDouble();
  535. else
  536. battery_voltage = jPayload.value("battery_voltage").toDouble();
  537. }
  538. if((!jPayload.value("sinr").isUndefined())&&(!jPayload.value("sinr").isNull())){
  539. if(jPayload.value("sinr").isString())
  540. sinr = jPayload.value("sinr").toString().toInt();
  541. else
  542. sinr = jPayload.value("sinr").toInt();
  543. }
  544. if((!jPayload.value("rsrp").isUndefined())&&(!jPayload.value("rsrp").isNull())){
  545. if(jPayload.value("rsrp").isString())
  546. rsrp = jPayload.value("rsrp").toString().toInt();
  547. else
  548. rsrp = jPayload.value("rsrp").toInt();
  549. }
  550. if((!jPayload.value("pci").isUndefined())&&(!jPayload.value("pci").isNull())){
  551. if(jPayload.value("pci").isString())
  552. pci = jPayload.value("pci").toString().toInt();
  553. else
  554. pci = jPayload.value("pci").toInt();
  555. }
  556. if((!jPayload.value("ecl").isUndefined())&&(!jPayload.value("ecl").isNull())){
  557. if(jPayload.value("ecl").isString())
  558. ecl = jPayload.value("ecl").toString().toInt();
  559. else
  560. ecl = jPayload.value("ecl").toInt();
  561. }
  562. if((!jPayload.value("cell_id").isUndefined())&&(!jPayload.value("cell_id").isNull())){
  563. if(jPayload.value("cell_id").isString())
  564. cell_id = jPayload.value("cell_id").toString().toInt();
  565. else
  566. cell_id = jPayload.value("cell_id").toInt();
  567. }
  568. if(serviceId==1){
  569. getCoverValue(deviceId,iotId,repackage,sensor_status, manhole_cover_position_state,lean_angle,battery_voltage,temperature,etime,serviceId);
  570. QJsonObject hsData1,hsData,hsData21,hsData20;
  571. QJsonArray flucDatas,flucDatas1,flucDatas20,flucDatas21;
  572. QJsonObject hsData2,hsData3,hsData4,hsData5,hsData6;
  573. for(int i=0;i<10240;i++){
  574. if(QString::compare(QString(mkList->sensors[i].Device_Code),deviceId)==0){
  575. hsData1.insert("devId", deviceId);
  576. hsData1.insert("connType", "N");
  577. hsData1.insert("deviceName", mkList->sensors[i].Device_Name);
  578. hsData2.insert("property", "电量");
  579. hsData2.insert("serial", "12801");
  580. hsData2.insert("value", (QString::number(battery_voltage,'f',4)).toDouble());
  581. hsData3.insert("property", "信号");
  582. hsData3.insert("serial", "12802");
  583. hsData3.insert("value", 5);
  584. hsData4.insert("property", "液位");
  585. hsData4.insert("serial", "12803");
  586. hsData4.insert("value", 0);
  587. hsData5.insert("property", "井盖状态");
  588. hsData5.insert("serial", "12804");
  589. hsData5.insert("value", 0);
  590. hsData6.insert("property", "角度");
  591. hsData6.insert("serial", "12805");
  592. hsData6.insert("value", lean_angle);
  593. flucDatas1.append(hsData2);
  594. flucDatas1.append(hsData3);
  595. flucDatas1.append(hsData4);
  596. flucDatas1.append(hsData5);
  597. flucDatas1.append(hsData6);
  598. hsData.insert("dp", flucDatas1);
  599. hsData.insert("deviceName", mkList->sensors[i].Device_Name);
  600. QString dataTimeStamp1=QString("%1").arg(etime);
  601. hsData.insert("timeStamp", dataTimeStamp1);
  602. hsData.insert("deviceType", mkList->sensors[i].Device_Type);
  603. hsData.insert("deviceModel", "AZ-M90118");
  604. hsData.insert("devId", deviceId);
  605. flucDatas.append(hsData);
  606. hsData1.insert("devs", flucDatas);
  607. hsData1.insert("type", "INFO");
  608. hsData1.insert("timeStamp", dataTimeStamp1);
  609. QString dataMqtt = QString(QJsonDocument(hsData1).toJson());
  610. if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
  611. QString companyCode = "";
  612. QString infoTopic = QString("/usky/ytDP0008/%1/%2/info").arg(mkList->sensors[i].Company_Code).arg(deviceId);
  613. m_client->publish(QMQTT::Message(mqttinfoIdx++,infoTopic,dataMqtt.toUtf8()));
  614. if(mqttinfoIdx>9999)
  615. mqttinfoIdx = 1;
  616. }else if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
  617. m_client->connectToHost();
  618. QString infoTopic = QString("/usky/ytDP0008/%1/%2/info").arg(mkList->sensors[i].Company_Code).arg(deviceId);
  619. m_client->publish(QMQTT::Message(mqttinfoIdx++,infoTopic,dataMqtt.toUtf8()));
  620. if(mqttinfoIdx>9999)
  621. mqttinfoIdx = 1;
  622. }
  623. break;
  624. }
  625. }
  626. }else if(serviceId==2){
  627. dbThread->appendSql(QString::fromUtf8("update sp_iw%1 set rssi='%2', snr='%3' ORDER BY id DESC LIMIT 1").arg(deviceId).arg(rsrp).arg(sinr),1);
  628. }
  629. }
  630. void MKCore::check_framedata(QString data, QString jDevicecode, QString ip)
  631. {
  632. QString table = "";
  633. bool judge = false;
  634. int len = data.length()/2;
  635. QByteArray Dat = QByteArray(len,0x00);
  636. for(int i=0;i<len;i++){
  637. Dat[i] = static_cast<char>(hexstr_to_byte(data.mid(i*2,2))&0xff);
  638. }
  639. if(((Dat[0]&0xff)==0xa5)&&((Dat[len-1]&0xff)==0xaa)&&((Dat[len-2]&0xff)==0x55)&&((Dat[1]&0xff)==0x5a)){
  640. getCommData(QString("NBdata3=====:%1")
  641. .arg(data));
  642. // QDateTime stime = QDateTime::fromTime_t(static_cast<uint>(((Dat[2]&0x000000ff)<<24)|((Dat[3]&0x000000ff)<<16)|((Dat[4]&0x000000ff)<<8)|(Dat[5]&0x000000ff)));
  643. quint16 bodyLen = static_cast<quint16>(((Dat[3]&0x00ff)<<8)|(Dat[4]&0x00ff));
  644. table.append( QString("bodyLen:%1,").arg(bodyLen));
  645. QString device_code = "";
  646. for(int i=5;i<17;i++){
  647. device_code.append( QString("%1").arg(Dat[i]&0xff,2,16,QLatin1Char('0')));
  648. }
  649. table.append( QString("device_code:%1,").arg(device_code));
  650. int batteryLevel = 0;
  651. batteryLevel = (Dat[17] & 0x1F) * 5;
  652. table.append( QString("batteryLevel:%1,").arg(batteryLevel));
  653. if((Dat[17] & 0xE0)==0x00){
  654. table.append( QString("供电状态:%1,").arg("供电异常"));
  655. }else if((Dat[17] & 0x80)==0x00){
  656. table.append( QString("供电状态:%1,").arg("电池供电"));
  657. }else if((Dat[17] & 0x80)==0x80){
  658. table.append( QString("供电状态:%1,").arg("外部供电"));
  659. }else{
  660. table.append( QString("供电状态:%1,").arg("双供电"));
  661. }
  662. int signal = (int)Dat[18];
  663. table.append( QString("signal:%1,").arg(signal));
  664. //记录时间间隔
  665. quint16 recordGap = static_cast<quint16>(((Dat[19]&0x00ff)<<8)|(Dat[20]&0x00ff));
  666. table.append( QString("recordGap:%1,").arg(recordGap));
  667. //记录条数
  668. quint16 recordSize = static_cast<quint16>(((Dat[21]&0x00ff)<<8)|(Dat[22]&0x00ff));
  669. table.append( QString("recordSize:%1,").arg(recordSize));
  670. QString sb[] = {"压力表0.1kPa", "压力表0.001MPa", "压力表0.01BAR",
  671. "压力表0.01PSI", "压力表1Pa", "压力表1mBAR", "压力表0.01Kgf/cm²",
  672. "压力表0.01mmHg", "液位表0.01m", "液位表0.1cm", "液位表1mm", "温度表0.1℃",
  673. "温度表0.1℉", "湿度表0.1%RH", "电流表0.1A", "电压表0.1V",
  674. "差压表(静压0.01MPa、差压0.01kPa)", "温压表(压力0.001MPa、温度0.1℃)",
  675. "温湿度表(温度0.1℃、湿度0.1%RH)", "振动", "水浸","差压表(差压1kPa、静压0.001MPa)","未知23","未知24","未知25","未知26",
  676. "未知27","未知28","未知29","未知30","未知31","未知32","未知33","未知34","未知35","未知36","未知37","未知38","未知39","未知40","井盖液位"};
  677. double sb1[] = { 0.1, 0.001, 0.01, 0.01, 1, 1, 0.01, 0.01, 0.01,
  678. 0.1, 1, 0.1, 0.1, 0.1, 0.01, 0.01, 0.01, 0.001, 0.1, 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0.001,1,1,1,1,1,0.01 };
  679. QString deviceTypeStr = QString("%1").arg(Dat[23]&0xff,2,10,QChar('0'));
  680. int deviceType = deviceTypeStr.toInt();
  681. QString deviceTypeByte = QString("%1").arg(deviceType,8,2,QChar('0'));
  682. table.append( QString("deviceType:%1,").arg(sb[deviceType]));
  683. int alarmLower = static_cast<quint16>(((Dat[25]&0x00ff)<<8)|(Dat[26]&0x00ff));
  684. int alarmLower1=alarmLower;
  685. table.append( QString("alarmLower:%1,").arg(alarmLower1*sb1[deviceType]));
  686. quint16 alarmUpper = static_cast<quint16>(((Dat[27]&0x00ff)<<8)|(Dat[28]&0x00ff));
  687. int alarmUpper1=alarmUpper;
  688. table.append( QString("alarmUpper:%1,").arg(alarmUpper1*sb1[deviceType]));
  689. quint16 dataNow = static_cast<quint16>(((Dat[29]&0x00ff)<<8)|(Dat[30]&0x00ff));
  690. double dataNow1=dataNow*sb1[deviceType];
  691. table.append( QString("dataNow:%1,").arg(dataNow1));
  692. QDateTime dataTime = QDateTime::fromTime_t(static_cast<uint>(((Dat[31]&0x000000ff)<<24)|((Dat[32]&0x000000ff)<<16)|((Dat[33]&0x000000ff)<<8)|(Dat[34]&0x000000ff)));
  693. time_t dataTimeStamp = dataTime.toTime_t();
  694. time_t myt=time(NULL);
  695. time_t timeDiff = myt-dataTimeStamp;
  696. if(timeDiff>30){
  697. dataTime=QDateTime::fromTime_t(myt);
  698. dataTimeStamp=myt;
  699. }
  700. table.append( QString("dataTime:%1,").arg(dataTime.toString("yyyy-MM-dd HH:mm:ss")));
  701. QString dataOver = "";
  702. for(int i=35;i<(bodyLen-4);i++){
  703. dataOver.append( QString("%1").arg(Dat[i]&0xff,2,16,QLatin1Char('0')));
  704. }
  705. table.append( QString("dataOver:%1,").arg(dataOver));
  706. QString alarm_state = "";
  707. QString sensor_state = "";
  708. QString battery_alarm = "";
  709. // 报警状态
  710. quint16 deviceStatus = static_cast<quint16>((Dat[24]&0xff));
  711. QString deviceStatuser = QString::number(deviceStatus,2);
  712. QString deviceStatuserStr;
  713. int len = 8-deviceStatuser.length();
  714. for(int i=0;i<len;i++){
  715. deviceStatuser=QString("%1%2").arg(0).arg(deviceStatuser);
  716. }
  717. QJsonObject heartBeatData,alarmData;
  718. if(deviceType==40){
  719. int str = deviceStatuser.mid(7,1).toInt();
  720. int str1 = deviceStatuser.mid(6,1).toInt();
  721. int str2 = deviceStatuser.mid(5,1).toInt();
  722. int str3 = deviceStatuser.mid(4,1).toInt();
  723. int str4 = deviceStatuser.mid(3,1).toInt();
  724. int str5 = deviceStatuser.mid(2,1).toInt();
  725. int str6 = deviceStatuser.mid(1,1).toInt();
  726. int str7 = deviceStatuser.mid(0,1).toInt();
  727. QString bjstr = "";
  728. QJsonObject hsData1,hsData,hsData21,hsData20;
  729. QJsonArray flucDatas,flucDatas1,flucDatas20,flucDatas21;
  730. for(int i=0;i<10240;i++){
  731. if(QString::compare(QString(mkList->sensors[i].Device_Code),jDevicecode)==0){
  732. hsData1.insert("devId", jDevicecode);
  733. hsData1.insert("connType", "N");
  734. hsData1.insert("deviceName", mkList->sensors[i].Device_Name);
  735. if(deviceStatus==0){
  736. QJsonObject hsData2,hsData3,hsData4,hsData5,hsData6;
  737. hsData2.insert("property", "电量");
  738. hsData2.insert("serial", "12801");
  739. hsData2.insert("value", batteryLevel);
  740. hsData3.insert("property", "信号");
  741. hsData3.insert("serial", "12802");
  742. hsData3.insert("value", signal);
  743. hsData4.insert("property", "液位");
  744. hsData4.insert("serial", "12803");
  745. hsData4.insert("value", dataNow1);
  746. hsData5.insert("property", "井盖状态");
  747. hsData5.insert("serial", "12804");
  748. hsData5.insert("value", 0);
  749. hsData6.insert("property", "角度");
  750. hsData6.insert("serial", "12805");
  751. hsData6.insert("value", "");
  752. flucDatas1.append(hsData2);
  753. flucDatas1.append(hsData3);
  754. flucDatas1.append(hsData4);
  755. flucDatas1.append(hsData5);
  756. flucDatas1.append(hsData6);
  757. hsData.insert("dp", flucDatas1);
  758. hsData.insert("deviceName", mkList->sensors[i].Device_Name);
  759. QString dataTimeStamp1=QString("%1").arg(dataTimeStamp);
  760. hsData.insert("timeStamp", dataTimeStamp1);
  761. hsData.insert("deviceType", mkList->sensors[i].Device_Type);
  762. hsData.insert("deviceModel", "MEOKON");
  763. hsData.insert("devId", jDevicecode);
  764. flucDatas.append(hsData);
  765. hsData1.insert("devs", flucDatas);
  766. hsData1.insert("type", "INFO");
  767. hsData1.insert("timeStamp", dataTimeStamp1);
  768. QString dataMqtt = QString(QJsonDocument(hsData1).toJson());
  769. if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
  770. QString companyCode = "";
  771. QString infoTopic = QString("/usky/ytDP0008/%1/%2/info").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  772. m_client->publish(QMQTT::Message(mqttinfoIdx++,infoTopic,dataMqtt.toUtf8()));
  773. if(mqttinfoIdx>9999)
  774. mqttinfoIdx = 1;
  775. }else if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
  776. m_client->connectToHost();
  777. QString infoTopic = QString("/usky/ytDP0008/%1/%2/info").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  778. m_client->publish(QMQTT::Message(mqttinfoIdx++,infoTopic,dataMqtt.toUtf8()));
  779. if(mqttinfoIdx>9999)
  780. mqttinfoIdx = 1;
  781. }
  782. QJsonObject hsData22,hsData23,hsData24,hsData25;
  783. hsData22.insert("property", "电池");
  784. hsData22.insert("serial", "65");
  785. hsData22.insert("value", batteryLevel);
  786. hsData23.insert("property", "信号");
  787. hsData23.insert("serial", "66");
  788. hsData23.insert("value", signal);
  789. hsData24.insert("property", "液位");
  790. hsData24.insert("serial", "67");
  791. hsData24.insert("value", dataNow1);
  792. hsData25.insert("property", "井盖状态");
  793. hsData25.insert("serial", "68");
  794. hsData25.insert("value", 0);
  795. flucDatas21.append(hsData22);
  796. flucDatas21.append(hsData23);
  797. flucDatas21.append(hsData24);
  798. flucDatas21.append(hsData25);
  799. hsData20.insert("dp", flucDatas21);
  800. hsData20.insert("deviceName", mkList->sensors[i].Device_Name);
  801. QString dataTimeStamp21=QString("%1").arg(dataTimeStamp);
  802. hsData20.insert("timeStamp", dataTimeStamp21);
  803. hsData20.insert("deviceType", 22);
  804. hsData20.insert("deviceModel", "MEOKON");
  805. hsData20.insert("devId", jDevicecode);
  806. flucDatas20.append(hsData20);
  807. hsData21.insert("devs", flucDatas20);
  808. hsData21.insert("type", "INFO");
  809. hsData21.insert("timeStamp", dataTimeStamp21);
  810. QString data2Mqtt = QString(QJsonDocument(hsData21).toJson());
  811. if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
  812. QString companyCode = "";
  813. QString infoTopic = QString("/usky/%1/%2/info").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  814. m_client->publish(QMQTT::Message(mqttinfoIdx++,infoTopic,data2Mqtt.toUtf8()));
  815. if(mqttinfoIdx>9999)
  816. mqttinfoIdx = 1;
  817. }else if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
  818. m_client->connectToHost();
  819. QString infoTopic = QString("/usky/%1/%2/info").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  820. m_client->publish(QMQTT::Message(mqttinfoIdx++,infoTopic,data2Mqtt.toUtf8()));
  821. if(mqttinfoIdx>9999)
  822. mqttinfoIdx = 1;
  823. }
  824. bjstr += "正常 ";
  825. alarm_state = "正常";
  826. judge = true;
  827. getValue(jDevicecode,"MC0",batteryLevel,signal,dataNow1,ip,dataTime);
  828. getOnLine(jDevicecode,true,dataTime);
  829. }else{
  830. if(str==1){
  831. QJsonObject hsData2;
  832. hsData2.insert("property", "低水位");
  833. hsData2.insert("serial", "12821");
  834. hsData2.insert("value", dataNow1);
  835. hsData2.insert("status", "0");
  836. hsData2.insert("type", "MC1");
  837. hsData2.insert("battery", batteryLevel);
  838. hsData2.insert("signal", signal);
  839. hsData2.insert("angle", "");
  840. flucDatas1.append(hsData2);
  841. bjstr += "下限报警 ";
  842. alarm_state = "下限报警";
  843. judge = true;
  844. getAlarm(jDevicecode,"MC1",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("低水位"),dataTime);
  845. getOnLine(jDevicecode,true,dataTime);
  846. }
  847. if(str1==1){
  848. QJsonObject hsData2;
  849. hsData2.insert("property", "高水位");
  850. hsData2.insert("serial", "12822");
  851. hsData2.insert("value", dataNow1);
  852. hsData2.insert("status", "0");
  853. hsData2.insert("type", "MC2");
  854. hsData2.insert("battery", batteryLevel);
  855. hsData2.insert("signal", signal);
  856. hsData2.insert("angle", "");
  857. flucDatas1.append(hsData2);
  858. bjstr += "上限报警 ";
  859. alarm_state = "上限报警";
  860. judge = true;
  861. getAlarm(jDevicecode,"MC2",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("高水位"),dataTime);
  862. getOnLine(jDevicecode,true,dataTime);
  863. }
  864. if(str2==1){
  865. QJsonObject hsData2;
  866. hsData2.insert("property", "电量报警");
  867. hsData2.insert("serial", "12823");
  868. hsData2.insert("value", batteryLevel);
  869. hsData2.insert("status", "0");
  870. hsData2.insert("type", "MC3");
  871. hsData2.insert("battery", batteryLevel);
  872. hsData2.insert("signal", signal);
  873. hsData2.insert("angle", "");
  874. flucDatas1.append(hsData2);
  875. bjstr += "电量报警 ";
  876. alarm_state = "电量报警";
  877. judge = true;
  878. getAlarm(jDevicecode,"MC3",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("电量报警"),dataTime);
  879. getOnLine(jDevicecode,true,dataTime);
  880. }
  881. if(str3==1){
  882. QJsonObject hsData2;
  883. hsData2.insert("property", "传感器异常");
  884. hsData2.insert("serial", "12824");
  885. hsData2.insert("value", "1");
  886. hsData2.insert("status", "0");
  887. hsData2.insert("type", "MC3");
  888. hsData2.insert("battery", batteryLevel);
  889. hsData2.insert("signal", signal);
  890. hsData2.insert("angle", "");
  891. flucDatas1.append(hsData2);
  892. bjstr += "传感器异常 ";
  893. alarm_state = "传感器异常";
  894. judge = true;
  895. getAlarm(jDevicecode,"MC3",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("传感器异常"),dataTime);
  896. getOnLine(jDevicecode,true,dataTime);
  897. }
  898. if(str7==1){
  899. QJsonObject hsData2;
  900. hsData2.insert("property", "井盖开启");
  901. hsData2.insert("serial", "12825");
  902. hsData2.insert("value", "1");
  903. hsData2.insert("status", "0");
  904. hsData2.insert("type", "MC4");
  905. hsData2.insert("battery", batteryLevel);
  906. hsData2.insert("signal", signal);
  907. hsData2.insert("angle", "");
  908. flucDatas1.append(hsData2);
  909. bjstr += "井盖开启 ";
  910. alarm_state = "井盖开启";
  911. judge = true;
  912. getAlarm(jDevicecode,"MC4",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("井盖开启"),dataTime);
  913. getOnLine(jDevicecode,true,dataTime);
  914. }
  915. if(str4==1){
  916. bjstr += "网关连接异常 ";
  917. alarm_state = "网关连接异常";
  918. judge = true;
  919. getAlarm(jDevicecode,"MC5",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("网关连接异常"),dataTime);
  920. getOnLine(jDevicecode,true,dataTime);
  921. }
  922. if(str5==1){
  923. bjstr += "第二传感器下限报警 ";
  924. alarm_state = "第二传感器下限报警";
  925. judge = true;
  926. getAlarm(jDevicecode,"MC6",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("第二传感器下限报警"),dataTime);
  927. getOnLine(jDevicecode,true,dataTime);
  928. }
  929. if(str6==1){
  930. bjstr += "第二传感器上限报警 ";
  931. alarm_state = "第二传感器上限报警";
  932. judge = true;
  933. getAlarm(jDevicecode,"MC7",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("第二传感器上限报警"),dataTime);
  934. getOnLine(jDevicecode,true,dataTime);
  935. }
  936. hsData.insert("dp", flucDatas1);
  937. hsData.insert("deviceName", mkList->sensors[i].Device_Name);
  938. QString dataTimeStamp1=QString("%1").arg(dataTimeStamp);
  939. hsData.insert("timeStamp", dataTimeStamp1);
  940. hsData.insert("deviceType", mkList->sensors[i].Device_Type);
  941. hsData.insert("deviceModel", "MEOKON");
  942. hsData.insert("devId", jDevicecode);
  943. flucDatas.append(hsData);
  944. hsData1.insert("alarams", flucDatas);
  945. hsData1.insert("type", "ALARM");
  946. hsData1.insert("timeStamp", dataTimeStamp1);
  947. // if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
  948. // QString topic = QString("/usky/%1/%2/alarm").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  949. // m_client->subscribe(topic,0);
  950. // if(mqttIdx>9999)
  951. // mqttIdx = 1;
  952. // }else if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
  953. // m_client->connectToHost();
  954. // QString topic = QString("/usky/%1/%2/alarm").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  955. // m_client->subscribe(topic,0);
  956. // if(mqttIdx>9999)
  957. // mqttIdx = 1;
  958. // }
  959. QString dataMqtt = QString(QJsonDocument(hsData1).toJson());
  960. if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
  961. QString topic = QString("/usky/ytDP0008/%1/%2/alarm").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  962. m_client->publish(QMQTT::Message(mqttalarmIdx++,topic,dataMqtt.toUtf8()));
  963. if(mqttalarmIdx>9999)
  964. mqttalarmIdx = 1;
  965. }else if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
  966. m_client->connectToHost();
  967. QString topic = QString("/usky/ytDP0008/%1/%2/alarm").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  968. m_client->publish(QMQTT::Message(mqttalarmIdx++,topic,dataMqtt.toUtf8()));
  969. if(mqttalarmIdx>9999)
  970. mqttalarmIdx = 1;
  971. }
  972. if(str==1){
  973. QJsonObject hsData2;
  974. hsData2.insert("property", "液位下限报警");
  975. hsData2.insert("serial", 3);
  976. hsData2.insert("value", dataNow1);
  977. hsData2.insert("status", 0);
  978. flucDatas21.append(hsData2);
  979. bjstr += "下限报警 ";
  980. alarm_state = "下限报警";
  981. judge = true;
  982. getAlarm(jDevicecode,"MC1",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("低水位"),dataTime);
  983. getOnLine(jDevicecode,true,dataTime);
  984. }
  985. if(str1==1){
  986. QJsonObject hsData2;
  987. hsData2.insert("property", "液位上限报警");
  988. hsData2.insert("serial", 3);
  989. hsData2.insert("value", dataNow1);
  990. hsData2.insert("status", 0);
  991. flucDatas21.append(hsData2);
  992. bjstr += "上限报警 ";
  993. alarm_state = "上限报警";
  994. judge = true;
  995. getAlarm(jDevicecode,"MC2",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("高水位"),dataTime);
  996. getOnLine(jDevicecode,true,dataTime);
  997. }
  998. if(str2==1){
  999. QJsonObject hsData2;
  1000. hsData2.insert("property", "电池电量报警");
  1001. hsData2.insert("serial", 4);
  1002. hsData2.insert("value", batteryLevel);
  1003. hsData2.insert("status", 0);
  1004. flucDatas21.append(hsData2);
  1005. bjstr += "电量报警 ";
  1006. alarm_state = "电量报警";
  1007. judge = true;
  1008. getAlarm(jDevicecode,"MC3",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("电量报警"),dataTime);
  1009. getOnLine(jDevicecode,true,dataTime);
  1010. }
  1011. if(str3==1){
  1012. QJsonObject hsData2;
  1013. hsData2.insert("property", "传感器异常");
  1014. hsData2.insert("serial", 32);
  1015. hsData2.insert("value", 1);
  1016. hsData2.insert("status", 0);
  1017. flucDatas21.append(hsData2);
  1018. bjstr += "传感器异常 ";
  1019. alarm_state = "传感器异常";
  1020. judge = true;
  1021. getAlarm(jDevicecode,"MC3",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("传感器异常"),dataTime);
  1022. getOnLine(jDevicecode,true,dataTime);
  1023. }
  1024. if(str7==1){
  1025. QJsonObject hsData2;
  1026. hsData2.insert("property", "井盖状态");
  1027. hsData2.insert("serial", 2);
  1028. hsData2.insert("value", 1);
  1029. hsData2.insert("status", 0);
  1030. flucDatas21.append(hsData2);
  1031. bjstr += "井盖开启 ";
  1032. alarm_state = "井盖开启";
  1033. judge = true;
  1034. getAlarm(jDevicecode,"MC4",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("井盖开启"),dataTime);
  1035. getOnLine(jDevicecode,true,dataTime);
  1036. }
  1037. if(str4==1){
  1038. bjstr += "网关连接异常 ";
  1039. alarm_state = "网关连接异常";
  1040. judge = true;
  1041. getAlarm(jDevicecode,"MC5",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("网关连接异常"),dataTime);
  1042. getOnLine(jDevicecode,true,dataTime);
  1043. }
  1044. if(str5==1){
  1045. bjstr += "第二传感器下限报警 ";
  1046. alarm_state = "第二传感器下限报警";
  1047. judge = true;
  1048. getAlarm(jDevicecode,"MC6",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("第二传感器下限报警"),dataTime);
  1049. getOnLine(jDevicecode,true,dataTime);
  1050. }
  1051. if(str6==1){
  1052. bjstr += "第二传感器上限报警 ";
  1053. alarm_state = "第二传感器上限报警";
  1054. judge = true;
  1055. getAlarm(jDevicecode,"MC7",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("第二传感器上限报警"),dataTime);
  1056. getOnLine(jDevicecode,true,dataTime);
  1057. }
  1058. hsData20.insert("dp", flucDatas21);
  1059. hsData20.insert("deviceName", mkList->sensors[i].Device_Name);
  1060. QString dataTimeStamp21=QString("%1").arg(dataTimeStamp);
  1061. hsData20.insert("timeStamp", dataTimeStamp21);
  1062. hsData20.insert("deviceType", 22);
  1063. hsData20.insert("deviceModel", "MEOKON");
  1064. hsData20.insert("devId", jDevicecode);
  1065. flucDatas20.append(hsData20);
  1066. hsData21.insert("alarms", flucDatas20);
  1067. hsData21.insert("type", "ALARM");
  1068. hsData21.insert("timeStamp", dataTimeStamp21);
  1069. QString data2Mqtt = QString(QJsonDocument(hsData21).toJson());
  1070. if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
  1071. QString topic = QString("/usky/%1/%2/alarm").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  1072. m_client->publish(QMQTT::Message(mqttalarmIdx++,topic,data2Mqtt.toUtf8()));
  1073. if(mqttalarmIdx>9999)
  1074. mqttalarmIdx = 1;
  1075. }else if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
  1076. m_client->connectToHost();
  1077. QString topic = QString("/usky/%1/%2/alarm").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  1078. m_client->publish(QMQTT::Message(mqttalarmIdx++,topic,data2Mqtt.toUtf8()));
  1079. if(mqttalarmIdx>9999)
  1080. mqttalarmIdx = 1;
  1081. }
  1082. }
  1083. break;
  1084. }
  1085. }
  1086. }else{
  1087. QByteArray Dat1 = QByteArray(1,0x00);
  1088. Dat1[0] = static_cast<char>(Dat[24]);
  1089. QString portString1(Dat1.toHex());
  1090. table.append( QString("deviceStatus:%1,").arg(portString1));
  1091. QJsonObject hsData1,hsData;
  1092. QJsonArray flucDatas,flucDatas1;
  1093. for(int i=0;i<10240;i++){
  1094. if(QString::compare(QString(mkList->sensors[i].Device_Code),jDevicecode)==0){
  1095. hsData1.insert("devId", jDevicecode);
  1096. hsData1.insert("connType", "N");
  1097. hsData1.insert("deviceName", mkList->sensors[i].Device_Name);
  1098. QString bjstr = "";
  1099. if (deviceStatus == 0) {
  1100. QJsonObject hsData2,hsData3,hsData4,hsData5;
  1101. bjstr += "正常 ";
  1102. alarm_state = "状态正常";
  1103. getCommData(QString("NBtable18=====:%1++++++++++++++++++%2")
  1104. .arg("table").arg(deviceType));
  1105. if(deviceType == 1 || deviceType == 34){
  1106. getValue(jDevicecode,"WP0",batteryLevel,signal,dataNow1,ip,dataTime);
  1107. hsData2.insert("property", "电量");
  1108. hsData2.insert("serial", "201");
  1109. hsData2.insert("value", batteryLevel);
  1110. hsData3.insert("property", "信号");
  1111. hsData3.insert("serial", "202");
  1112. hsData3.insert("value", signal);
  1113. hsData4.insert("property", "水压");
  1114. hsData4.insert("serial", "203");
  1115. hsData4.insert("value", dataNow1);
  1116. hsData5.insert("property", "状态");
  1117. hsData5.insert("serial", "204");
  1118. hsData5.insert("value", "WP0");
  1119. getOnLine(jDevicecode,true,dataTime);
  1120. }else if (deviceType == 8){
  1121. getCommData(QString("NBtable8=====:%1++++++++++++++++++%2")
  1122. .arg("table").arg(deviceType));
  1123. getValue(jDevicecode,"LL0",batteryLevel,signal,dataNow1,ip,dataTime);
  1124. hsData2.insert("property", "电量");
  1125. hsData2.insert("serial", "501");
  1126. hsData2.insert("value", batteryLevel);
  1127. hsData3.insert("property", "信号");
  1128. hsData3.insert("serial", "502");
  1129. hsData3.insert("value", signal);
  1130. hsData4.insert("property", "水位");
  1131. hsData4.insert("serial", "503");
  1132. hsData4.insert("value", dataNow1);
  1133. hsData5.insert("property", "状态");
  1134. hsData5.insert("serial", "504");
  1135. hsData5.insert("value", "LL0");
  1136. getOnLine(jDevicecode,true,dataTime);
  1137. }
  1138. flucDatas1.append(hsData2);
  1139. flucDatas1.append(hsData3);
  1140. flucDatas1.append(hsData4);
  1141. flucDatas1.append(hsData5);
  1142. hsData.insert("dp", flucDatas1);
  1143. hsData.insert("deviceName", mkList->sensors[i].Device_Name);
  1144. QString dataTimeStamp1=QString("%1").arg(dataTimeStamp);
  1145. hsData.insert("timeStamp", dataTimeStamp1);
  1146. hsData.insert("deviceType", mkList->sensors[i].Device_Type);
  1147. hsData.insert("deviceModel", "");
  1148. hsData.insert("devId", jDevicecode);
  1149. flucDatas.append(hsData);
  1150. hsData1.insert("devs", flucDatas);
  1151. hsData1.insert("type", "INFO");
  1152. hsData1.insert("timeStamp", dataTimeStamp1);
  1153. QString dataMqtt = QString(QJsonDocument(hsData1).toJson());
  1154. if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
  1155. QString companyCode = "";
  1156. QString infoTopic = QString("/usky/ytDP0008/%1/%2/info").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  1157. m_client->publish(QMQTT::Message(mqttinfoIdx++,infoTopic,dataMqtt.toUtf8()));
  1158. if(mqttinfoIdx>9999)
  1159. mqttinfoIdx = 1;
  1160. }else if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
  1161. m_client->connectToHost();
  1162. QString infoTopic = QString("/usky/ytDP0008/%1/%2/info").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  1163. m_client->publish(QMQTT::Message(mqttinfoIdx++,infoTopic,dataMqtt.toUtf8()));
  1164. if(mqttinfoIdx>9999)
  1165. mqttinfoIdx = 1;
  1166. }
  1167. }else{
  1168. if ((Dat[24] & 0x01) == 0x01) {
  1169. bjstr += "下限报警 ";
  1170. alarm_state = "下限报警";
  1171. judge = true;
  1172. if(deviceType==1 || deviceType == 34){
  1173. QJsonObject hsData2;
  1174. hsData2.insert("property", "低压");
  1175. hsData2.insert("serial", "221");
  1176. hsData2.insert("value", dataNow1);
  1177. hsData2.insert("status", "0");
  1178. hsData2.insert("type", "WP1");
  1179. hsData2.insert("battery", batteryLevel);
  1180. hsData2.insert("signal", signal);
  1181. flucDatas1.append(hsData2);
  1182. getAlarm(jDevicecode,"WP1",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("低压"),dataTime);
  1183. getOnLine(jDevicecode,true,dataTime);
  1184. }else if (deviceType==8){
  1185. QJsonObject hsData2;
  1186. hsData2.insert("property", "低水位");
  1187. hsData2.insert("serial", "521");
  1188. hsData2.insert("value", dataNow1);
  1189. hsData2.insert("status", "0");
  1190. hsData2.insert("type", "LL1");
  1191. hsData2.insert("battery", batteryLevel);
  1192. hsData2.insert("signal", signal);
  1193. flucDatas1.append(hsData2);
  1194. getAlarm(jDevicecode,"LL1",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("低水位"),dataTime);
  1195. getOnLine(jDevicecode,true,dataTime);
  1196. }
  1197. } else if ((Dat[24] & 0x02) == 0x02) {
  1198. bjstr += "上限报警 ";
  1199. alarm_state = "上限报警";
  1200. judge = true;
  1201. if(deviceType==1 || deviceType == 34){
  1202. QJsonObject hsData2;
  1203. hsData2.insert("property", "高压");
  1204. hsData2.insert("serial", "222");
  1205. hsData2.insert("value", dataNow1);
  1206. hsData2.insert("status", "0");
  1207. hsData2.insert("type", "WP2");
  1208. hsData2.insert("battery", batteryLevel);
  1209. hsData2.insert("signal", signal);
  1210. flucDatas1.append(hsData2);
  1211. getAlarm(jDevicecode,"WP2",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("高压"),dataTime);
  1212. getOnLine(jDevicecode,true,dataTime);
  1213. }else if (deviceType==8){
  1214. QJsonObject hsData2;
  1215. hsData2.insert("property", "高水位");
  1216. hsData2.insert("serial", "522");
  1217. hsData2.insert("value", dataNow1);
  1218. hsData2.insert("status", "0");
  1219. hsData2.insert("type", "LL2");
  1220. hsData2.insert("battery", batteryLevel);
  1221. hsData2.insert("signal", signal);
  1222. flucDatas1.append(hsData2);
  1223. getAlarm(jDevicecode,"LL2",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("高水位"),dataTime);
  1224. getOnLine(jDevicecode,true,dataTime);
  1225. }
  1226. } else if ((Dat[24] & 0x03) == 0x00) {
  1227. alarm_state = "状态正常";
  1228. }
  1229. if ((Dat[24] & 0x04) == 0x04) {
  1230. bjstr += "电量报警 ";
  1231. battery_alarm = "电量报警";
  1232. judge = true;
  1233. } else if ((Dat[24] & 0x04) == 0x00) {
  1234. battery_alarm = "状态正常";
  1235. }
  1236. if ((Dat[24] & 0x08) == 0x08) {
  1237. bjstr += "传感器异常";
  1238. sensor_state = "传感器异常";
  1239. if(deviceType==1 || deviceType == 34){
  1240. QJsonObject hsData2;
  1241. hsData2.insert("property", "故障");
  1242. hsData2.insert("serial", "223");
  1243. hsData2.insert("value", dataNow1);
  1244. hsData2.insert("status", "0");
  1245. hsData2.insert("type", "WP3");
  1246. hsData2.insert("battery", batteryLevel);
  1247. hsData2.insert("signal", signal);
  1248. flucDatas1.append(hsData2);
  1249. getAlarm(jDevicecode,"WP3",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("故障"),dataTime);
  1250. getOnLine(jDevicecode,true,dataTime);
  1251. }else if (deviceType==8){
  1252. QJsonObject hsData2;
  1253. hsData2.insert("property", "故障");
  1254. hsData2.insert("serial", "523");
  1255. hsData2.insert("value", dataNow1);
  1256. hsData2.insert("status", "0");
  1257. hsData2.insert("type", "LL3");
  1258. hsData2.insert("battery", batteryLevel);
  1259. hsData2.insert("signal", signal);
  1260. flucDatas1.append(hsData2);
  1261. getAlarm(jDevicecode,"LL3",batteryLevel,signal,dataNow1,ip,QString::fromUtf8("故障"),dataTime);
  1262. getOnLine(jDevicecode,true,dataTime);
  1263. }
  1264. } else if ((Dat[24] & 0x08) == 0x00) {
  1265. sensor_state = "状态正常";
  1266. }
  1267. if ((Dat[24] & 0x10) == 0x10) {
  1268. bjstr += "服务器异常 ";
  1269. }
  1270. table.append( QString("bjstr:%1,").arg(bjstr));
  1271. hsData.insert("dp", flucDatas1);
  1272. hsData.insert("deviceName", mkList->sensors[i].Device_Name);
  1273. QString dataTimeStamp1=QString("%1").arg(dataTimeStamp);
  1274. hsData.insert("timeStamp", dataTimeStamp1);
  1275. hsData.insert("deviceType", mkList->sensors[i].Device_Type);
  1276. hsData.insert("deviceModel", "");
  1277. hsData.insert("devId", jDevicecode);
  1278. flucDatas.append(hsData);
  1279. hsData1.insert("alarams", flucDatas);
  1280. hsData1.insert("type", "ALARM");
  1281. hsData1.insert("timeStamp", dataTimeStamp1);
  1282. QString dataMqtt = QString(QJsonDocument(hsData1).toJson());
  1283. if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
  1284. QString topic = QString("/usky/ytDP0008/%1/%2/alarm").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  1285. m_client->publish(QMQTT::Message(mqttalarmIdx++,topic,dataMqtt.toUtf8()));
  1286. if(mqttalarmIdx>9999)
  1287. mqttalarmIdx = 1;
  1288. }else if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
  1289. m_client->connectToHost();
  1290. QString topic = QString("/usky/ytDP0008/%1/%2/alarm").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  1291. m_client->publish(QMQTT::Message(mqttalarmIdx++,topic,dataMqtt.toUtf8()));
  1292. if(mqttalarmIdx>9999)
  1293. mqttalarmIdx = 1;
  1294. }
  1295. }
  1296. break;
  1297. }
  1298. }
  1299. }
  1300. getCommData(QString("NBtable=====:%1++++++++++++++++++%2----------%3========%4")
  1301. .arg(table).arg(dataTimeStamp).arg(myt).arg(deviceStatuser));
  1302. }
  1303. }
  1304. void MKCore::check_smokedata(QString data, QString ip){
  1305. QJsonParseError json_error;
  1306. QJsonObject jPayload;
  1307. QString productId="",jAPPdata="",jDevicecode="",deviceId="";
  1308. int serviceId=0;
  1309. long jEventTime=0;
  1310. QJsonDocument jsonDoc(QJsonDocument::fromJson(data.toUtf8(),&json_error));
  1311. if(json_error.error==QJsonParseError::NoError){
  1312. QJsonObject root = jsonDoc.object();
  1313. if((!root.value("payload").isUndefined())&&(!root.value("payload").isNull())&&(root.value("payload").isObject())){
  1314. jPayload = root.value("payload").toObject();
  1315. if((!root.value("productId").isUndefined())&&(!root.value("productId").isNull())&&(root.value("productId").isString())){
  1316. productId = root.value("productId").toString();
  1317. }
  1318. if((!root.value("deviceId").isUndefined())&&(!root.value("deviceId").isNull())&&(root.value("deviceId").isString())){
  1319. deviceId = root.value("deviceId").toString();
  1320. }
  1321. if((!root.value("serviceId").isUndefined())&&(!root.value("serviceId").isNull())){
  1322. if(root.value("serviceId").isString())
  1323. serviceId = root.value("serviceId").toString().toInt();
  1324. else
  1325. serviceId = root.value("serviceId").toInt();
  1326. }
  1327. // if((!root.value("timestamp").isUndefined())&&(!root.value("timestamp").isNull())&&(root.value("timestamp").isString()))
  1328. // jEventTime = QString(root.value("timestamp").toInt()/1000);
  1329. if((!root.value("timestamp").isUndefined())&&(!root.value("timestamp").isNull())){
  1330. if(root.value("timestamp").isString()){
  1331. jEventTime = root.value("timestamp").toString().toLongLong()/1000;
  1332. }else{
  1333. jEventTime = QString::number(root.value("timestamp").toDouble(),'f',0).toLongLong()/1000;
  1334. }
  1335. }
  1336. if((!root.value("IMEI").isUndefined())&&(!root.value("IMEI").isNull())&&(root.value("IMEI").isString()))
  1337. jDevicecode = root.value("IMEI").toString();
  1338. if(QString::compare(productId,"10081217")==0){
  1339. if((!jPayload.value("APPdata").isUndefined())&&(!jPayload.value("APPdata").isNull())&&(jPayload.value("APPdata").isString())){
  1340. jAPPdata = jPayload.value("APPdata").toString();
  1341. }
  1342. }else if (QString::compare(productId,"15109452")==0) {
  1343. check_cover_framedata(jPayload,jDevicecode,jEventTime,deviceId,serviceId);
  1344. }
  1345. }
  1346. }
  1347. checkDevice(jDevicecode);
  1348. getCommData(QString("NBjAPPdata1=====:%1---------%2++++++++%3")
  1349. .arg(jAPPdata).arg(jDevicecode).arg(DevIdx3));
  1350. if(jAPPdata.length()>0){
  1351. QByteArray decBase64 = QByteArray::fromBase64(QString(jAPPdata).toLatin1());
  1352. QString DStr = "";
  1353. for(int i=0;i<decBase64.length();i++){
  1354. DStr.append(QString(" %1").arg(decBase64.at(i)&0xff,2,16,QChar('0')));
  1355. }
  1356. QString DStr1=DStr.replace("\r","").replace("\n","").replace(" ","");
  1357. getCommData(QString("NBjAPPdata=====:%1")
  1358. .arg(DStr1));
  1359. check_framedata(DStr1,jDevicecode,ip);
  1360. }
  1361. }
  1362. void MKCore::check_coverdata(QString data, QString ip){
  1363. QJsonParseError json_error;
  1364. QJsonObject jPayload;
  1365. QString productId="",jAPPdata="",jDevicecode="",deviceId="";
  1366. int serviceId=0;
  1367. long jEventTime=0;
  1368. QJsonDocument jsonDoc(QJsonDocument::fromJson(data.toUtf8(),&json_error));
  1369. if(json_error.error==QJsonParseError::NoError){
  1370. QJsonObject root = jsonDoc.object();
  1371. getCommData(QString("[ %1 =============%2] ").arg(data).arg("ceshiCover"));
  1372. if((!root.value("eventContent").isUndefined())&&(!root.value("eventContent").isNull())&&(root.value("eventContent").isObject())){
  1373. jPayload = root.value("eventContent").toObject();
  1374. if((!root.value("productId").isUndefined())&&(!root.value("productId").isNull())&&(root.value("productId").isString())){
  1375. productId = root.value("productId").toString();
  1376. }
  1377. if((!root.value("deviceId").isUndefined())&&(!root.value("deviceId").isNull())&&(root.value("deviceId").isString())){
  1378. deviceId = root.value("deviceId").toString();
  1379. }
  1380. if((!root.value("serviceId").isUndefined())&&(!root.value("serviceId").isNull())){
  1381. if(root.value("serviceId").isString())
  1382. serviceId = root.value("serviceId").toString().toInt();
  1383. else
  1384. serviceId = root.value("serviceId").toInt();
  1385. }
  1386. if((!root.value("timestamp").isUndefined())&&(!root.value("timestamp").isNull())){
  1387. if(root.value("timestamp").isString()){
  1388. jEventTime = root.value("timestamp").toString().toLongLong()/1000;
  1389. }else{
  1390. jEventTime = QString::number(root.value("timestamp").toDouble(),'f',0).toLongLong()/1000;
  1391. }
  1392. }
  1393. if((!root.value("IMEI").isUndefined())&&(!root.value("IMEI").isNull())&&(root.value("IMEI").isString()))
  1394. jDevicecode = root.value("IMEI").toString();
  1395. if(serviceId==1001){
  1396. int lean_angle=0,manhole_cover_position_state=0;
  1397. double battery_voltage=0;
  1398. if((!jPayload.value("lean_angle").isUndefined())&&(!jPayload.value("lean_angle").isNull())){
  1399. if(jPayload.value("lean_angle").isString())
  1400. lean_angle = jPayload.value("lean_angle").toString().toInt();
  1401. else
  1402. lean_angle = jPayload.value("lean_angle").toInt();
  1403. }
  1404. if((!jPayload.value("battery_voltage").isUndefined())&&(!jPayload.value("battery_voltage").isNull())){
  1405. if(jPayload.value("battery_voltage").isString())
  1406. battery_voltage = jPayload.value("battery_voltage").toString().toDouble();
  1407. else
  1408. battery_voltage = jPayload.value("battery_voltage").toDouble();
  1409. }
  1410. if((!jPayload.value("manhole_cover_position_state").isUndefined())&&(!jPayload.value("manhole_cover_position_state").isNull())){
  1411. if(jPayload.value("manhole_cover_position_state").isString())
  1412. manhole_cover_position_state = jPayload.value("manhole_cover_position_state").toString().toInt();
  1413. else
  1414. manhole_cover_position_state = jPayload.value("manhole_cover_position_state").toInt();
  1415. }
  1416. getCoverAlarm(jDevicecode,jEventTime,ip,lean_angle,battery_voltage,manhole_cover_position_state,jPayload,serviceId,deviceId);
  1417. QJsonObject hsData1,hsData,hsData21,hsData20;
  1418. QJsonArray flucDatas,flucDatas1,flucDatas20,flucDatas21;
  1419. QJsonObject hsData2,hsData3,hsData4,hsData5;
  1420. for(int i=0;i<10240;i++){
  1421. if(QString::compare(QString(mkList->sensors[i].Device_Code),jDevicecode)==0){
  1422. hsData1.insert("devId", jDevicecode);
  1423. hsData1.insert("connType", "N");
  1424. hsData1.insert("deviceName", mkList->sensors[i].Device_Name);
  1425. hsData2.insert("property", "井盖开启");
  1426. hsData2.insert("serial", "12825");
  1427. hsData2.insert("value", manhole_cover_position_state);
  1428. hsData2.insert("status", "0");
  1429. hsData2.insert("battery", battery_voltage);
  1430. hsData2.insert("signal", "0");
  1431. hsData2.insert("angle", lean_angle);
  1432. flucDatas1.append(hsData2);
  1433. hsData.insert("dp", flucDatas1);
  1434. hsData.insert("deviceName", mkList->sensors[i].Device_Name);
  1435. QString dataTimeStamp1=QString("%1").arg(jEventTime);
  1436. hsData.insert("timeStamp", dataTimeStamp1);
  1437. hsData.insert("deviceType", mkList->sensors[i].Device_Type);
  1438. hsData.insert("deviceModel", "AZ-M90118");
  1439. hsData.insert("devId", jDevicecode);
  1440. flucDatas.append(hsData);
  1441. hsData1.insert("alarams", flucDatas);
  1442. hsData1.insert("type", "ALARM");
  1443. hsData1.insert("timeStamp", dataTimeStamp1);
  1444. QString dataMqtt = QString(QJsonDocument(hsData1).toJson());
  1445. if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
  1446. QString topic = QString("/usky/ytDP0008/%1/%2/alarm").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  1447. m_client->publish(QMQTT::Message(mqttalarmIdx++,topic,dataMqtt.toUtf8()));
  1448. if(mqttalarmIdx>9999)
  1449. mqttalarmIdx = 1;
  1450. }else if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
  1451. m_client->connectToHost();
  1452. QString topic = QString("/usky/ytDP0008/%1/%2/alarm").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  1453. m_client->publish(QMQTT::Message(mqttalarmIdx++,topic,dataMqtt.toUtf8()));
  1454. if(mqttalarmIdx>9999)
  1455. mqttalarmIdx = 1;
  1456. }
  1457. }
  1458. }
  1459. }else if (serviceId==1004) {
  1460. int water_level_state=0;
  1461. double battery_voltage=0;
  1462. if((!jPayload.value("battery_voltage").isUndefined())&&(!jPayload.value("battery_voltage").isNull())){
  1463. if(jPayload.value("battery_voltage").isString())
  1464. battery_voltage = jPayload.value("battery_voltage").toString().toDouble();
  1465. else
  1466. battery_voltage = jPayload.value("battery_voltage").toDouble();
  1467. }
  1468. if((!jPayload.value("water_level_state").isUndefined())&&(!jPayload.value("water_level_state").isNull())){
  1469. if(jPayload.value("water_level_state").isString())
  1470. water_level_state = jPayload.value("water_level_state").toString().toInt();
  1471. else
  1472. water_level_state = jPayload.value("water_level_state").toInt();
  1473. }
  1474. getCoverAlarm(jDevicecode,jEventTime,ip,0,battery_voltage,water_level_state,jPayload,serviceId,deviceId);
  1475. QJsonObject hsData1,hsData,hsData21,hsData20;
  1476. QJsonArray flucDatas,flucDatas1,flucDatas20,flucDatas21;
  1477. QJsonObject hsData2,hsData3,hsData4,hsData5;
  1478. for(int i=0;i<10240;i++){
  1479. if(QString::compare(QString(mkList->sensors[i].Device_Code),jDevicecode)==0){
  1480. hsData1.insert("devId", jDevicecode);
  1481. hsData1.insert("connType", "N");
  1482. hsData1.insert("deviceName", mkList->sensors[i].Device_Name);
  1483. hsData2.insert("property", "满溢告警");
  1484. hsData2.insert("serial", "12826");
  1485. hsData2.insert("value", water_level_state);
  1486. hsData2.insert("status", "0");
  1487. hsData2.insert("battery", battery_voltage);
  1488. hsData2.insert("signal", "0");
  1489. hsData2.insert("angle", "0");
  1490. flucDatas1.append(hsData2);
  1491. hsData.insert("dp", flucDatas1);
  1492. hsData.insert("deviceName", mkList->sensors[i].Device_Name);
  1493. QString dataTimeStamp1=QString("%1").arg(jEventTime);
  1494. hsData.insert("timeStamp", dataTimeStamp1);
  1495. hsData.insert("deviceType", mkList->sensors[i].Device_Type);
  1496. hsData.insert("deviceModel", "AZ-M90118");
  1497. hsData.insert("devId", jDevicecode);
  1498. flucDatas.append(hsData);
  1499. hsData1.insert("alarams", flucDatas);
  1500. hsData1.insert("type", "ALARM");
  1501. hsData1.insert("timeStamp", dataTimeStamp1);
  1502. QString dataMqtt = QString(QJsonDocument(hsData1).toJson());
  1503. if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
  1504. QString topic = QString("/usky/ytDP0008/%1/%2/alarm").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  1505. m_client->publish(QMQTT::Message(mqttalarmIdx++,topic,dataMqtt.toUtf8()));
  1506. if(mqttalarmIdx>9999)
  1507. mqttalarmIdx = 1;
  1508. }else if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
  1509. m_client->connectToHost();
  1510. QString topic = QString("/usky/ytDP0008/%1/%2/alarm").arg(mkList->sensors[i].Company_Code).arg(jDevicecode);
  1511. m_client->publish(QMQTT::Message(mqttalarmIdx++,topic,dataMqtt.toUtf8()));
  1512. if(mqttalarmIdx>9999)
  1513. mqttalarmIdx = 1;
  1514. }
  1515. }
  1516. }
  1517. }
  1518. }
  1519. }
  1520. checkDevice(jDevicecode);
  1521. }
  1522. void MKCore::check_serverdata(QString data, QString ip){
  1523. QDateTime dt = QDateTime::currentDateTime();
  1524. QStringList dataList = data.split("\r\n");
  1525. for(int i=0;i<dataList.length();i++){
  1526. if(dataList.at(i).indexOf("\"messageType\":\"dataReport\"")>0){
  1527. getCommData(QString("[ %1 ] ").arg(dt.toString("yyyy-MM-dd HH:mm:ss.zzz"))+dataList.at(i));
  1528. check_smokedata(dataList.at(i), ip);
  1529. }else if(dataList.at(i).indexOf("\"messageType\":\"eventReport\"")>0){
  1530. getCommData(QString("5000++++[ %1 ] ").arg(dt.toString("yyyy-MM-dd HH:mm:ss.zzz"))+dataList.at(i));
  1531. check_coverdata(dataList.at(i), ip);
  1532. }
  1533. }
  1534. }
  1535. void MKCore::read_data(){
  1536. QTcpSocket *so = (QTcpSocket *)sender();
  1537. QString data = QString(so->readAll());
  1538. QDateTime dt = QDateTime::currentDateTime();
  1539. getCommData(QString("5090====[ %1 ] ").arg(dt.toString("yyyy-MM-dd HH:mm:ss.zzz"))+data);
  1540. check_serverdata(data, so->peerAddress().toString());
  1541. so->write("HTTP/1.1 200 OK\r\nAccess-Control-Allow-Origin: *\r\nContent-type: text/plain\r\n\r\n");
  1542. so->close();
  1543. }