|
@@ -1,5 +1,5 @@
|
|
|
#include "watercore.h"
|
|
|
-#include "water.h"
|
|
|
+//#include "water.h"
|
|
|
#include "../ytUserInfoProcess/userinfo.h"
|
|
|
#include "../DataPrecessDog/dataprecess.h"
|
|
|
|
|
@@ -7,6 +7,18 @@
|
|
|
|
|
|
WaterCore::WaterCore(QObject *parent) : QObject(parent)
|
|
|
{
|
|
|
+ c = NULL;
|
|
|
+
|
|
|
+ redisconnected=-1;
|
|
|
+ if(redisconnected==-1){
|
|
|
+ redisconnected=redis_init();
|
|
|
+ if(redisconnected==-1){
|
|
|
+ printf("redis init failed\n");
|
|
|
+ }
|
|
|
+ redis_save(AUTH);
|
|
|
+ redis_save(DBID);
|
|
|
+ }
|
|
|
+
|
|
|
mqttinfoIdx = 1;
|
|
|
mqttalarmIdx = 1;
|
|
|
mqttmhinfoIdx = 1;
|
|
@@ -74,6 +86,7 @@ WaterCore::~WaterCore()
|
|
|
{
|
|
|
logThread->stop();
|
|
|
dbThread->stop();
|
|
|
+ redis_free();
|
|
|
}
|
|
|
|
|
|
void WaterCore::start()
|
|
@@ -118,37 +131,41 @@ void WaterCore::SqlLog(QString log)
|
|
|
logThread->appendData(log);
|
|
|
}
|
|
|
|
|
|
-void WaterCore::getOnLine(int deviceidx,bool flag, QDateTime t)
|
|
|
+void WaterCore::getOnLine(int deviceidx, QString deviceid, bool flag, QDateTime t)
|
|
|
{
|
|
|
+
|
|
|
t = QDateTime::currentDateTime();
|
|
|
- if(waterSensorList->sensors[deviceidx].Enabled!=0x01)
|
|
|
+ if(QString("0x01").compare(redis_qstring((QString("hget sp_owner2-%1 enabled").arg(deviceid)).toUtf8()))!=0){
|
|
|
+ printf("redis_qstring((QString(hget sp_owner2-%1 enabled).arg(deviceid)).toUtf8()): %s\n",redis_qstring((QString("hget sp_owner2-%1 enabled").arg(deviceid)).toUtf8()).toUtf8().data());
|
|
|
return;
|
|
|
+ }
|
|
|
if(flag)
|
|
|
{
|
|
|
- waterSensorList->sensors[deviceidx].LastCommtime = t.toTime_t();
|
|
|
- if(waterSensorList->sensors[deviceidx].Online_Flag!=0x01)
|
|
|
+ redis_save((QString("hset sp_owner2-%1 lastcommtime %2").arg(deviceid).arg(t.toTime_t())).toUtf8());
|
|
|
+ if(QString("0x01").compare(redis_qstring((QString("hget sp_owner2-%1 onlineflag").arg(deviceid)).toUtf8()))!=0)
|
|
|
{
|
|
|
- waterSensorList->sensors[deviceidx].Online_Flag = 0x01;
|
|
|
+ redis_save((QString("hset sp_owner2-%1 onlineflag %2").arg(deviceid).arg("0x01")).toUtf8());
|
|
|
}
|
|
|
dbThread->appendSql(QString("update sp_devices_status set devicestatus=0, true_status=0, statustime='%1', lastcommtime='%1' where deviceid='%2'")
|
|
|
- .arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
|
|
|
+ .arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(deviceid));
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
-void WaterCore::getValue(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QDateTime t)
|
|
|
+void WaterCore::getValue(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QDateTime t)
|
|
|
{
|
|
|
QString infoTopic = "";
|
|
|
QString infoData = "";
|
|
|
QString mhinfoTopic = QString("mh/water/info");
|
|
|
QString mhinfoData = "";
|
|
|
- infoTopic.append(QString("/usky/ytDP0002/%1/%2/info").arg(QString(waterSensorList->sensors[deviceidx].Company_Code)).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
|
|
|
+ infoTopic.append(QString("/usky/ytDP0002/%1/%2/info").arg(redis_qstring((QString("hget sp_owner2-%1 companycode").arg(deviceid)).toUtf8())).arg(deviceid));
|
|
|
QString tmpStr = d1.left(1);
|
|
|
if(tmpStr.compare("W")==0){
|
|
|
- infoData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"devs\":[{\"dp\":[{\"property\":\"电量\",\"serial\":\"201\",\"value\":\"%3\"},{\"property\":\"信号\",\"serial\":\"202\",\"value\":\"%4\"},{\"property\":\"水压\",\"serial\":\"203\",\"value\":\"%5\"},{\"property\":\"状态\",\"serial\":\"204\",\"value\":\"0\"}],\"deviceName\":\"%6\",\"timeStamp\":\"%7\",\"deviceModel\":\"\",\"deviceType\":\"%8\",\"devId\":\"%9\"}],\"type\":\"INFO\",\"timeStamp\":\"%10\"}").arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(d2).arg(d3).arg(d4).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(t.toTime_t()).arg(QString(waterSensorList->sensors[deviceidx].Device_Type)).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(t.toTime_t()));
|
|
|
+ infoData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"devs\":[{\"dp\":[{\"property\":\"电量\",\"serial\":\"201\",\"value\":\"%3\"},{\"property\":\"信号\",\"serial\":\"202\",\"value\":\"%4\"},{\"property\":\"水压\",\"serial\":\"203\",\"value\":\"%5\"},{\"property\":\"状态\",\"serial\":\"204\",\"value\":\"%6\"}],\"deviceName\":\"%7\",\"timeStamp\":\"%8\",\"deviceModel\":\"\",\"deviceType\":\"%9\",\"devId\":\"%10\"}],\"type\":\"INFO\",\"timeStamp\":\"%11\"}").arg(deviceid).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(d2).arg(d3).arg(d4).arg(d1).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(t.toTime_t()).arg(redis_qstring((QString("hget sp_owner2-%1 devicetype").arg(deviceid)).toUtf8())).arg(deviceid).arg(t.toTime_t()));
|
|
|
|
|
|
}else if(tmpStr.compare("L")==0){
|
|
|
|
|
|
- infoData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"devs\":[{\"dp\":[{\"property\":\"电量\",\"serial\":\"501\",\"value\":\"%3\"},{\"property\":\"信号\",\"serial\":\"502\",\"value\":\"%4\"},{\"property\":\"水位\",\"serial\":\"503\",\"value\":\"%5\"},{\"property\":\"状态\",\"serial\":\"504\",\"value\":\"0\"}],\"deviceName\":\"%6\",\"timeStamp\":\"%7\",\"deviceModel\":\"\",\"deviceType\":\"%8\",\"devId\":\"%9\"}],\"type\":\"INFO\",\"timeStamp\":\"%10\"}").arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(d2).arg(d3).arg(d4).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(t.toTime_t()).arg(QString(waterSensorList->sensors[deviceidx].Device_Type)).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(t.toTime_t()));
|
|
|
+ infoData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"devs\":[{\"dp\":[{\"property\":\"电量\",\"serial\":\"501\",\"value\":\"%3\"},{\"property\":\"信号\",\"serial\":\"502\",\"value\":\"%4\"},{\"property\":\"水位\",\"serial\":\"503\",\"value\":\"%5\"},{\"property\":\"状态\",\"serial\":\"504\",\"value\":\"%6\"}],\"deviceName\":\"%7\",\"timeStamp\":\"%8\",\"deviceModel\":\"\",\"deviceType\":\"%9\",\"devId\":\"%10\"}],\"type\":\"INFO\",\"timeStamp\":\"%11\"}").arg(deviceid).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(d2).arg(d3).arg(d4).arg(d1).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(t.toTime_t()).arg(redis_qstring((QString("hget sp_owner2-%1 devicetype").arg(deviceid)).toUtf8())).arg(deviceid).arg(t.toTime_t()));
|
|
|
}
|
|
|
|
|
|
if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED) || (m_client->connectionState()==QMQTT::STATE_INIT))
|
|
@@ -161,44 +178,38 @@ void WaterCore::getValue(int deviceidx, QString d1, int d2, int d3, double d4, Q
|
|
|
if(mqttinfoIdx>9999)
|
|
|
mqttinfoIdx = 1;
|
|
|
|
|
|
- for(int i=0;i<1024;i++){
|
|
|
- QString mhDevCode = QString(mhwaterSensorList->mhsensors[i].Device_Code);
|
|
|
- if((mhDevCode.compare(QString(waterSensorList->sensors[deviceidx].Device_Code)) == 0)){
|
|
|
+ if(redis_int((QString("hexists yt_t_mhwater%1 devicecode").arg(deviceid)).toUtf8())==1){
|
|
|
|
|
|
- mhinfoData.append(QString("{\"deviceCode\":\"%1\",\"signalLevel\":%2,\"volt\":%3,\"lon\":%4,\"lat\":%5,\"createTime\":%6,\"param\":{\"platform_cy\":\"闵行城运中心-闵行消防支队数字平台系统\",\"scenetype_cy\":\"安全管理\"}}").arg(QString(mhwaterSensorList->mhsensors[i].Mh_Device_Code)).arg(d3).arg(d2).arg(mhwaterSensorList->mhsensors[i].longitude,0,'r',6).arg(mhwaterSensorList->mhsensors[i].latitude,0,'r',6).arg(QDateTime::currentDateTime().toTime_t()));
|
|
|
+ mhinfoData.append(QString("{\"deviceCode\":\"%1\",\"signalLevel\":%2,\"volt\":%3,\"lon\":%4,\"lat\":%5,\"createTime\":%6,\"param\":{\"platform_cy\":\"闵行城运中心-闵行消防支队数字平台系统\",\"scenetype_cy\":\"安全管理\"}}").arg(redis_qstring((QString("hget yt_t_mhwater%1 mhdevicecode").arg(deviceid)).toUtf8())).arg(d3).arg(d2).arg(redis_qstring((QString("hget yt_t_mhwater%1 longitude").arg(deviceid)).toUtf8()).toDouble(),0,'r',6).arg(redis_qstring((QString("hget yt_t_mhwater%1 latitude").arg(deviceid)).toUtf8()).toDouble(),0,'r',6).arg(QDateTime::currentDateTime().toTime_t()));
|
|
|
|
|
|
- m_client->publish(QMQTT::Message(mqttmhinfoIdx++,mhinfoTopic,mhinfoData.toUtf8()));
|
|
|
- if(mqttmhinfoIdx>9999)
|
|
|
- mqttmhinfoIdx = 1;
|
|
|
-
|
|
|
- break;
|
|
|
- }
|
|
|
+ m_client->publish(QMQTT::Message(mqttmhinfoIdx++,mhinfoTopic,mhinfoData.toUtf8()));
|
|
|
+ if(mqttmhinfoIdx>9999)
|
|
|
+ mqttmhinfoIdx = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
- QString log = QString("[ %1 getValue========== %2]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(waterSensorList->sensors[deviceidx].Device_Code);
|
|
|
+ QString log = QString("[ %1 getValue========== %2]").arg(t.toString("yyyy-MM-dd HH:mm:ss.zzz")).arg(deviceid);
|
|
|
logThread->appendData(log);
|
|
|
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')")
|
|
|
- .arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg("tp_water_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5));
|
|
|
- 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(QString(waterSensorList->sensors[deviceidx].Device_Code)));
|
|
|
- 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(QString(waterSensorList->sensors[deviceidx].Device_Code)));
|
|
|
- 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(QString(waterSensorList->sensors[deviceidx].Device_Code)));
|
|
|
- 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(QString(waterSensorList->sensors[deviceidx].Device_Code)));
|
|
|
+ .arg(deviceid).arg("tp_water_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5));
|
|
|
+ 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(deviceid));
|
|
|
+ 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(deviceid));
|
|
|
+ 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(deviceid));
|
|
|
+ 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(deviceid));
|
|
|
// QString rep2 = QString("{\"mqttId\":\"a71c40bb-5b02-4741-881b-24449f699db5\",\"action\":\"transpush\",\"data\":{\"provider\":\"Usky\",\"deviceType\":\"XiaoFangShuiYa\",\"dataType\":\"deviceInfo\",\"softVersion\":\"1.00.00\",\"hardVersion\":\"0.1\",\"sensorList\":[{\"sensorId\":%1,\"status\":%2,\"pointValue\":%3,\"unit\":\"%4\",\"lowThreshold\":%5,\"highThreshold\":%6,\"sendTime\":%7,\"desc\":\"%8\"}]}}")
|
|
|
// .arg(addr).arg(insertid).arg(companyCode).arg(type).arg(time);
|
|
|
- if(QString::compare(QString(waterSensorList->sensors[deviceidx].Company_Code),"10232")==0 || QString::compare(QString(waterSensorList->sensors[deviceidx].Company_Code),"10318")==0){
|
|
|
- QString data = QString("device_code=%1&device_value=%2&user_from=longHuWater").arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(d4)
|
|
|
+ if(QString::compare(redis_qstring((QString("hget sp_owner2-%1 companycode").arg(deviceid)).toUtf8()),"10232")==0 || QString::compare(redis_qstring((QString("hget sp_owner2-%1 companycode").arg(deviceid)).toUtf8()),"10318")==0){
|
|
|
+ QString data = QString("device_code=%1&device_value=%2&user_from=longHuWater").arg(deviceid).arg(d4)
|
|
|
.replace(",","%2C").replace(":","%3A").replace(" ","+");
|
|
|
wxThreads[2][wxcur&0x0f]->appendData(data);//龙湖定时数据推送
|
|
|
wxcur++;
|
|
|
wxcur &= 0x0f;
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
-void WaterCore::getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t)
|
|
|
+void WaterCore::getAlarm(int deviceidx, QString deviceid, QString d1, int d2, int d3, double d4, QString d5, QString note, QDateTime t)
|
|
|
{
|
|
|
QString alarmTopic = "";
|
|
|
QString alarmData = "";
|
|
@@ -206,7 +217,7 @@ void WaterCore::getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, Q
|
|
|
QString mhalarmData = "";
|
|
|
QString point = "";
|
|
|
QString tmpStr1 = d1.left(1);
|
|
|
- alarmTopic.append(QString("/usky/ytDP0002/%1/%2/alarm").arg(QString(waterSensorList->sensors[deviceidx].Company_Code)).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
|
|
|
+ alarmTopic.append(QString("/usky/ytDP0002/%1/%2/alarm").arg(redis_qstring((QString("hget sp_owner2-%1 companycode").arg(deviceid)).toUtf8())).arg(deviceid));
|
|
|
if(tmpStr1.compare("W")==0){
|
|
|
if(note.compare("低压")==0){
|
|
|
point.append("221");
|
|
@@ -216,7 +227,7 @@ void WaterCore::getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, Q
|
|
|
point.append("223");
|
|
|
}
|
|
|
|
|
|
- alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\"}],\"deviceName\":\"%6\",\"timeStamp\":\"%7\",\"deviceModel\":\"\",\"deviceType\":\"%8\",\"devId\":\"%9\"}],\"type\":\"ALARM\",\"timeStamp\":\"%10\"}").arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(note).arg(point).arg(d4).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(t.toTime_t()).arg(QString(waterSensorList->sensors[deviceidx].Device_Type)).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(t.toTime_t()));
|
|
|
+ alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\",\"type\":\"%6\",\"battery\":\"%7\",\"signal\":\"%8\"}],\"deviceName\":\"%9\",\"timeStamp\":\"%10\",\"deviceModel\":\"\",\"deviceType\":\"%11\",\"devId\":\"%12\"}],\"type\":\"ALARM\",\"timeStamp\":\"%13\"}").arg(deviceid).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(note).arg(point).arg(d4).arg(d1).arg(d2).arg(d3).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(t.toTime_t()).arg(redis_qstring((QString("hget sp_owner2-%1 devicetype").arg(deviceid)).toUtf8())).arg(deviceid).arg(t.toTime_t()));
|
|
|
|
|
|
}else if(tmpStr1.compare("L")==0){
|
|
|
|
|
@@ -230,7 +241,7 @@ void WaterCore::getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, Q
|
|
|
point.append("524");
|
|
|
}
|
|
|
|
|
|
- alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\"}],\"deviceName\":\"%6\",\"timeStamp\":\"%7\",\"deviceModel\":\"\",\"deviceType\":\"%8\",\"devId\":\"%9\"}],\"type\":\"ALARM\",\"timeStamp\":\"%10\"}").arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(note).arg(point).arg(d4).arg(QString(waterSensorList->sensors[deviceidx].Device_Name)).arg(t.toTime_t()).arg(QString(waterSensorList->sensors[deviceidx].Device_Type)).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg(t.toTime_t()));
|
|
|
+ alarmData.append(QString("{\"devId\":\"%1\",\"connType\":\"G\",\"deviceName\":\"%2\",\"alarams\":[{\"dp\":[{\"property\":\"%3\",\"serial\":\"%4\",\"value\":\"%5\",\"status\":\"0\",\"type\":\"%6\",\"battery\":\"%7\",\"signal\":\"%8\"}],\"deviceName\":\"%9\",\"timeStamp\":\"%10\",\"deviceModel\":\"\",\"deviceType\":\"%11\",\"devId\":\"%12\"}],\"type\":\"ALARM\",\"timeStamp\":\"%13\"}").arg(deviceid).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(note).arg(point).arg(d4).arg(d1).arg(d2).arg(d3).arg(redis_qstring((QString("hget sp_owner2-%1 devicename").arg(deviceid)).toUtf8())).arg(t.toTime_t()).arg(redis_qstring((QString("hget sp_owner2-%1 devicetype").arg(deviceid)).toUtf8())).arg(deviceid).arg(t.toTime_t()));
|
|
|
|
|
|
}
|
|
|
if((m_client->connectionState()==QMQTT::STATE_DISCONNECTED) || (m_client->connectionState()==QMQTT::STATE_INIT))
|
|
@@ -244,34 +255,31 @@ void WaterCore::getAlarm(int deviceidx, QString d1, int d2, int d3, double d4, Q
|
|
|
mqttalarmIdx = 1;
|
|
|
|
|
|
|
|
|
- for(int i=0;i<1024;i++){
|
|
|
- QString mhDevCode = QString(mhwaterSensorList->mhsensors[i].Device_Code);
|
|
|
- if((mhDevCode.compare(QString(waterSensorList->sensors[deviceidx].Device_Code)) == 0) && (mhwaterSensorList->mhsensors[i].Push_Status == 1)){
|
|
|
-
|
|
|
- mhalarmData.append(QString("{\"deviceCode\":\"%1\",\"lon\":%2,\"lat\":%3,\"createTime\":%4,\"addr\":\"上海市\",\"eventCode1\":\"02\",\"eventName1\":\"预警数据\",\"eventCode2\":\"02008\",\"eventName2\":\"水压报警\",\"description\":\"%5\",\"param\":{\"platform_cy\":\"闵行城运中心-闵行消防支队数字平台系统\",\"scenetype_cy\":\"安全管理\"}}").arg(QString(mhwaterSensorList->mhsensors[i].Mh_Device_Code)).arg(mhwaterSensorList->mhsensors[i].longitude,0,'r',6).arg(mhwaterSensorList->mhsensors[i].latitude,0,'r',6).arg(QDateTime::currentDateTime().toTime_t()).arg(""));
|
|
|
- m_client->publish(QMQTT::Message(mqttmhalertIdx++,mhalarmTopic,mhalarmData.toUtf8()));
|
|
|
- if(mqttmhalertIdx>9999)
|
|
|
- mqttmhalertIdx = 1;
|
|
|
+ QString pushstatus = redis_qstring((QString("hget yt_t_mhwater%1 pushstatus").arg(deviceid)).toUtf8());
|
|
|
+ if((redis_int((QString("hexists yt_t_mhwater%1 devicecode").arg(deviceid)).toUtf8())==1) && (pushstatus.toInt() == 1)){
|
|
|
|
|
|
- break;
|
|
|
- }
|
|
|
+ mhalarmData.append(QString("{\"deviceCode\":\"%1\",\"lon\":%2,\"lat\":%3,\"createTime\":%4,\"addr\":\"上海市\",\"eventCode1\":\"02\",\"eventName1\":\"预警数据\",\"eventCode2\":\"02008\",\"eventName2\":\"水压报警\",\"description\":\"%5\",\"param\":{\"platform_cy\":\"闵行城运中心-闵行消防支队数字平台系统\",\"scenetype_cy\":\"安全管理\"}}").arg(redis_qstring((QString("hget yt_t_mhwater%1 mhdevicecode").arg(deviceid)).toUtf8())).arg(redis_qstring((QString("hget yt_t_mhwater%1 longitude").arg(deviceid)).toUtf8()).toDouble(),0,'r',6).arg(redis_qstring((QString("hget yt_t_mhwater%1 latitude").arg(deviceid)).toUtf8()).toDouble(),0,'r',6).arg(QDateTime::currentDateTime().toTime_t()).arg(""));
|
|
|
+ m_client->publish(QMQTT::Message(mqttmhalertIdx++,mhalarmTopic,mhalarmData.toUtf8()));
|
|
|
+ if(mqttmhalertIdx>9999)
|
|
|
+ mqttmhalertIdx = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
- dbThread->appendAlarm(AlarmRep(QString(waterSensorList->sensors[deviceidx].Device_Code),
|
|
|
+ dbThread->appendAlarm(AlarmRep(deviceid,
|
|
|
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')")
|
|
|
- .arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg("tp_water_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5),
|
|
|
+ .arg(deviceid).arg("tp_water_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5),
|
|
|
QString("%1").arg(note),
|
|
|
t.toString("yyyy-MM-dd HH:mm:ss")));
|
|
|
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')")
|
|
|
- .arg(QString(waterSensorList->sensors[deviceidx].Device_Code)).arg("tp_water_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5));
|
|
|
+ .arg(deviceid).arg("tp_water_pressure").arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(d1).arg(d2).arg(d3).arg(d4).arg(d5));
|
|
|
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")
|
|
|
- .arg(d1.at(2)).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(note).arg(QString(waterSensorList->sensors[deviceidx].Device_Code)));
|
|
|
- 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(QString(waterSensorList->sensors[deviceidx].Device_Code)));
|
|
|
- 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(QString(waterSensorList->sensors[deviceidx].Device_Code)));
|
|
|
- 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(QString(waterSensorList->sensors[deviceidx].Device_Code)));
|
|
|
+ .arg(d1.at(2)).arg(t.toString("yyyy-MM-dd HH:mm:ss")).arg(note).arg(deviceid));
|
|
|
+ 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(deviceid));
|
|
|
+ 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(deviceid));
|
|
|
+ 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(deviceid));
|
|
|
+
|
|
|
}
|
|
|
|
|
|
void WaterCore::AlarmReport(QString addr, quint64 insertid, QString type, QString time)
|
|
@@ -281,12 +289,9 @@ void WaterCore::AlarmReport(QString addr, quint64 insertid, QString type, QStrin
|
|
|
QString phonelist = "";
|
|
|
QString companyCode = "";
|
|
|
QString deviceType= "";//设备类型
|
|
|
- for(int i=0;i<10240;i++){
|
|
|
- if(QString::compare(QString(waterSensorList->sensors[i].Device_Code),addr)==0){
|
|
|
- companyCode = QString(waterSensorList->sensors[i].Company_Code);
|
|
|
- deviceType = QString(waterSensorList->sensors[i].Device_Type);
|
|
|
- break;
|
|
|
- }
|
|
|
+ if(redis_int((QString("hexists sp_owner2-%1 devicecode").arg(addr)).toUtf8())==1){
|
|
|
+ companyCode = redis_qstring((QString("hget sp_owner2-%1 companycode").arg(addr)).toUtf8());
|
|
|
+ deviceType = redis_qstring((QString("hget sp_owner2-%1 devicetype").arg(addr)).toUtf8());
|
|
|
}
|
|
|
QString rep = QString("{\"SubType\":2,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":false}").arg(addr).arg(insertid);
|
|
|
QString rep2 = QString("{\"SubType\":2,\"DeviceId\":\"%1\",\"InsertId\":%2,\"Confirmed\":0,\"CompanyCode\":\"%3\",\"evt_name\":\"%4\",\"evt\":0,\"alarm_time\":\"%5\"}")
|
|
@@ -328,34 +333,30 @@ void WaterCore::AlarmReport(QString addr, quint64 insertid, QString type, QStrin
|
|
|
QString mhstaTopic = QString("mh/water/statistics");
|
|
|
QString mhstaData0 = "",mhstaData1 = "";
|
|
|
|
|
|
- for(int i=0;i<1024;i++){
|
|
|
- QString mhDevCode = QString(mhwaterSensorList->mhsensors[i].Device_Code);
|
|
|
- if((mhDevCode.compare(addr) == 0) && (mhwaterSensorList->mhsensors[i].Push_Status == 1)){
|
|
|
+ QString pushstatus = redis_qstring((QString("hget yt_t_mhwater%1 pushstatus").arg(addr)).toUtf8());
|
|
|
+ if((redis_int((QString("hexists yt_t_mhwater%1 devicecode").arg(addr)).toUtf8())==1) && (pushstatus.toInt() == 1)){
|
|
|
|
|
|
- mhstaData0.append(QString("{\"id\":%1,\"createTime\":\"%2\",\"ajType\":\"%3\",\"street\":\"%4\",\"address\":\"%5\",\"grid\":\"%6\",\"ajDescribe\":\"%7\",\"dutyGroup\":\"%8\",\"ajFlag\":0,\"endTime\":\"%9\"}").arg(insertid).arg(time).arg(mhwaterSensorList->mhsensors[i].Aj_Type).arg(mhwaterSensorList->mhsensors[i].Street).arg(QString("%1,%2").arg(mhwaterSensorList->mhsensors[i].Company_Address).arg(mhwaterSensorList->mhsensors[i].Device_Name)).arg(mhwaterSensorList->mhsensors[i].Grid).arg(type).arg(mhwaterSensorList->mhsensors[i].Company_Name).arg((QDateTime::fromString(time,"yyyy-MM-dd hh:mm:ss").addDays(3)).toString("yyyy-MM-dd hh:mm:ss")));
|
|
|
- mhstaData1.append(QString("{\"id\":%1,\"createTime\":\"%2\",\"ajType\":\"%3\",\"street\":\"%4\",\"address\":\"%5\",\"grid\":\"%6\",\"ajDescribe\":\"%7\",\"dutyGroup\":\"%8\",\"ajFlag\":1,\"endTime\":\"%9\"}").arg(insertid).arg(time).arg(mhwaterSensorList->mhsensors[i].Aj_Type).arg(mhwaterSensorList->mhsensors[i].Street).arg(QString("%1,%2").arg(mhwaterSensorList->mhsensors[i].Company_Address).arg(mhwaterSensorList->mhsensors[i].Device_Name)).arg(mhwaterSensorList->mhsensors[i].Grid).arg(type).arg(mhwaterSensorList->mhsensors[i].Company_Name).arg((QDateTime::fromString(time,"yyyy-MM-dd hh:mm:ss").addDays(3)).toString("yyyy-MM-dd hh:mm:ss")));
|
|
|
+ mhstaData0.append(QString("{\"id\":%1,\"createTime\":\"%2\",\"ajType\":\"%3\",\"street\":\"%4\",\"address\":\"%5\",\"grid\":\"%6\",\"ajDescribe\":\"%7\",\"dutyGroup\":\"%8\",\"ajFlag\":0,\"endTime\":\"%9\"}").arg(insertid).arg(time).arg(redis_qstring((QString("hget yt_t_mhwater%1 ajtype").arg(addr)).toUtf8())).arg(redis_qstring((QString("hget yt_t_mhwater%1 street").arg(addr)).toUtf8())).arg(QString("%1,%2").arg(redis_qstring((QString("hget yt_t_mhwater%1 companyaddress").arg(addr)).toUtf8())).arg(redis_qstring((QString("hget yt_t_mhwater%1 devicename").arg(addr)).toUtf8()))).arg(redis_qstring((QString("hget yt_t_mhwater%1 grid").arg(addr)).toUtf8())).arg(type).arg(redis_qstring((QString("hget yt_t_mhwater%1 companyname").arg(addr)).toUtf8())).arg((QDateTime::fromString(time,"yyyy-MM-dd hh:mm:ss").addDays(3)).toString("yyyy-MM-dd hh:mm:ss")));
|
|
|
+ mhstaData1.append(QString("{\"id\":%1,\"createTime\":\"%2\",\"ajType\":\"%3\",\"street\":\"%4\",\"address\":\"%5\",\"grid\":\"%6\",\"ajDescribe\":\"%7\",\"dutyGroup\":\"%8\",\"ajFlag\":1,\"endTime\":\"%9\"}").arg(insertid).arg(time).arg(redis_qstring((QString("hget yt_t_mhwater%1 ajtype").arg(addr)).toUtf8())).arg(redis_qstring((QString("hget yt_t_mhwater%1 street").arg(addr)).toUtf8())).arg(QString("%1,%2").arg(redis_qstring((QString("hget yt_t_mhwater%1 companyaddress").arg(addr)).toUtf8())).arg(redis_qstring((QString("hget yt_t_mhwater%1 devicename").arg(addr)).toUtf8()))).arg(redis_qstring((QString("hget yt_t_mhwater%1 grid").arg(addr)).toUtf8())).arg(type).arg(redis_qstring((QString("hget yt_t_mhwater%1 companyname").arg(addr)).toUtf8())).arg((QDateTime::fromString(time,"yyyy-MM-dd hh:mm:ss").addDays(3)).toString("yyyy-MM-dd hh:mm:ss")));
|
|
|
|
|
|
- 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(mqttmhalertIdx++,mhstaTopic,mhstaData0.toUtf8()));
|
|
|
- if(mqttmhsta0Idx>9999)
|
|
|
- mqttmhsta0Idx = 1;
|
|
|
-
|
|
|
- m_client->publish(QMQTT::Message(mqttmhalertIdx++,mhstaTopic,mhstaData1.toUtf8()));
|
|
|
- if(mqttmhsta1Idx>9999)
|
|
|
- mqttmhsta1Idx = 1;
|
|
|
- }
|
|
|
-
|
|
|
- break;
|
|
|
- }
|
|
|
+ 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(mqttmhalertIdx++,mhstaTopic,mhstaData0.toUtf8()));
|
|
|
+ if(mqttmhsta0Idx>9999)
|
|
|
+ mqttmhsta0Idx = 1;
|
|
|
|
|
|
+ m_client->publish(QMQTT::Message(mqttmhalertIdx++,mhstaTopic,mhstaData1.toUtf8()));
|
|
|
+ if(mqttmhsta1Idx>9999)
|
|
|
+ mqttmhsta1Idx = 1;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void WaterCore::repLog(quint16 idx, QDateTime t, QString data, bool dirflag)
|
|
@@ -376,3 +377,174 @@ void WaterCore::wxchart(quint16 idx, QDateTime t, QString data, bool dirflag)
|
|
|
.arg(dirflag?">>>":"<<<")
|
|
|
.arg(data.replace('\n',"\\n").replace('\r',"\\r")));
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+int WaterCore::redis_init()
|
|
|
+{
|
|
|
+ c = redisConnect(REDIS_HOST, REDIS_PORT);
|
|
|
+ if (NULL == c || c->err) {
|
|
|
+ if(c) {
|
|
|
+ printf("Redis [%s:%d], Error:[%s]\n", REDIS_HOST, REDIS_PORT, c->errstr);
|
|
|
+ redisFree(c);
|
|
|
+ } else {
|
|
|
+ printf("Redis [%s:%d] failure\n", REDIS_HOST, REDIS_PORT);
|
|
|
+ }
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+void WaterCore::redis_free()
|
|
|
+{
|
|
|
+ if (c) {
|
|
|
+ redisFree(c);
|
|
|
+ }
|
|
|
+ c = NULL;
|
|
|
+}
|
|
|
+
|
|
|
+int WaterCore::redis_save(const char *cmd)
|
|
|
+{
|
|
|
+ int i = 0;
|
|
|
+ redisReply *r = NULL;
|
|
|
+ if (NULL == cmd) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("%s, c %p\n", cmd,c);
|
|
|
+
|
|
|
+ r = (redisReply *)redisCommand(c, cmd);
|
|
|
+ if (NULL == r) {
|
|
|
+ printf("Error[%d:%s]", c->err, c->errstr);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ switch(r->type) {
|
|
|
+ case REDIS_REPLY_STATUS:
|
|
|
+ printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_ERROR:
|
|
|
+ printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_INTEGER:
|
|
|
+ printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_NIL:
|
|
|
+ printf("type:%s, no data\n", "REDIS_REPLY_NIL");
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_STRING:
|
|
|
+ printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_ARRAY:
|
|
|
+ printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
|
|
|
+ for (i = 0; i < r->elements; i++) {
|
|
|
+ printf("%d: %s\n", i, r->element[i]->str);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ printf("unkonwn type:%d\n", r->type);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*release reply and context */
|
|
|
+ freeReplyObject(r);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+QString WaterCore::redis_qstring(const char *cmd)
|
|
|
+{
|
|
|
+ redisReply *r = NULL;
|
|
|
+ if (NULL == cmd) {
|
|
|
+ return "error";
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("%s\n", cmd);
|
|
|
+
|
|
|
+ r = (redisReply *)redisCommand(c, cmd);
|
|
|
+ if (NULL == r) {
|
|
|
+ printf("Error[%d:%s]", c->err, c->errstr);
|
|
|
+ return "error";
|
|
|
+ }
|
|
|
+
|
|
|
+ switch(r->type) {
|
|
|
+ case REDIS_REPLY_STATUS:
|
|
|
+ printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_ERROR:
|
|
|
+ printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_INTEGER:
|
|
|
+ printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_NIL:
|
|
|
+ printf("type:%s, no data\n", "REDIS_REPLY_NIL");
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_STRING:
|
|
|
+ printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_ARRAY:
|
|
|
+ printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
|
|
|
+ for (int i = 0; i < r->elements; i++) {
|
|
|
+ printf("%d: %s\n", i, r->element[i]->str);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ printf("unkonwn type:%d\n", r->type);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ QString data = r->str;
|
|
|
+
|
|
|
+ /*release reply and context */
|
|
|
+ freeReplyObject(r);
|
|
|
+ return data;
|
|
|
+}
|
|
|
+
|
|
|
+int WaterCore::redis_int(const char *cmd)
|
|
|
+{
|
|
|
+ redisReply *r = NULL;
|
|
|
+ if (NULL == cmd) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("%s\n", cmd);
|
|
|
+
|
|
|
+ r = (redisReply *)redisCommand(c, cmd);
|
|
|
+ if (NULL == r) {
|
|
|
+ printf("Error[%d:%s]", c->err, c->errstr);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ switch(r->type) {
|
|
|
+ case REDIS_REPLY_STATUS:
|
|
|
+ printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STATUS", r->len, r->str);
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_ERROR:
|
|
|
+ printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_ERROR", r->len, r->str);
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_INTEGER:
|
|
|
+ printf("type:%s, reply->integer:%lld\n", "REDIS_REPLY_INTEGER", r->integer);
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_NIL:
|
|
|
+ printf("type:%s, no data\n", "REDIS_REPLY_NIL");
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_STRING:
|
|
|
+ printf("type:%s, reply->len:%ld reply->str:%s\n", "REDIS_REPLY_STRING", r->len, r->str);
|
|
|
+ break;
|
|
|
+ case REDIS_REPLY_ARRAY:
|
|
|
+ printf("type:%s, reply->elements:%ld\n", "REDIS_REPLY_ARRAY", r->elements);
|
|
|
+ for (int i = 0; i < r->elements; i++) {
|
|
|
+ printf("%d: %s\n", i, r->element[i]->str);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ printf("unkonwn type:%d\n", r->type);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ int data = r->integer;
|
|
|
+
|
|
|
+ /*release reply and context */
|
|
|
+ freeReplyObject(r);
|
|
|
+ return data;
|
|
|
+}
|