123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598 |
- #include "porcesscore.h"
- #include "../ytUserInfoProcess/userinfo.h"
- #include "../DataPrecessDog/dataprecess.h"
- #include "rtu.h"
- #define UN_REFERENCED_PARAMETER(x) {(x) = (x);}
- PorcessCore::PorcessCore(QObject *parent) : QObject(parent)
- {
- mqttIdx = 1;
- mqttinfoIdx =1;
- statusIdx = 1;
- alarmData = "";
- statusStr = "";
- timer = new QTimer(this);
- logThread = new LogThread(this);
- dbThread = new DatabaseThread(this);
- logThread->start();
- for(quint16 i=0;i<16;i++){
- wxThreads[1][i] = new WechartThreads(this,i,"47.98.201.73","/ytapi/admin/order/longhudata");
- wxThreads[0][i] = new WechartThreads(this,i,"47.98.201.73","/jdxf/wxapp2.php/Home/GeneralPush/voice_alarm");
- connect(wxThreads[1][i],&WechartThreads::wxchart,this,&PorcessCore::wxchart);
- connect(wxThreads[0][i],&WechartThreads::wxchart,this,&PorcessCore::wxchart);
- repThread[i] = new ttsThreads(this,i,"127.0.0.1","/report",55335);
- connect(repThread[i],&ttsThreads::ttslog,this,&PorcessCore::repLog);
- wssThread[i] = new ttsThreads(this,i,"47.98.201.73","/report",55125);
- connect(wssThread[i],&ttsThreads::ttslog,this,&PorcessCore::repLog);
- wxThreads[1][i]->start();
- wxThreads[0][i]->start();
- repThread[i]->start();
- wssThread[i]->start();
- }
- wxcur = 0;
- repcur = 0;
- connect(timer, &QTimer::timeout, this, &PorcessCore::timeout);
- connect(dbThread, &DatabaseThread::AlarmReport, this, &PorcessCore::AlarmReport);
- connect(dbThread,&DatabaseThread::TableReport,this,&PorcessCore::TableReport);
- connect(dbThread, &DatabaseThread::SqlLog, this, &PorcessCore::SqlLog);
- connect(dbThread, &DatabaseThread::MqttInfo, this, &PorcessCore::MqttConnect);
- dbThread->start();
- rCore = new RtuCore(this);
- connect(rCore,&RtuCore::ecommdata,this,&PorcessCore::commdata);
- connect(rCore,&RtuCore::CommData,this,&PorcessCore::CommData);
- connect(rCore,&RtuCore::egetOnLine,this,&PorcessCore::getOnLine);
- connect(rCore,&RtuCore::egetIOValue,this,&PorcessCore::getIOValue);
- connect(rCore,&RtuCore::egetIoReport,this,&PorcessCore::getIoReport);
- connect(rCore,&RtuCore::egetAnalogValue,this,&PorcessCore::getAnalogValue);
- connect(rCore,&RtuCore::egetAnalogReport,this,&PorcessCore::getAnalogReport);
- connect(rCore,&RtuCore::egetWarnReport,this,&PorcessCore::getWarnReport);
- connect(rCore,&RtuCore::ertuInfo,this,&PorcessCore::rtuInfo);
- wssServer = new WssServer(this);
- wssServer->start();
- timer->start(1000);
- netAccessManager = new QNetworkAccessManager(this);
- connect(netAccessManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishedSlot(QNetworkReply*)));
- }
- PorcessCore::~PorcessCore()
- {
- dbThread->stop();
- logThread->stop();
- }
- void PorcessCore::start()
- {
- rCore->start();
- }
- void PorcessCore::finishedSlot(QNetworkReply *reply)
- {
- QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
- if(status_code==200){
- if(reply->error()==QNetworkReply::NoError){
- QString bak_info = QString::fromUtf8(reply->readAll());
- wxchart(2,QDateTime::currentDateTime(),bak_info,false);
- }else{
- wxchart(2,QDateTime::currentDateTime(),"error",false);
- }
- }else{
- wxchart(2,QDateTime::currentDateTime(),"fail",false);
- }
- reply->abort();
- reply->deleteLater();
- }
- void PorcessCore::timeout()
- {
- uint t = QDateTime::currentDateTime().toTime_t();
- dataProcessShm->processStatus[13].upTime[0].Enabled = 0x01;
- dataProcessShm->processStatus[13].upTime[0].t_time = t;
- for(int i=0;i<10240;i++){
- if(rtuList->rtus[i].Enabled==0x01){
- if((t-rtuList->rtus[i].LastCommtime)>86400){
- rtuList->rtus[i].LastCommtime = QDateTime::currentDateTime().toTime_t();
- if(rtuList->rtus[i].Online_Flag!=0x00){
- rtuList->rtus[i].Online_Flag = 0x00;
- if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
- m_client->connectToHost();
- }
- if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
- alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"离线\",\"serial\":\"\",\"value\":\"\",\"status\":\"0\",\"type\":\"44\"}],\"deviceName\":\"%3\",\"timeStamp\":\"%4\",\"deviceModel\":\"\",\"deviceType\":\"%5\",\"devId\":\"%6\"}],\"type\":\"ALARM\",\"timeStamp\":\"%7\"}")
- .arg(rtuList->rtus[i].Device_Code).arg(QString(rtuList->rtus[i].Device_Name)).arg(QString(rtuList->rtus[i].Device_Name)).arg(QDateTime::currentDateTime().toTime_t()).arg(rtuList->rtus[i].Device_Type).arg(rtuList->rtus[i].Device_Code).arg(QDateTime::currentDateTime().toTime_t()));
- QString topic = QString("/usky/ytDP0006/%1/%2/alarm").arg(rtuList->rtus[i].Company_Code).arg(rtuList->rtus[i].Device_Code);
- m_client->publish(QMQTT::Message(mqttIdx++,topic,alarmData.toUtf8()));
- alarmData.clear();
- if(mqttIdx>9999)
- mqttIdx = 1;
- }
- dbThread->appendSql(QString("update sp_devices_status set devicestatus=%1, true_status=%1, statustime='%2' where deviceid='%3'")
- .arg(75).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(rtuList->rtus[i].Device_Code));
- dbThread->appendSql(QString("insert into sp_rtu2017 (id, device_code, time, status, data2, data4) values (NULL, '%1', '%2', 44, '%3', '%4')")
- .arg(QString::fromUtf8(rtuList->rtus[i].Device_Code)).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"))
- .arg(QString::fromUtf8("离线")).arg(QString::fromUtf8(rtuList->rtus[i].Device_Name)));
- //dbThread->appendSql(QString("insert into sp_d%1 (id, device_code, time, status, data2, data4) values (NULL, '%1', '%2', 44, '%3', '%4')")
- // .arg(QString::fromUtf8(rtuList->rtus[i].Device_Code)).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"))
- // .arg(QString::fromUtf8("离线")).arg(QString::fromUtf8(rtuList->rtus[i].Device_Name)));
- QString sql = QString("insert into sp_d%1 (id, device_code, time, status, data2, data4) values (NULL, '%1', '%2', 44, '%3', '%4')")
- .arg(QString::fromUtf8(rtuList->rtus[i].Device_Code)).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"))
- .arg(QString::fromUtf8("离线")).arg(QString::fromUtf8(rtuList->rtus[i].Device_Name));
- dbThread->appendTable(ApTable(QString::fromUtf8(rtuList->rtus[i].Device_Code),sql,QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"),"44","","","","",QString("%1 %2").arg(QString::fromUtf8("离线")).arg(QString::fromUtf8(rtuList->rtus[i].Device_Name))));
- }
- if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
- m_client->connectToHost();
- }
- if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
- statusStr.append(QString("{\"devId\":\"%1\",\"devicestatus\":75,\"type\":\"STATUS\",\"timestamp\":\"%2\"}").arg(rtuList->rtus[i].Device_Code).arg(QDateTime::currentDateTime().toTime_t()));
- QString topic1 = QString("/usky/ytDP0006/%1/%2/status").arg(rtuList->rtus[i].Company_Code).arg(rtuList->rtus[i].Device_Code);
- m_client->publish(QMQTT::Message(statusIdx++,topic1,statusStr.toUtf8()));
- statusStr.clear();
- if(statusIdx>9999)
- statusIdx = 1;
- }
- }
- }
- }
- }
- void PorcessCore::rtuInfo(QString infoTopic,QString infoData)
- {
- if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
- m_client->connectToHost();
- }
- if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
- m_client->publish(QMQTT::Message(mqttinfoIdx++,infoTopic,infoData.toUtf8()));
- if(mqttinfoIdx>9999)
- mqttinfoIdx = 1;
- }
- }
- void PorcessCore::MqttConnect(QString ip,QString port,QString name,QString passwd)
- {
- printf("mqtt init\n");
- printf("ip = %s, port = %s, name = %s, passwd = %s\n",ip.toUtf8().data(),port.toUtf8().data(),name.toUtf8().data(),passwd.toUtf8().data());
- m_client = new QMQTT::Client(QHostAddress(ip), static_cast<quint16>(port.toInt()), this);
- m_client->setUsername(name);
- m_client->setPassword(passwd.toLatin1());
- connect(m_client,&QMQTT::Client::connected,this,&PorcessCore::mqconnected);
- m_client->connectToHost();
- }
- void PorcessCore::mqconnected()
- {
- printf("mqtt connected\n");
- }
- void PorcessCore::getAnalogReport(int devIdx, int port, QByteArray data, float value, bool flag, QDateTime t)
- {
- QString Dat = "";
- for(int i=0;i<data.length();i++)
- Dat.append(QString("%1").arg(data.at(i)&0xff,2,16,QChar('0')).toUpper());
- QString alarmName = "";
- switch (rtuList->rtus[devIdx].Port[port].PortType) {
- case 0x01:
- if(value>static_cast<float>(rtuList->rtus[devIdx].Port[port].PortMax)||value<static_cast<float>(rtuList->rtus[devIdx].Port[port].PortMin)){
- alarmName = QString::fromUtf8("设备异常");
- }else{
- if(flag)
- alarmName = QString::fromUtf8("高压");
- else
- alarmName = QString::fromUtf8("低压");
- }
- break;
- case 0x02:
- if(value>static_cast<float>(rtuList->rtus[devIdx].Port[port].PortMax)||value<static_cast<float>(rtuList->rtus[devIdx].Port[port].PortMin)){
- alarmName = QString::fromUtf8("设备异常");
- }else{
- if(flag)
- alarmName = QString::fromUtf8("高水位");
- else
- alarmName = QString::fromUtf8("低水位");
- }
- break;
- case 0x03:
- if(value>static_cast<float>(rtuList->rtus[devIdx].Port[port].PortMax)||value<static_cast<float>(rtuList->rtus[devIdx].Port[port].PortMin)){
- alarmName = QString::fromUtf8("设备异常");
- }else{
- if(flag)
- alarmName = QString::fromUtf8("高温");
- else
- alarmName = QString::fromUtf8("低温");
- }
- break;
- case 0x04:
- if(value>static_cast<float>(rtuList->rtus[devIdx].Port[port].PortMax)||value<static_cast<float>(rtuList->rtus[devIdx].Port[port].PortMin)){
- alarmName = QString::fromUtf8("设备异常");
- }else{
- if(flag)
- alarmName = QString::fromUtf8("高湿度");
- else
- alarmName = QString::fromUtf8("低湿度");
- }
- break;
- }
- QString portname = QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName);
- QString pnumber =QString("%1").arg(port&0x0f,2,16,QChar('0'));
- dbThread->appendAlarm(AlarmRep(QString(rtuList->rtus[devIdx].Device_Code),
- QString("insert into sp_rtu2017 (id, port, device_code, time, status, address, ncmd, data1, data2, data3, data4) values (NULL, 'E6', '%1', '%2', '01', '%3', '%4', %5, '%6', '', '%7' )")
- .arg(rtuList->rtus[devIdx].Device_Code).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(Dat).arg(port&0x0f,2,10,QChar('0')).arg(QString::number(static_cast<double>(value),10,2)).arg(alarmName).arg(portname),
- QString("%1 %2").arg(portname).arg(alarmName),t.toString("yyyy-MM-dd HH:mm:ss"),"E6",pnumber));
- //dbThread->appendSql(QString("insert into sp_d%1 (id, device_code, port, time, address, ncmd, data1, data2, data3, data4, status) values (NULL, '%1', 'E6', '%2', '%3', '%4', %5, '%6', '%7', '%8', '01')")
- // .arg(rtuList->rtus[devIdx].Device_Code).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(Dat).arg(port&0x0f,2,10,QChar('0')).arg(QString::number(static_cast<double>(value),10,2)).arg(alarmName).arg("").arg(portname));
- QString sql = QString("insert into sp_d%1 (id, device_code, port, time, address, ncmd, data1, data2, data3, data4, status) values (NULL, '%1', 'E6', '%2', '%3', '%4', %5, '%6', '%7', '%8', '01')")
- .arg(rtuList->rtus[devIdx].Device_Code).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(Dat).arg(port&0x0f,2,10,QChar('0')).arg(QString::number(static_cast<double>(value),10,2)).arg(alarmName).arg("").arg(portname);
- // dbThread->appendSql(QString("update sp_owner_status set point_data=%1, data_time='%2', content='%3' where device_id='%4' and point_code=%5")
- // .arg(QString::number(static_cast<double>(value),10,2)).arg(t.toString("yyyy-MM-dd HH:mm:ss"))
- // .arg(QString::fromUtf8("%1 %2").arg(alarmName).arg(portname)).arg(QString::fromUtf8(rtuList->rtus[devIdx].Device_Code)).arg(port));
- dbThread->appendTable(ApTable(QString::fromUtf8(rtuList->rtus[devIdx].Device_Code),sql,t.toString("yyyy-MM-dd HH:mm:ss"),"01","E6",QString("%1").arg(port&0x0f,2,10,QChar('0')),portname,QString::number(static_cast<double>(value),10,2),QString("%1 %2").arg(alarmName).arg(portname)));
- QString point;
- switch (port&0x0f) {
- case 1:point="665";break;
- case 2:point="666";break;
- case 3:point="667";break;
- case 4:point="668";break;
- case 5:point="669";break;
- case 6:point="670";break;
- case 7:point="671";break;
- case 8:point="672";break;
- default:break;
- }
- if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
- m_client->connectToHost();
- }
- if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
- alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\",\"type\":\"01\",\"port\":\"E6\",\"stuname\":\"%6\"}],\"deviceName\":\"%7\",\"timeStamp\":\"%8\",\"deviceModel\":\"\",\"deviceType\":\"%9\",\"devId\":\"%10\"}],\"type\":\"ALARM\",\"timeStamp\":\"%11\"}").arg(rtuList->rtus[devIdx].Device_Code).arg(QString(rtuList->rtus[devIdx].Device_Name)).arg(portname).arg(point).arg(QString::number(static_cast<double>(value),10,2)).arg(alarmName).arg(QString(rtuList->rtus[devIdx].Device_Name)).arg(QDateTime::currentDateTime().toTime_t()).arg(rtuList->rtus[devIdx].Device_Type).arg(rtuList->rtus[devIdx].Device_Code).arg(QDateTime::currentDateTime().toTime_t()));
- QString topic = QString("/usky/ytDP0006/%1/%2/alarm").arg(rtuList->rtus[devIdx].Company_Code).arg(rtuList->rtus[devIdx].Device_Code);
- m_client->publish(QMQTT::Message(mqttIdx++,topic,alarmData.toUtf8()));
- alarmData.clear();
- if(mqttIdx>9999)
- mqttIdx = 1;
- }
- }
- void PorcessCore::getAnalogValue(int devIdx, int port, QByteArray data, float value, QDateTime t)
- {
- if(rtuList->rtus[devIdx].Enabled!=0x01)
- return;
- QString Dat = "";
- for(int i=0;i<data.length();i++)
- Dat.append(QString("%1").arg(data.at(i)&0xff,2,16,QChar('0')).toUpper());
- //dbThread->appendSql(QString("insert into sp_d%1 (id, device_code, port, time, address, ncmd, data1, data2, data3, data4, status) values (NULL, '%1', 'E6', '%2', '%3', '%4', %5, '%6', '%7', '%8', '00')")
- //.arg(rtuList->rtus[devIdx].Device_Code).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(Dat).arg(port&0x0f,2,10,QChar('0')).arg(QString::number(static_cast<double>(value),10,2)).arg(QString::fromUtf8("正常")).arg("").arg(rtuList->rtus[devIdx].Port[port].PortName));
- // dbThread->appendSql(QString("update sp_owner_status set point_data=%1, data_time='%2' where device_id='%3' and point_code=%4")
- // .arg(QString::number(static_cast<double>(value),10,2)).arg(t.toString("yyyy-MM-dd HH:mm:ss"))
- // .arg(QString::fromUtf8(rtuList->rtus[devIdx].Device_Code)).arg(port));
- QString sql = QString("insert into sp_d%1 (id, device_code, port, time, address, ncmd, data1, data2, data3, data4, status) values (NULL, '%1', 'E6', '%2', '%3', '%4', %5, '%6', '%7', '%8', '00')")
- .arg(rtuList->rtus[devIdx].Device_Code).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(Dat).arg(port&0x0f,2,10,QChar('0')).arg(QString::number(static_cast<double>(value),10,2)).arg(QString::fromUtf8("正常")).arg("").arg(rtuList->rtus[devIdx].Port[port].PortName);
-
- dbThread->appendTable(ApTable(QString::fromUtf8(rtuList->rtus[devIdx].Device_Code),sql,t.toString("yyyy-MM-dd HH:mm:ss"),"00","E6",QString("%1").arg(port&0x0f,2,10,QChar('0')),QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName),QString::number(static_cast<double>(value),10,2),QString("%1 %2").arg(QString::fromUtf8("正常")).arg(rtuList->rtus[devIdx].Port[port].PortName)));
-
- if(QString::compare(QString(rtuList->rtus[devIdx].Company_Code),"10318")==0){
- QByteArray post_data;
- //设置发送的数据
- post_data.append(QString("device_code=%1&").arg(QString(rtuList->rtus[devIdx].Device_Code)));
- post_data.append(QString("device_value=%1&").arg(QString::number(static_cast<double>(value),10,2)));
- post_data.append(QString("port=%1&").arg(port));
- post_data.append(QString("port_name=%1&").arg(QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName)));
- post_data.append(QString("user_from=%1&").arg("xingYueHuiRtuWater"));
- QNetworkRequest *req = new QNetworkRequest();
- req->setUrl(QUrl("http://iot.usky.cn/ytapi/admin/order/longhudata"));
- req->setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
- req->setHeader(QNetworkRequest::ContentLengthHeader, post_data.length());
- QNetworkReply *reply = netAccessManager->post(*req,post_data);
- // QString data = QString("device_code=%1&device_value=%2&port=%3&port_name=%4&user_from=xingYueHuiRtuWater").arg(QString(rtuList->rtus[devIdx].Device_Code)).arg(QString::number(static_cast<double>(value),10,2)).arg(port).arg(QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName))
- // .replace(",","%2C").replace(":","%3A").replace(" ","+");
- // wxThreads[1][wxcur&0x0f]->appendData(data);//龙湖定时数据推送
- // wxcur++;
- // wxcur &= 0x0f;
- }
- }
- void PorcessCore::getWarnReport(int devIdx, int port, QString type, QByteArray data, QDateTime t)
- {
- if(rtuList->rtus[devIdx].Enabled!=0x01)
- return;
- QString Dat = "";
- for(int i=0;i<data.length();i++)
- Dat.append(QString("%1").arg(data.at(i)&0xff,2,16,QChar('0')).toUpper());
- QString portname = QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName);
- dbThread->appendAlarm(AlarmRep(QString(rtuList->rtus[devIdx].Device_Code),
- QString("insert into sp_rtu2017 (id, device_code, port, time, status, address, ncmd, data2, data4) values (NULL, '%1', 'E9', '%2', '%3', '%4', '%5', '%6', '%7')")
- .arg(rtuList->rtus[devIdx].Device_Code).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg("33").arg(Dat).arg(port&0x0f,2,10,QChar('0'))
- .arg(type)
- .arg(portname),QString("%1 %2").arg(portname).arg(type),t.toString("yyyy-MM-dd HH:mm:ss")));
- dbThread->appendSql(QString("insert into sp_d%1 (id, device_code, port, time, status, address, ncmd, data2, data4) values (NULL, '%1', 'E9', '%2', '%3', '%4', '%5', '%6', '%7')")
- .arg(QString::fromUtf8(rtuList->rtus[devIdx].Device_Code)).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg("33").arg(Dat).arg(port&0x0f,2,10,QChar('0'))
- .arg(type)
- .arg(QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName)));
- }
- void PorcessCore::getIoReport(int devIdx, int port, QByteArray data, int value, QDateTime t)
- {
- if(rtuList->rtus[devIdx].Enabled!=0x01)
- return;
- QString Dat = "";
- for(int i=0;i<data.length();i++)
- Dat.append(QString("%1").arg(data.at(i)&0xff,2,16,QChar('0')).toUpper());
- QString d4 = QString::fromUtf8(value==1?rtuList->rtus[devIdx].Port[port].NameOfIOon:rtuList->rtus[devIdx].Port[port].NameOfIOOff);
- // if(d4.length()==0){
- // d4 = (value==1)?QString::fromUtf8("接线"):QString::fromUtf8("拆线");
- // }
- //屏蔽未配置的端口报告信息,2020-10-19,姚强
- if(d4.length()>0){
- QString pnumber =QString("%1").arg(port&0x0f,2,16,QChar('0'));
- QString portname = QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName);
- dbThread->appendAlarm(AlarmRep(QString(rtuList->rtus[devIdx].Device_Code),
- QString("insert into sp_rtu2017 (id, device_code, port, time, status, address, ncmd, data2, data4) values (NULL, '%1', 'E3', '%2', '%3', '%4', '%5', '%6', '%7')")
- .arg(rtuList->rtus[devIdx].Device_Code).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(value==0?"00":"01").arg(Dat).arg(port,2,10,QChar('0'))
- .arg(d4)
- .arg(portname),QString("%1 %2").arg(portname).arg(d4),t.toString("yyyy-MM-dd HH:mm:ss"),"E3",pnumber));
- // dbThread->appendSql(QString("insert into sp_d%1 (id, device_code, port, time, status, address, ncmd, data2, data4) values (NULL, '%1', 'E3', '%2', '%3', '%4', '%5', '%6', '%7')")
- // .arg(rtuList->rtus[devIdx].Device_Code).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(value==0?"00":"01").arg(Dat).arg(port,2,10,QChar('0'))
- // .arg(d4)
- // .arg(QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName)));
- QString sql = QString("insert into sp_d%1 (id, device_code, port, time, status, address, ncmd, data2, data4) values (NULL, '%1', 'E3', '%2', '%3', '%4', '%5', '%6', '%7')")
- .arg(rtuList->rtus[devIdx].Device_Code).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(value==0?"00":"01").arg(Dat).arg(port,2,10,QChar('0'))
- .arg(d4)
- .arg(QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName));
- // dbThread->appendSql(QString("update sp_owner_status set point_data='%1', data_time='%2', content='%3' where device_id='%4' and point_code=%5")
- // .arg(value==0?"00":"01").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString("%1 %2").arg(d4).arg(QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName)))
- // .arg(QString::fromUtf8(rtuList->rtus[devIdx].Device_Code)).arg(port));
- if(rtuList->rtus[devIdx].Port[port].OffSet > 0){
- dbThread->appendTable(ApTable(QString::fromUtf8(rtuList->rtus[devIdx].Device_Code),sql,t.toString("yyyy-MM-dd HH:mm:ss"),value==0?"1":"0","E3",QString("%1").arg(port,2,10,QChar('0')),portname,"",QString("%1 %2").arg(d4).arg(QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName))));
- }else{
- dbThread->appendTable(ApTable(QString::fromUtf8(rtuList->rtus[devIdx].Device_Code),sql,t.toString("yyyy-MM-dd HH:mm:ss"),value==0?"0":"1","E3",QString("%1").arg(port,2,10,QChar('0')),portname,"",QString("%1 %2").arg(d4).arg(QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName))));
- }
- QString point;
- switch (port&0x0f) {
- case 1:point="665";break;
- case 2:point="666";break;
- case 3:point="667";break;
- case 4:point="668";break;
- case 5:point="669";break;
- case 6:point="670";break;
- case 7:point="671";break;
- case 8:point="672";break;
- default:break;
- }
- if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
- m_client->connectToHost();
- }
- if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
- alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\",\"type\":\"%6\",\"port\":\"E3\",\"stuname\":\"%7\"}],\"deviceName\":\"%8\",\"timeStamp\":\"%9\",\"deviceModel\":\"\",\"deviceType\":\"%10\",\"devId\":\"%11\"}],\"type\":\"ALARM\",\"timeStamp\":\"%12\"}").arg(rtuList->rtus[devIdx].Device_Code).arg(QString(rtuList->rtus[devIdx].Device_Name)).arg(portname).arg(point).arg(value==0?"00":"01").arg(value==0?"00":"01").arg(d4).arg(QString(rtuList->rtus[devIdx].Device_Name)).arg(QDateTime::currentDateTime().toTime_t()).arg(rtuList->rtus[devIdx].Device_Type).arg(rtuList->rtus[devIdx].Device_Code).arg(QDateTime::currentDateTime().toTime_t()));
- QString topic = QString("/usky/ytDP0006/%1/%2/alarm").arg(rtuList->rtus[devIdx].Company_Code).arg(rtuList->rtus[devIdx].Device_Code);
- m_client->publish(QMQTT::Message(mqttIdx++,topic,alarmData.toUtf8()));
- alarmData.clear();
- if(mqttIdx>9999)
- mqttIdx = 1;
- }
- }
- }
- void PorcessCore::getIOValue(int devIdx, int port, QByteArray data, int value, QDateTime t)
- {
- if(rtuList->rtus[devIdx].Enabled!=0x01)
- return;
- QString Dat = "";
- for(int i=0;i<data.length();i++)
- Dat.append(QString("%1").arg(data.at(i)&0xff,2,16,QChar('0')).toUpper());
- // dbThread->appendSql(QString("insert into sp_d%1 (id, device_code, port, time, status, address, ncmd, data2, data4) values (NULL, '%1', 'E3', '%2', '%3', '%4', '%5', '%6', '%7')")
- // .arg(rtuList->rtus[devIdx].Device_Code).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(value==0?"00":"01").arg(Dat).arg(port,2,10,QChar('0'))
- // .arg(QString::fromUtf8(value==1?rtuList->rtus[devIdx].Port[port].NameOfIOon:rtuList->rtus[devIdx].Port[port].NameOfIOOff))
- // .arg(QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName)));
- QString sql = QString("insert into sp_d%1 (id, device_code, port, time, status, address, ncmd, data2, data4) values (NULL, '%1', 'E3', '%2', '%3', '%4', '%5', '%6', '%7')")
- .arg(rtuList->rtus[devIdx].Device_Code).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(value==0?"00":"01").arg(Dat).arg(port,2,10,QChar('0'))
- .arg(QString::fromUtf8(value==1?rtuList->rtus[devIdx].Port[port].NameOfIOon:rtuList->rtus[devIdx].Port[port].NameOfIOOff))
- .arg(QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName));
- if(rtuList->rtus[devIdx].Port[port].OffSet > 0){
- dbThread->appendTable(ApTable(QString::fromUtf8(rtuList->rtus[devIdx].Device_Code),sql,t.toString("yyyy-MM-dd HH:mm:ss"),value==0?"1":"0","E3",QString("%1").arg(port,2,10,QChar('0')),QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName),"",QString("%1 %2").arg(QString::fromUtf8(value==1?rtuList->rtus[devIdx].Port[port].NameOfIOon:rtuList->rtus[devIdx].Port[port].NameOfIOOff)).arg(QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName))));
- }else{
- dbThread->appendTable(ApTable(QString::fromUtf8(rtuList->rtus[devIdx].Device_Code),sql,t.toString("yyyy-MM-dd HH:mm:ss"),value==0?"0":"1","E3",QString("%1").arg(port,2,10,QChar('0')),QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName),"",QString("%1 %2").arg(QString::fromUtf8(value==1?rtuList->rtus[devIdx].Port[port].NameOfIOon:rtuList->rtus[devIdx].Port[port].NameOfIOOff)).arg(QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName))));
- }
-
- // dbThread->appendSql(QString("update sp_owner_status set point_data='%1', data_time='%2', content='%3' where device_id='%4' and point_code=%5")
- // .arg(value==0?"00":"01").arg(t.toString("yyyy-MM-dd HH:mm:ss"))
- // .arg(QString::fromUtf8("%1 %2").arg(value==1?rtuList->rtus[devIdx].Port[port].NameOfIOon:rtuList->rtus[devIdx].Port[port].NameOfIOOff).arg(QString::fromUtf8(rtuList->rtus[devIdx].Port[port].PortName)))
- // .arg(QString::fromUtf8(rtuList->rtus[devIdx].Device_Code)).arg(port));
- }
- void PorcessCore::TableReport(QString deviceid,quint64 insertid,QString time,QString status,QString port,QString ncmd,QString pname,QString data1,QString content)
- {
- if(status.compare("44")==0){
- dbThread->appendSql(QString("insert into sp_owner_sync_data (id, native_id, device_id, point_code, point_data, data_time, content) values (NULL,%1,'%2','%3','%4','%5','%6')")
- .arg(insertid).arg(deviceid).arg(0).arg(1).arg(time).arg(content));
- dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data='%1', data_time='%2', content='%3', point_name='通信报警',dwtype=%4 where device_id='%5' and point_code='%6';")
- .arg(0).arg(time).arg(content).arg(6).arg(deviceid).arg(0));
- }else{
- if(port.length()>0){
- if(port.compare("E3")==0){
- // int tmpIdx = ncmd.toInt(nullptr,16);
- int tmpIdx = ncmd.toInt();
- if(tmpIdx>0){
- dbThread->appendSql(QString("insert into sp_owner_sync_data (id, native_id, device_id, point_code, point_data, data_time, content) values (NULL,%1,'%2','%3','%4','%5','%6')")
- .arg(insertid).arg(deviceid).arg(tmpIdx).arg(status).arg(time).arg(content));
- dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data='%1', data_time='%2', content='%3', point_name='%4',dwtype=%5 where device_id='%6' and point_code='%7';")
- .arg(status).arg(time)
- .arg(content).arg(pname)
- .arg(6).arg(deviceid).arg(tmpIdx));
- }
- }else if(port.compare("E6")==0){
- int tempIdx = ncmd.toInt();
- dbThread->appendSql(QString("insert into sp_owner_sync_data (id, native_id, device_id, point_code, point_data, data_time, content) values (NULL,%1,'%2','%3','%4','%5','%6')")
- .arg(insertid).arg(deviceid).arg(tempIdx+64).arg(data1)
- .arg(time)
- .arg(content));
- if(tempIdx > 0){
- dbThread->appendSql(QString::fromUtf8("update sp_owner_status set point_data='%1', data_time='%2', content='%3',dwtype=%4 where device_id='%5' and point_code='%6';")
- .arg(data1)
- .arg(time)
- .arg(content)
- .arg(6)
- .arg(deviceid)
- .arg(tempIdx+64));
- }
- }
- }
- }
- }
- void PorcessCore::CommData(QString DevicID,int dir,QString data)
- {
- logThread->appendData(data.toUpper());
- wssServer->subReport(DevicID,dir,false,false,data);
- }
- void PorcessCore::commdata(QString data)
- {
- logThread->appendData(data.toUpper());
- }
- void PorcessCore::getOnLine(int devIdx, bool sta)
- {
- if(rtuList->rtus[devIdx].Enabled!=0x01)
- return;
- if(sta){
- rtuList->rtus[devIdx].LastCommtime = QDateTime::currentDateTime().toTime_t();
- if(rtuList->rtus[devIdx].Online_Flag!=0x01){
- rtuList->rtus[devIdx].Online_Flag = 0x01;
- dbThread->appendSql(QString("update sp_devices_status set devicestatus=%1, true_status=%1, statustime='%2', lastcommtime='%2' where deviceid='%3'")
- .arg(0).arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")).arg(rtuList->rtus[devIdx].Device_Code));
- }
- if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED)||(m_client->connectionState()==QMQTT::STATE_INIT)){
- m_client->connectToHost();
- }
- if(m_client->connectionState()==QMQTT::STATE_CONNECTED){
- statusStr.append(QString("{\"devId\":\"%1\",\"devicestatus\":0,\"type\":\"STATUS\",\"timestamp\":\"%2\"}").arg(rtuList->rtus[devIdx].Device_Code).arg(QDateTime::currentDateTime().toTime_t()));
- QString topic1 = QString("/usky/ytDP0006/%1/%2/status").arg(rtuList->rtus[devIdx].Company_Code).arg(rtuList->rtus[devIdx].Device_Code);
- m_client->publish(QMQTT::Message(statusIdx++,topic1,statusStr.toUtf8()));
- statusStr.clear();
- if(statusIdx>9999)
- statusIdx = 1;
- }
- }
- }
- void PorcessCore::repLog(quint16 idx, QDateTime t, QString data, bool dirflag)
- {
- UN_REFERENCED_PARAMETER(idx);
- logThread->appendData(QString("[ %1 47.98.201.73 (rep) %2 ] %3")
- .arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
- .arg(dirflag?">>>":"<<<")
- .arg(data.replace('\n',"\\n").replace('\r',"\\r")));
- }
- void PorcessCore::wxchart(quint16 idx, QDateTime t, QString data, bool dirflag)
- {
- UN_REFERENCED_PARAMETER(idx);
- logThread->appendData(QString("[ %1 47.98.201.73 (wx) %2 ] %3")
- .arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz"))
- .arg(dirflag?">>>":"<<<")
- .arg(data.replace('\n',"\\n").replace('\r',"\\r")));
- }
- void PorcessCore::AlarmReport(QString addr, quint64 insertid, QString type, QString time, QString ptype, QString pnumber)
- {
- // UN_REFERENCED_PARAMETER(insertid);
- UN_REFERENCED_PARAMETER(time);
- QString phonelist = "";
- QString companyCode = "";
- for(int i=0;i<10240;i++){
- if(QString::compare(QString(rtuList->rtus[i].Device_Code),addr)==0){
- companyCode = QString(rtuList->rtus[i].Company_Code);
- break;
- }
- }
- QString rep = QString("{\"SubType\":6,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":false}").arg(addr).arg(insertid);
- QString rep2 = QString("{\"SubType\":6,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":0,\"CompanyCode\":\"%3\",\"evt_name\":\"%4\",\"evt\":0,\"alarm_time\":\"%5\"}")
- .arg(addr).arg(insertid).arg(companyCode).arg(type).arg(time);
- repThread[repcur]->appendData(rep);
- wssThread[repcur++]->appendData(rep2);
- repcur &= 0x0f;
- QString phone;
- if(companyCode.length()>0){
- for(int i=0;i<102400;i++){
- if(companyCode.compare(QString(sysConfShm->userInfo[i].CompanyCode))==0){
- phone = QString(sysConfShm->userInfo[i].CellPhone);
- if(phone.trimmed().length()>0){
- if(phonelist.length()==0)
- phonelist = phone;
- else
- phonelist.append(","+phone);
- }
- }
- }
- if(phonelist.length()>0){
- for(int i=0;i<10240;i++){
- if(QString::compare(QString(rtuList->rtus[i].Device_Code),addr)==0){
- if(QString::compare(QString(rtuList->rtus[i].Device_Type),"1")==0){
- QString data1 = QString("device_code=%1&evt_name=%2&time=%3&phone=%4&insert_id=%5").arg(addr).arg(type).arg(time).arg(phonelist).arg(insertid)
- .replace(",","%2C").replace(":","%3A").replace(" ","+");
- wxThreads[0][wxcur&0x0f]->appendData(data1);
- break;
- }
- }
- }
- QString unique_number = QString("%1%2%3").arg(addr).arg(ptype).arg(pnumber);
- QString data = QString("id=%1&types=%2&insert_id=%3&phone=%4&time=%5&unique_number=%6&api_type=%7").arg(addr).arg(type).arg(insertid).arg("15122423833").arg(time).arg(unique_number).arg("rtu_form");
- QByteArray post_data;
- //设置发送的数据
- post_data.append(QString("id=%1&").arg(addr));
- post_data.append(QString("types=%1&").arg(type));
- post_data.append(QString("insert_id=%1&").arg(insertid));
- post_data.append(QString("phone=%1&").arg("15122423833"));
- post_data.append(QString("time=%1&").arg(time));
- post_data.append(QString("unique_number=%1&").arg(unique_number));
- post_data.append(QString("api_type=%1").arg("rtu_form"));
- QNetworkRequest *req = new QNetworkRequest();
- req->setUrl(QUrl("http://iot.usky.cn/jdxf/wxapp2.php/Home/Rtuwarn/message_sendalarm"));
- req->setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
- req->setHeader(QNetworkRequest::ContentLengthHeader, post_data.length());
- QNetworkReply *reply = netAccessManager->post(*req,post_data);
- wxchart(1,QDateTime::currentDateTime(),data,true);
- // wxThreads[1][wxcur&0x0f]->appendData(data);
- wxcur++;
- wxcur &= 0x0f;
- }
- }
- }
- void PorcessCore::SqlLog(QString log)
- {
- logThread->appendData(log);
- // printf("%s\n",log.toUtf8().data());
- }
|