client.query(selectStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90001, "数据库查询错误!"); return; } if(result.rowCount != 1) { send_result(res, 90002, "后台数据库错误!"); return; } var socket=devConn.getSocketByDevId(devId); if (-1 == socket) { send_result(res, 90004, "后台与设备连接错误!"); return; } var commandId = cmdkey.create(); var cmdStr= { type: "firmware_upgrade", commandId: commandId, userId: userId, deviceId: devId, url:result.rows[0].firmwareDir+result.rows[0].fileName, md5:result.rows[0].md5 }; console.log(JSON.stringify(cmdStr)); //socket.write(JSON.stringify(cmdStr)+"\r\n"); send_gw_result(socket, JSON.stringify(cmdStr)+"\r\n"); send_result(res, 0, "Success!", commandId); });
client.query(selectStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90001, "数据库查询错误!"); return; } if(result.rowCount < 1) { send_result(res, 90009, "设备不存在!"); return; } if(result.rowCount > 1) { send_result(res, 90002, "后台数据库错误!"); return; } if(result.rows[0].online == false) { send_result(res, 90003, "设备离线!"); return; } /* TODO: datamodel check */ var socket=devConn.getSocketByDevId(result.rows[0].deviceId); if (-1 == socket) { send_result(res, 90004, "后台与设备连接错误!"); return; } var commandId = cmdkey.create(); var cmdStr= { type: "set", commandId: commandId, userId: userId, deviceId: devId, devData: {} }; if ("dev_set_dev" == msgType) { cmdStr.devData = message.settings; } else { cmdStr.devData = message.controls; } console.log(JSON.stringify(cmdStr)); //socket.write(JSON.stringify(cmdStr)+"\r\n"); send_gw_result(socket, JSON.stringify(cmdStr)+"\r\n"); send_result(res, 0, "Success!", commandId); });
client.query(selectNameStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90001, "数据库查询错误!"); return; } if(result.rowCount < 1) { send_result(res, 90008, "插件不存在!"); return; } var fileName = result.rows[0].fileName; var fileLoc = pluginDir + '/' + result.rows[0].version + '/' + fileName; var fileDownloadStr = { url: fileLoc, pluginId: result.rows[0].pluginId, version: result.rows[0].version }; var fileDeleteStr = { name: fileName, pluginId: result.rows[0].pluginId }; fileDownloadList.push(fileDownloadStr); fileDeleteList.push(fileDeleteStr); count--; if (count == 0) { var socket=devConn.getSocketByDevId(devId); if (-1 == socket) { send_result(res, 90004, "后台与设备连接错误!"); return; } var commandId = cmdkey.create(); if ("remove" == action) { var cmdStr= { type: "plugin_action", commandId: commandId, action: 'delete', deviceId: devId, pluginDeleteList: fileDeleteList }; } else { var cmdStr= { type: "plugin_action", commandId: commandId, action: action, deviceId: devId, pluginDownloadList: fileDownloadList, }; } console.log(JSON.stringify(cmdStr)); //socket.write(JSON.stringify(cmdStr)); send_gw_result(socket, JSON.stringify(cmdStr)+"\r\n"); send_result(res, 0, "Success!", commandId); } });
function message_handle(req, res){ var message = req.body; var msgType = message.msgType; console.log(req.body); if ("dev_get" == msgType) { var userId = message.userId; var deviceType = message.devType; if (typeof(userId) == "undefined" || typeof(deviceType) == "undefined") { send_result(res, 80001, "参数错误!"); return; } var selectStr = "SELECT " + "iot_device.\"deviceId\",iot_device.online,iot_device.\"devData\"," + "iot_dev_datamodel.\"dataModelId\",iot_dev_datamodel.\"devDataModel\" " + "FROM iot_device INNER JOIN iot_dev_datamodel " + "ON iot_device.\"deviceDataModelId\"=iot_dev_datamodel.\"dataModelId\" " + "WHERE iot_device.\"deviceId\" IN " + "(SELECT \"deviceId\" FROM dev_user_mapping WHERE \"userId\"='" + userId + "');"; console.log(selectStr); client.query(selectStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90001, "数据库查询错误!"); return; } var deviceData = { deviceType : deviceType, deviceCount: result.rowCount, deviceDataModel : [], deviceList : [] }; for(var i=0; i<result.rowCount; i++) { var dataModelItem = result.rows[i].devDataModel; var deviceItem = { deviceId: result.rows[i].deviceId, deviceDataModelId: result.rows[i].dataModelId, online: "1", devData: result.rows[i].devData, userDevData : { "nickname" : "led2", "group" : "地点", } }; dataModelItem["deviceDataModelId"] = result.rows[i].dataModelId; deviceData.deviceDataModel.push(dataModelItem); deviceData.deviceList.push(deviceItem); } console.log(JSON.stringify(deviceData)); res.send(JSON.stringify(deviceData)); }); } else if ("dev_get_one" == msgType) { var userId = message.userId; var deviceId = message.devId; if (typeof(userId) == "undefined" || typeof(deviceId) == "undefined") { send_result(res, 80001, "参数错误!"); return; } var selectStr = "SELECT " + "iot_device.\"deviceId\",iot_device.online,iot_device.\"devData\"," + "iot_dev_datamodel.\"dataModelId\",iot_dev_datamodel.\"devDataModel\" AS \"dataModel\" " + "FROM iot_device INNER JOIN iot_dev_datamodel " + "ON iot_device.\"deviceDataModelId\"=iot_dev_datamodel.\"dataModelId\" " + "WHERE iot_device.\"deviceId\" IN " + "(SELECT \"deviceId\" FROM dev_user_mapping WHERE \"userId\"='" + userId + "' AND \"deviceId\"='" + deviceId + "');"; console.log(selectStr); client.query(selectStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90001, "数据库查询错误!"); return; } if(result.rowCount != 1) { send_result(res, 90002, "后台数据库错误!"); return; } console.log(JSON.stringify(result.rows[0])); res.send(JSON.stringify(result.rows[0])); }); } else if ( ("dev_set_dev" == msgType) || ("dev_ctl" == msgType) ) { var userId = message.userId; var devId = message.devId; if (typeof(userId) == "undefined" || typeof(devId) == "undefined") { send_result(res, 80001, "参数错误!"); return; } var selectStr = "SELECT " + "iot_dev_datamodel.\"devDataModel\",dev_user_mapping.\"deviceId\",iot_device.online,iot_device.\"devData\",iot_device.\"gatewayId\" " + "FROM (dev_user_mapping JOIN iot_device ON " + "dev_user_mapping.\"deviceId\"=iot_device.\"deviceId\") " + "LEFT JOIN iot_dev_datamodel ON " + "iot_device.\"deviceDataModelId\"=iot_dev_datamodel.\"dataModelId\" " + "WHERE " + "dev_user_mapping.\"deviceId\"='" + devId + "' AND " + "dev_user_mapping.\"userId\"='" + userId + "';"; console.log(selectStr); client.query(selectStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90001, "数据库查询错误!"); return; } if(result.rowCount < 1) { send_result(res, 90009, "设备不存在!"); return; } if(result.rowCount > 1) { send_result(res, 90002, "后台数据库错误!"); return; } if(result.rows[0].online == false) { send_result(res, 90003, "设备离线!"); return; } /* TODO: datamodel check */ var socket=devConn.getSocketByDevId(result.rows[0].deviceId); if (-1 == socket) { send_result(res, 90004, "后台与设备连接错误!"); return; } var commandId = cmdkey.create(); var cmdStr= { type: "set", commandId: commandId, userId: userId, deviceId: devId, devData: {} }; if ("dev_set_dev" == msgType) { cmdStr.devData = message.settings; } else { cmdStr.devData = message.controls; } console.log(JSON.stringify(cmdStr)); //socket.write(JSON.stringify(cmdStr)+"\r\n"); send_gw_result(socket, JSON.stringify(cmdStr)+"\r\n"); send_result(res, 0, "Success!", commandId); }); } else if ("dev_bind" == msgType) { var userId = message.userId; var manufacture = message.manufacture; var manufactureSN = message.serialNumber; var selectStr = "SELECT iot_device.\"deviceId\" FROM iot_device " + "WHERE manufacture='" + manufacture + "' AND \"manufactureSN\"='" + manufactureSN + "';"; client.query(selectStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90001, "数据库查询错误!"); return; } if(result.rowCount < 1) { /* Device has not connect to server */ var insertStr = "INSERT INTO iot_device(manufacture,\"manufactureSN\") VALUES('" + manufacture + "','" + manufactureSN + "') RETURNING \"deviceId\";"; client.query(insertStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90006, "设备表插入错误!"); return; } if(result.rowCount != 1) { send_result(res, 90006, "设备表插入错误!"); return; } var insertStr = "INSERT INTO dev_user_mapping(\"deviceId\",\"userId\") VALUES('" + result.rows[0].deviceId + "','" + userId + "');"; client.query(insertStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90007, "设备用户绑定表插入错误!"); return; } if(result.rowCount == 1) { send_result(res, 0, "Success!"); } else { send_result(res, 90007, "设备用户绑定表插入错误!"); } }); }); } else { var insertStr = "INSERT INTO dev_user_mapping(\"deviceId\",\"userId\") " + "SELECT '" + result.rows[0].deviceId +"','" + userId +"' " + "WHERE NOT EXISTS(" + "SELECT \"deviceId\",\"userId\" FROM dev_user_mapping " + "WHERE \"deviceId\"= '" + result.rows[0].deviceId + "' AND \"userId\"='" + userId + "');" client.query(insertStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90007, "设备用户绑定表插入错误!"); return; } send_result(res, 0, "Success!"); }); } }); } else if ("get_dev_cmd_ret" == msgType) { var commandId = message.commandId; cmdkey.getRet(commandId.toString(), function(result){ if(result) { if(result=="Success") { send_result(res, 0, "Success!"); } else if(result=="Start") { send_result(res, 90011, "Waiting for device's response."); } else { var err = result; send_result(res, err.ret, err.errStr); } } else { send_result(res, 70005, "设备响应超时!"); } }); } else if ("firmware_query" == msgType) { var userId = message.userId; var devId = message.devId; var selectStr = "SELECT " + "firmware_table.\"publishVersion\",iot_device.\"deviceId\",iot_dev_datamodel.\"firmwareId\" " + "FROM (iot_device JOIN iot_dev_datamodel ON " + "iot_device.\"deviceDataModelId\"=iot_dev_datamodel.\"dataModelId\") " + "LEFT JOIN firmware_table ON " + "firmware_table.\"firmwareId\"=iot_dev_datamodel.\"firmwareId\" " + "WHERE iot_device.\"deviceId\"='" + devId + "';"; console.log(selectStr); client.query(selectStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90001, "数据库查询错误!"); return; } if(result.rowCount != 1) { send_result(res, 90002, "后台数据库错误!"); return; } var firmware_query = { ret: 0, deviceId: result.rows[0].deviceId, newestVersion: result.rows[0].publishVersion, firmwareId: result.rows[0].firmwareId }; console.log(JSON.stringify(firmware_query)); res.send(JSON.stringify(firmware_query)); }); } else if ("firmware_upgrade" == msgType) { var userId = message.userId; var devId = message.devId; var firmwareId = message.firmwareId; var version = message.version; var selectStr = "SELECT " + "firmware_version.\"firmwareId\",firmware_version.\"version\",firmware_version.\"fileName\",firmware_version.\"md5\",firmware_table.\"firmwareDir\" " + "FROM (firmware_version JOIN firmware_table ON " + "firmware_version.\"firmwareId\"=firmware_table.\"firmwareId\") " + "WHERE " + "firmware_version.\"firmwareId\"='" + firmwareId + "' AND " + "firmware_version.\"version\"='" + version + "';"; console.log(selectStr); client.query(selectStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90001, "数据库查询错误!"); return; } if(result.rowCount != 1) { send_result(res, 90002, "后台数据库错误!"); return; } var socket=devConn.getSocketByDevId(devId); if (-1 == socket) { send_result(res, 90004, "后台与设备连接错误!"); return; } var commandId = cmdkey.create(); var cmdStr= { type: "firmware_upgrade", commandId: commandId, userId: userId, deviceId: devId, url:result.rows[0].firmwareDir+result.rows[0].fileName, md5:result.rows[0].md5 }; console.log(JSON.stringify(cmdStr)); //socket.write(JSON.stringify(cmdStr)+"\r\n"); send_gw_result(socket, JSON.stringify(cmdStr)+"\r\n"); send_result(res, 0, "Success!", commandId); }); } else if ("plugin_installed" == msgType) { var userId = message.userId; var devId = message.devId; var selectStr = "SELECT " + "gateway_plugin.\"pluginId\",gateway_plugin.version,plugin_table.\"pluginName\" " + "FROM gateway_plugin,plugin_table " + "WHERE gateway_plugin.\"deviceId\"='" + devId + "' " + "AND gateway_plugin.\"pluginId\"=plugin_table.\"pluginId\"" + ";"; console.log(selectStr); client.query(selectStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90001, "数据库查询错误!"); return; } var pluginInstalled = { ret: 0, devId: devId, count: result.rowCount, pluginList : [] }; for(var i=0; i<result.rowCount; i++) { var pluginItem = { pluginId: result.rows[i].pluginId, currVersion: result.rows[i].version, pluginName: result.rows[i].pluginName }; pluginInstalled.pluginList.push(pluginItem); } console.log(JSON.stringify(pluginInstalled)); res.send(JSON.stringify(pluginInstalled)); }); } else if ("plugin_available" == msgType) { var userId = message.userId; var devId = message.devId; var selectStr = "SELECT \"pluginId\",\"pluginName\", \"pluginDesc\", \"publishVersion\" " + "FROM plugin_table;" console.log(selectStr); client.query(selectStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90001, "数据库查询错误!"); return; } var pluginAvailable = { ret: 0, devId: devId, count: result.rowCount, pluginList: [] }; for(var i=0; i<result.rowCount; i++) { var pluginItem = { pluginId: result.rows[i].pluginId, pluginName: result.rows[i].pluginName, pluginDesc: result.rows[i].pluginDesc, publishVersion: result.rows[i].publishVersion }; pluginAvailable.pluginList.push(pluginItem); } console.log(JSON.stringify(pluginAvailable)); res.send(JSON.stringify(pluginAvailable)); }); } else if ("plugin_action" == msgType) { var devId = message.devId; var action = message.action; var pluginIdList = message.pluginList; var selectStr = "SELECT * FROM plugin_table WHERE \"pluginId\" IN (" + pluginIdList + ");"; console.log(selectStr); client.query(selectStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90001, "数据库查询错误!"); return; } if(result.rowCount < 1) { send_result(res, 90008, "插件不存在!"); return; } var fileDownloadList = new Array(); var fileDeleteList = new Array(); var count = result.rowCount; result.rows.forEach(function(row) { var pluginDir = row.pluginDir; var version = row.publishVersion; var pluginId = row.pluginId; var selectNameStr = "SELECT * FROM plugin_version " + "WHERE \"pluginId\"='" + pluginId + "' AND version='" + version + "';"; console.log(selectNameStr); client.query(selectNameStr, function(err, result) { if (err) { console.error(err.stack); send_result(res, 90001, "数据库查询错误!"); return; } if(result.rowCount < 1) { send_result(res, 90008, "插件不存在!"); return; } var fileName = result.rows[0].fileName; var fileLoc = pluginDir + '/' + result.rows[0].version + '/' + fileName; var fileDownloadStr = { url: fileLoc, pluginId: result.rows[0].pluginId, version: result.rows[0].version }; var fileDeleteStr = { name: fileName, pluginId: result.rows[0].pluginId }; fileDownloadList.push(fileDownloadStr); fileDeleteList.push(fileDeleteStr); count--; if (count == 0) { var socket=devConn.getSocketByDevId(devId); if (-1 == socket) { send_result(res, 90004, "后台与设备连接错误!"); return; } var commandId = cmdkey.create(); if ("remove" == action) { var cmdStr= { type: "plugin_action", commandId: commandId, action: 'delete', deviceId: devId, pluginDeleteList: fileDeleteList }; } else { var cmdStr= { type: "plugin_action", commandId: commandId, action: action, deviceId: devId, pluginDownloadList: fileDownloadList, }; } console.log(JSON.stringify(cmdStr)); //socket.write(JSON.stringify(cmdStr)); send_gw_result(socket, JSON.stringify(cmdStr)+"\r\n"); send_result(res, 0, "Success!", commandId); } }); }); }); } else if("lirc_type_available"== msgType){ var values = new Array(); var userId = message.userId; var selectStr="SELECT DISTINCT \"devType\" " + " FROM lirc_device;"; console.log(selectStr); client.query(selectStr,function(err,result){ if(err){ console.error(err.stack); send_result(res,90011,"查询数据库错误!"); return; } result.rows.forEach(function(row){ var value=row.devType; values.push(value); }); var lircTypeAvailable={ ret:0, values:values }; console.log(JSON.stringify(lircTypeAvailable)); res.send(JSON.stringify(lircTypeAvailable)); }); } else if("lirc_model_available"== msgType){ var userId = message.userId; var devType = message.devType; var values = new Array(); var selectStr="SELECT manufacture,array_agg(\"modelName\") FROM lirc_device WHERE \"devType\"='" + devType + "' GROUP BY manufacture;"; console.log(selectStr); client.query(selectStr,function(err,result){ if(err){ console.error(err.stack); send_result(res,9001,"数据库查询错误!"); return; } result.rows.forEach(function(row){ var value={ manufacture:row.manufacture, modelName:row.array_agg }; console.log(JSON.stringify(value)); values.push(value); }); var lircModelAvailable={ ret:0, devType:devType, values:values }; console.log(JSON.stringify(lircModelAvailable)); res.send(JSON.stringify(lircModelAvailable)); }); } else if("lirc_get_key"== msgType){ var userId = message.userId; var lircId = message.lircId; var value; var selectStr="SELECT \"lircId\", \"key\" " + "FROM lirc_device WHERE \"lircId\"=' " + lircId + " ' ;"; console.log(selectStr); client.query(selectStr,function(err,result){ if(err){ console.error(err.stack); send_result(res,1,"数据库查询错误!"); return; } result.rows.forEach(function(row){ value=row.key; console.log(value); }); var lircGetKey={ ret:0, lircId:lircId, key:value }; console.log(JSON.stringify(lircGetKey)); res.send(JSON.stringify(lircGetKey)); }); } else if ("dev_get_lirc" == msgType) { var userId = message.userId; var devId = message.devId; var selectStr = "SELECT \"lircData\" FROM iot_device WHERE \"deviceId\"='" + devId + "';"; console.log(selectStr); client.query(selectStr, function(err, result) { console.log(result); if (err) { console.error(err.stack); send_result(res,1,"数据库查询错误!"); return; } if (result.rowCount != 1) { send_result(res,1,"数据库查询错误!"); return; } var retStr = { ret: 0, deviceId: devId, lircData: result.rows[0].lircData }; console.log(retStr.lircData); res.send(JSON.stringify(retStr)); }); } else if("lirc_ctl" == msgType) { var userId = message.userId; var devId = message.devId; var action = message.action; var controls = message.controls; if ("set" == action) { var socket=devConn.getSocketByDevId(devId); if (-1 == socket) { send_result(res, 90004, "后台与设备连接错误!"); return; } var commandId = cmdkey.create(); var cmdStr = { type: 'lirc_emit', commandId: commandId, deviceId: devId, devData: controls }; console.log(JSON.stringify(cmdStr)); send_gw_result(socket, JSON.stringify(cmdStr)+"\r\n"); send_result(res, 0, "Success!", commandId); return; } var selectStr = "SELECT \"lircData\" FROM iot_device WHERE \"deviceId\"='" + devId + "';"; console.log(selectStr); client.query(selectStr, function(err, result) { if (err) { console.error(err.stack); send_result(res,1,"数据库查询错误!"); return; } if (result.rowCount != 1) { send_result(res,1,"数据库查询错误!"); return; } if ("add" == action) { console.log(result); /*修改*/ /*if (result.rows[0].lircData == 'undefined') {*/ if (!result.rows[0].lircData) { var devList = new Array(); result.rows[0].lircData = { count: 0, devList: devList }; } var count = result.rows[0].lircData.devList.push(controls); result.rows[0].lircData.count = count; var updateStr = "UPDATE iot_device SET \"lircData\"='" + JSON.stringify(result.rows[0].lircData) + "' WHERE \"deviceId\"='" + devId + "';"; console.log(updateStr); client.query(updateStr, function(err, result1) { if (err) { console.error(err.stack); send_result(res,1,"数据库操作失败!"); } else { send_result(res, 0, "Success!"); } }); } else if ("delete" == action) { var lircData = result.rows[0].lircData; var devList = lircData.devList; var index = -1; for (var i in devList) { if (devList[i].lircId == controls.lircId) { index = i; } } if (index != -1) { devList.splice(index, 1); result.rows[0].lircData.count--; var updateStr = "UPDATE iot_device SET \"lircData\"='" + JSON.stringify(result.rows[0].lircData) + "' WHERE \"deviceId\"='" + devId + "';"; console.log(updateStr); client.query(updateStr, function(err, result1) { if (err) { console.error(err.stack); send_result(res,1,"数据库操作失败!"); } else { send_result(res, 0, "Success!"); } }); } } else { send_result(res,1,"参数错误!"); } }); } else if("lirc_get_lircId"== msgType){ var manufacture = message.manufacture; var modelName = message.modelName; var devType = message.devType; var value; var selectStr="SELECT \"lircId\" " + "FROM lirc_device WHERE \"manufacture\"='" + manufacture + "' AND \"modelName\"='" + modelName + "' AND \"devType\"='" + devType + "' ;"; console.log(selectStr); client.query(selectStr,function(err,result){ if(err){ console.error(err.stack); send_result(res,1,"数据库查询错误!"); return; } console.log(result); var lircGetKey={ ret:0, lircId:result.rows[0].lircId, }; console.log(JSON.stringify(lircGetKey)); res.send(JSON.stringify(lircGetKey)); }); } /* else if("lirc_set"== msgType){ var lircId = message.settings.lircId; console.log(lircId); var selectStr="UPDATA \"lircId\" " + "FROM lirc_device WHERE \"manufacture\"='" + manufacture + "' AND \"modelName\"='" + modelName + "' AND \"devType\"='" + devType + "' ;"; var selectStr1 = "UPDATA lirc_device SET nickName WHERE \"lircId\" = "+lircId+";"; console.log(selectStr); client.query(selectStr,function(err,result){ if(err){ console.error(err.stack); send_result(res,1,"数据库查询错误!"); return; } console.log(result); var lircGetKey={ ret:0, lircId:result.rows[0].lircId, }; console.log(JSON.stringify(lircGetKey)); res.send(JSON.stringify(lircGetKey)); }); }*/ else if("get_device_map"== msgType){ var values = new Array(); var placeDate = new Array(); var selectStr =" SELECT \"deviceId\" ,place,\"deviceType\",connection,\"devData\",online " + "FROM iot_device ; "; console.log(selectStr); client.query(selectStr,function(err ,result){ if(err){ console.error(err.stack); send_result(res,'9001',"数据库查询错误!"); return; } result.rows.forEach(function(row){ var retCode={ devId:row.deviceId, place:row.place, devType:row.deviceType, online:row.online, nick_Name:row.devData.name, connection:row.connection }; console.log(JSON.stringify(retCode)); values.push(retCode); }); var value= {value:values }; console.log(JSON.stringify(value)); res.send(JSON.stringify(value)); }); } else if("set_room" == msgType){ var devId = message.devId; var place = message.place; var updateStr="UPDATE iot_device SET place='" + place + "' WHERE \"deviceId\"='" + devId + "';"; client.query(updateStr,function(err,result){ if(err){ console.error(err.stack); send_result(res,1,"数据库操作失败!"); }else{ send_result(res, 0, "Success!"); } }); } }