diff --git a/common/parameter_defination.hpp b/common/parameter_defination.hpp index ec3d6a2..b738eac 100644 --- a/common/parameter_defination.hpp +++ b/common/parameter_defination.hpp @@ -368,4 +368,24 @@ struct Param_65 { std::string timeEnd; Param_65() : mMode(0),mPackageFlag(0),timeStart(""),timeEnd(""){}; }; + +// 无线温度传感器(蓝牙) +struct Param_100{ + int mPackageFlag; + Param_100() : mPackageFlag(0){}; +} + +struct Param_101{ + std::string mac; + std::string timeStart; + std::string timeEnd; + int mPackageFlag; + Param_61() : mac(""),straxis(""),timeStart(""),timeEnd(""),mPackageFlag(0){}; +}; + +struct Param_103{ + std::string mac; + int operate; // 0:添加 1:删除 + Param_103() : mac(""),operate(0){}; +}; #endif // PARAMETER_DEFINATION_HPP_ diff --git a/dbaccess/sql_db.hpp b/dbaccess/sql_db.hpp index e2dfdb2..02b9cb8 100644 --- a/dbaccess/sql_db.hpp +++ b/dbaccess/sql_db.hpp @@ -24,6 +24,8 @@ extern const char *T_BATTERY_INFO1[]; #define T_DATANODE_TIME(x) T_DATANODE_TIME1[T_DATANODE_TIME_##x] #define T_BATTERY_INFO(x) T_BATTERY_INFO1[T_BATTERY_INFO_##x] +#define T_SENSOR_BT_INFO(x) T_SENSOR_INFO1[T_SENSOR_BT_INFO_##x] + typedef std::map map_t; typedef std::vector vec_t; typedef std::vector vec_Value; diff --git a/doc/无线传感器网关web协议文档.docx b/doc/无线传感器网关web协议文档.docx new file mode 100644 index 0000000..c4f3d99 Binary files /dev/null and b/doc/无线传感器网关web协议文档.docx differ diff --git a/doc/无线传感器网关服务器通信协议.docx b/doc/无线传感器网关服务器通信协议.docx new file mode 100644 index 0000000..3aef085 Binary files /dev/null and b/doc/无线传感器网关服务器通信协议.docx differ diff --git a/doc/无线网关web页面5.0版本开发需求.docx b/doc/无线网关web页面5.0版本开发需求.docx new file mode 100644 index 0000000..1f39fab Binary files /dev/null and b/doc/无线网关web页面5.0版本开发需求.docx differ diff --git a/jsonparse/communication_cmd.hpp b/jsonparse/communication_cmd.hpp index 02921f8..2877d1c 100644 --- a/jsonparse/communication_cmd.hpp +++ b/jsonparse/communication_cmd.hpp @@ -74,6 +74,12 @@ public: std::string JsonCmd_Cgi_63(Param_63 ¶m); std::string JsonCmd_Cgi_64(Param_64 ¶m); std::string JsonCmd_Cgi_65(Param_65 ¶m); + + // 无线温度传感器(蓝牙) + std::string JsonCmd_Cgi_100(Param_100 ¶m); + std::string JsonCmd_Cgi_101(Param_101 ¶m); + std::string JsonCmd_Cgi_102(); + std::string JsonCmd_Cgi_103(Param_103 ¶m); std::string JsonCmd_Cgi_default(); //CMT tcp diff --git a/jsonparse/web_cmd_parse4.cpp b/jsonparse/web_cmd_parse4.cpp new file mode 100644 index 0000000..155bcbd --- /dev/null +++ b/jsonparse/web_cmd_parse4.cpp @@ -0,0 +1,174 @@ +#include "communication_cmd.hpp" +#include +#include +#include +#include "common/global.hpp" +#include "dbaccess/sql_db.hpp" +#include "platform/platform_init.hpp" + +extern zlog_category_t *zct; +extern const char *JSON_FIELD_CMD; +extern std::map device_map; +std::string JsonData::JsonCmd_Cgi_100(Param_100 ¶m){ + Json::Value jsonVal; + jsonVal.clear(); + jsonVal[JSON_FIELD_CMD] = "100"; + jsonVal["success"] = true; + jsonVal["message"] = "获取传感器信息成功"; + + Json::Value jsBody; + array_t arrRes = sqlite_db_ctrl::instance().GetDataMultiLine(T_SENSOR_BT_INFO(TNAME), "*", NULL); + + if (arrRes.size() > 0) { + int packgeNo = param.mPackageFlag; + int packgeMax = 0; + int packgeNum = 0; + jsonVal["package"] = packgeNo; + int lastSize = iResult % 10; + int index = iResult / 10; + if (lastSize > 0 && index > 0) { + packgeMax = index + 1; + if (packgeNo + 1 == packgeMax) { + packgeNum = iResult; + jsonVal["packageMax"] = index + 1; + } else { + packgeNum = (packgeNo + 1) * 10; + jsonVal["packageMax"] = index + 1; + } + } else if (lastSize == 0 && index > 0) { + packgeNum = (packgeNo + 1) * 10; + packgeMax = index; + jsonVal["packageMax"] = index; + } else if (lastSize > 0 && index == 0) { + packgeNum = lastSize; + packgeMax = index + 1; + jsonVal["packageMax"] = index; + } + for (size_t packgeNo * 10; j < packgeNum; i++) { + Json::Value jsSensorData; + jsSensorData["mac"] = arrRes[i][0]; + jsSensorData["name"] = arrRes[i][1]; + jsSensorData["type"] = atoi(arrRes[i][2].c_str()); + jsSensorData["status"] = atoi(arrRes[i][3].c_str()); + jsSensorData["config_date"] = atoi(arrRes[i][4].c_str()); + std::string strMac = arrRes[i][0]; + vec_t vec_ret = sqlite_db_ctrl::instance().GetDataMultiLine(" blueteeth_info ", "*", " oder by timestamp desc limit 1 "); + jsSensorData["env_temp"] = atof(vec_ret[7].c_str()); + jsSensorData["dev_temp"] = atof(vec_ret[6].c_str()); + jsSensorData["battery_v"] = atof(vec_ret[4].c_str()); + jsSensorData["rssi"] = atoi(vec_ret[2].c_str()); + jsSensorData["feature_date"] = vec_ret[i][8]; + jsBody.append(jsSensorData); + } + jsonVal["content"] = jsBody; + } else { + jsonVal["success"] = false; + jsonVal["message"] = "没有传感器信息"; + jsonVal["content"].resize(0); + } + + return show_value_.write(jsonVal); +} +std::string JsonData::JsonCmd_Cgi_101(Param_101 ¶m){ + Json::Value jsonVal; + jsonVal.clear(); + jsonVal[JSON_FIELD_CMD] = "101"; + jsonVal["success"] = true; + jsonVal["message"] = "获取传感器信息成功"; + + Json::Value jsBody; + + char selectCon[256] = {0}, szTableName[100] = {0x00}, whereCon[256] = {0x00}; + sprintf(whereCon, "mac = '%s' and timeStamp < '%s' and timeStamp > '%s'", param.mac.c_str(),param.timeEnd.c_str(), param.timeStart.c_str()); + int rows = sqlite_db_ctrl::instance().GetTableRows(" blueteeth_info ", whereCon); + int packgeNo = param.mPackageFlag; + int packgeMax = 0; + int packgeNum = 0; + jsonVal["package"] = packgeNo; + int lastSize = rows % 550; + int index = rows / 550; + if (lastSize > 0 && index > 0) { + packgeMax = index + 1; + if (packgeNo + 1 == packgeMax) { + packgeNum = rows - lastSize; + jsonVal["packageMax"] = index + 1; + } else { + packgeNum = (packgeNo)*550; + jsonVal["packageMax"] = index + 1; + } + } else if (lastSize == 0 && index > 0) { + packgeNum = (packgeNo + 1) * 550; + packgeMax = index; + jsonVal["packageMax"] = index; + } else if (lastSize > 0 && index == 0) { + packgeNum = 0; + packgeMax = index + 1; + jsonVal["packageMax"] = index; + } + memset(whereCon, 0x00, sizeof(whereCon)); + sprintf(whereCon, "mac = '%s' and timeStamp < '%s' and timeStamp > '%s' order by timeStamp asc LIMIT %d OFFSET %d", param.mac.c_str(), param.timeEnd.c_str(), param.timeStart.c_str(), 550, packgeNum); + array_t arrRes = sqlite_db_ctrl::instance().GetDataMultiLine(" blueteeth_info ", "env_temp,chip_temp,volt,timestamp", whereCon); + zlog_info(zct, "vecRes = %d", vecRes.size()); + if (vecRes.size() > 0) { + Json::Value jsSensorData; + for (size_t i = 0; i < vecRes.size(); i++) { + + Json::Value iTem1, iTem2, iTem3; + iTem1.append(vecRes[i][0]); + iTem1.append(vecRes[i][3]); + iTem2.append(vecRes[i][1]); + iTem2.append(vecRes[i][3]); + iTem3.append(vecRes[i][2]); + iTem3.append(vecRes[i][3]); + } + jsSensorData["env_temp"] = iTem1; + jsSensorData["chip_temp"] = iTem2; + jsSensorData["volt"] = iTem3; + jsBody.append(jsSensorData); + jsonVal["content"] = jsBody; + } else { + jsonVal["success"] = false; + jsonVal["message"] = "没有传感器信息"; + jsonVal["content"].resize(0); + } +} +std::string JsonData::JsonCmd_Cgi_102(){ + for (size_t i = 0; i < device_map.size; i++) + { + Json::Value jsonVal; + jsonVal.clear(); + jsonVal[JSON_FIELD_CMD] = "102"; + jsonVal["success"] = true; + jsonVal["message"] = "获取传感器信息成功"; + + Json::Value jsBody; + jsBody["mac"] = device_map[i].first; + sqlite_db_ctrl::instance().GetRowCount(T_SENSOR_BT_INFO(TNAME), "count(*)", "mac = '" + device_map[i].first + "'"); + if (rows > 1) { + jsBody["added"] = true; + } + jsBody["rssi"] = device_map[i].second; + jsonVal["content"] = jsBody; + + return show_value_.write(jsonVal); + } + +} +std::string JsonData::JsonCmd_Cgi_103(Param_103 ¶m){ + Json::Value jsonVal; + jsonVal.clear(); + jsonVal[JSON_FIELD_CMD] = "103"; + jsonVal["success"] = true; + jsonVal["message"] = "获取传感器信息成功"; + + if (param.operate == "add") { + sqlite_db_ctrl::instance().InsertData(T_SENSOR_BT_INFO(TNAME), "mac,name,type,status,config_date", + "'" + param.mac + "','" + param.name + "'," + std::to_string(param.type) + "," + std::to_string(param.status) + "," + std::to_string(param.config_date)); + } else if (param.operate == "update") { + sqlite_db_ctrl::instance().UpdateTableData(T_SENSOR_BT_INFO(TNAME), "name = '" + param.name ,"mac = '" + param.mac + "'"); + } else if (param.operate == "delete") { + sqlite_db_ctrl::instance().DeleteData(T_SENSOR_BT_INFO(TNAME), "mac = '" + param.mac + "'"); + } + + return show_value_.write(jsonVal); +} \ No newline at end of file diff --git a/localserver/local_server.hpp b/localserver/local_server.hpp index 7ba2a75..d4f91cf 100644 --- a/localserver/local_server.hpp +++ b/localserver/local_server.hpp @@ -65,7 +65,13 @@ enum WebCommand { KUpgadeGateway = 85, KUpgradeSensor = 86, KEigenvalue = 87, - KUpgradeSensorStop = 88 + KUpgradeSensorStop = 88, + + // bluetooth temperature sensor + kGetSensorInfo = 100, + kGetFeatureSensorInfo = 101, + kScanSenorInfo = 102, + kOperateSensor = 103 }; enum GatewayType{ kGWTDW2700 = 1, diff --git a/localserver/web_cmd.cpp b/localserver/web_cmd.cpp index 9eb6bcb..8de3aca 100644 --- a/localserver/web_cmd.cpp +++ b/localserver/web_cmd.cpp @@ -522,6 +522,36 @@ std::string LocalServer::HandleCgi_cmd(std::string &pData) { return data; } break; + case kGetSensorInfo:{ + JsonData jd; + Param_100 param; + param.mPackageFlag = recvBody["package"].asInt(); + std::string data = jd.JsonCmd_Cgi_100(param); + return data; + }break; + case kGetFeatureSensorInfo:{ + JsonData jd; + Param_101 param; + param.mac = recvBody["mac"].asString(); + param.timeStart = recvBody["timeStart"].asString(); + param.timeEnd = recvBody["timeEnd"].asString(); + param.mPackageFlag = recvBody["package"].asInt(); + std::string data = jd.JsonCmd_Cgi_101(param); + return data; + }break; + case kScanSenorInfo:{ + JsonData jd; + std::string data = jd.JsonCmd_Cgi_102(); + return data; + }break; + case kOperateSensor:{ + JsonData jd; + Param_103 param; + param.mac = recvBody["mac"].asString(); + param.operate = recvBody["operate"].asInt(); + std::string data = jd.JsonCmd_Cgi_103(param); + return data; + }break; default: JsonData jd; std::string data = jd.JsonCmd_Cgi_default(); diff --git a/wifi_5g/scan_blueteeth.cpp b/wifi_5g/scan_blueteeth.cpp index fefc862..94511bd 100644 --- a/wifi_5g/scan_blueteeth.cpp +++ b/wifi_5g/scan_blueteeth.cpp @@ -17,7 +17,7 @@ extern zlog_category_t *zct; - +std::map ScanBlueteeth::device_map; ScanBlueteeth::ScanBlueteeth() : device_id(-1), sock(-1) { retry_count = 0; @@ -189,6 +189,7 @@ void ScanBlueteeth::ParseData(unsigned char *data, int len,int8_t rssi){ sprintf(insertSql,"'%s','%s','%d',%d,'%.1f','%.1f','%.1f','%.1f','%s'",device_id,mac,rssi,count,volt_,blueteeth_temp,chip_temp,env_temp,localtimestamp); sqlite_db_ctrl::instance().InsertData(" blueteeth_info ", insertSql); } + device_map.insert({mac, rssi}); return; } }