{"id":928,"date":"2020-06-07T10:56:15","date_gmt":"2020-06-07T01:56:15","guid":{"rendered":"http:\/\/sensor.krict.re.kr\/?p=928"},"modified":"2021-07-31T09:20:36","modified_gmt":"2021-07-31T00:20:36","slug":"%ec%b8%a1%ec%a0%95%eb%8d%b0%ec%9d%b4%ed%84%b0-db%ec%97%90%ec%84%9c-%ea%b0%80%ec%a0%b8%ec%98%a4%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/www.gassensor.kr\/?p=928","title":{"rendered":"1\uc138\ub300 \uacc4\uce21\uae30: \uc13c\uc11c\uce21\uc815 DB\uc5d0\uc11c \uadf8\ub798\ud504 \uadf8\ub9ac\uae30"},"content":{"rendered":"<table>\n<tr>\n<th> \uad6c\ubd84 <\/th>\n<th>\uc885\ub958 <\/th>\n<th>\ub370\uc774\ud130 \uc120\ud0dd <\/th>\n<\/tr>\n<tr>\n<td rowspan=\"3\"> X \ucd95 <\/td>\n<td>\uce21\uc815\uc2dc\uac04<\/td>\n<td><span id=\"menuX_T\"><\/span><\/td>\n<\/tr>\n<tr>\n<td>Sensors<\/td>\n<td><span id=\"menuX_S\"><\/span><\/td>\n<\/tr>\n<tr>\n<td>Gas (sccm)<\/td>\n<td><span id=\"menuX_G\"><\/span><\/td>\n<\/tr>\n<tr>\n<td rowspan=\"2\"> Y \ucd95 <\/td>\n<td>Sensors<\/td>\n<td><span id=\"menuY_S\"><\/span><\/td>\n<\/tr>\n<tr>\n<td>Gas (sccm)<\/td>\n<td><span id=\"menuY_G\"><\/span><\/td>\n<\/tr>\n<tr>\n<td rowspan=\"2\"> Y2 \ucd95 <\/td>\n<td>Sensors<\/td>\n<td><span id=\"menuY2_S\"><\/span><\/td>\n<\/tr>\n<tr>\n<td>Gas (sccm)<\/td>\n<td><span id=\"menuY2_G\"><\/span><\/td>\n<\/tr>\n<\/table>\n<p>\n<span id=\"dblist\"><\/span><button id=\"get_data\">\ub370\uc774\ud130 \uadf8\ub9ac\uae30<\/button>  <button id=\"download_data\">\ub370\uc774\ud130 \ub2e4\uc6b4\ub85c\ub4dc<\/button>    <button id=\"delete_data\">\uc0ad\uc81c\ud558\uae30<\/button><\/p>\n<div id=\"output\"><\/div>\n<div id=\"output_plot\"><\/div>\n<div id=\"id_show\"><\/div>\n<p><script src=\"https:\/\/cdn.plot.ly\/plotly-latest.min.js\"><\/script><br \/>\n<script>\njQuery(document).ready(function(){\n  var user_id = '';\n  if (user_id==='gassensor') {\n    jQuery(\"#delete_data\").show();\n  } else {\n    jQuery(\"#delete_data\").hide();\n  }\n  var json_timearray = [\n    { type: '\uce21\uc815\uc2dc\uac04', value: 'mt', checked: true }\n  ];\n  var json_sensorarray = [\n    { type:'SEM1', value: 'sensor1', checked: false },\n    { type:'SEM2', value: 'sensor2', checked: false },\n    { type:'SEM3', value: 'sensor3', checked: false },\n    { type:'SEM4', value: 'sensor4', checked: false },\n    { type:'EC1', value: 'sensor5', checked: false },\n    { type:'EC2', value: 'sensor6', checked: false },\n    { type:'EC3', value: 'sensor7', checked: false },\n    { type:'EC4', value: 'sensor8', checked: false },\n    { type:'PID', value: 'sensor9', checked: false } \n  ];\n  var json_gasarray = [\n    { type:'Gas CH1', value: 'gas1', checked: false },\n    { type:'Gas CH2', value: 'gas2', checked: false },\n    { type:'Gas CH3', value: 'gas3', checked: false },\n    { type:'Gas CH4', value: 'gas4', checked: false },\n    { type:'Gas CH5', value: 'gas5', checked: false },\n    { type:'Gas CH6', value: 'gas6', checked: false } \n  ];\n  var optionX_T = optionXMenu(json_timearray,\"optionx\");\n  jQuery(\"#menuX_T\").html(optionX_T);\n  var optionX_S = optionXMenu(json_sensorarray,\"optionx\");\n  jQuery(\"#menuX_S\").html(optionX_S);\n  var optionX_G = optionXMenu(json_gasarray,\"optionx\");\n  jQuery(\"#menuX_G\").html(optionX_G);\n  json_sensorarray[4]['checked'] = true;\n  var optionY_S = checkXMenu(json_sensorarray,\"optiony\");\n  jQuery(\"#menuY_S\").html(optionY_S);\n  var optionY_G = checkXMenu(json_gasarray,\"optiony\");\n  jQuery(\"#menuY_G\").html(optionY_G);\n  json_sensorarray[4]['checked'] = false;\n  var optionY2_S = checkXMenu(json_sensorarray,\"optiony2\");\n  jQuery(\"#menuY2_S\").html(optionY2_S);\n  json_gasarray[0]['checked'] = true;\n  var optionY2_G = checkXMenu(json_gasarray,\"optiony2\");\n  jQuery(\"#menuY2_G\").html(optionY2_G);\n  jQuery.post(ajaxurl, {\n    action: 'ajax_action_connDW',\n    dbname: 'postgres',\n    tbname: 'measurement_krict_info',\n    schema: 'public',\n    query: 'SELECT * FROM public.measurements_krict_info ORDER BY did;',\n    params: ['']\n  }, function(res) {\n    var res_contents_json = JSON.parse(res);\n    jQuery(\"#dblist\").html(selectJsonMenu(res_contents_json,\"data_list\",0));\n    jQuery(\"#get_data\").click(function(){\n        var columnX = [];\n        var columnY = [];\n        var columnY2 = [];\n        var columns = []\n        jQuery('input:radio[name=\"optionx\"]').each(function() {\n            if(this.checked){\/\/checked \ucc98\ub9ac\ub41c \ud56d\ubaa9\uc758 \uac12\n                columnX.push(this.value);\n                columns.push(this.value);\n            }\n        });\n        jQuery('input:checkbox[name=\"optiony\"]').each(function() {\n            if(this.checked){\/\/checked \ucc98\ub9ac\ub41c \ud56d\ubaa9\uc758 \uac12\n                columnY.push(this.value); \n                columns.push(this.value);\n            }\n        });\n        jQuery('input:checkbox[name=\"optiony2\"]').each(function() {\n            if(this.checked){\/\/checked \ucc98\ub9ac\ub41c \ud56d\ubaa9\uc758 \uac12\n                columnY2.push(this.value); \n                columns.push(this.value);\n            }\n        });\n        var querycols = '';\n        for (var i=0; i < columns.length; i++) {\n            querycols += ' ' + columns[i] + ',';\n        }\n        querycols = querycols.substring(0,querycols.length-1)\n        var speed_index = parseInt(columns.length \/ 16.0 * 80);\n        jQuery(\"#output\").html(\"<b>Preparing for plotting the sensor data<\/b>\");\n        var choice = jQuery(\"#data_list\").val().toString();\n        var query_string = \"SELECT \" + querycols + \" FROM public.measurements_krict WHERE did = $1 AND mid % $2 = 0 ORDER BY mt ASC;\";\n            jQuery.post(ajaxurl, {\n                action: 'ajax_action_connDW',\n                dbname: 'postgres',\n                tbname: 'measurement_krict',\n                schema: 'public',\n                query: query_string,\n                params: [choice, speed_index]\n            }, function(data) {\n                var data_json = JSON.parse(data);\n                var data_arr = transpose(convert2array(data_json));\n                var traces = [];\n                for (var i = 1; i < columns.length ; i++) {\n                    var trace = {\n                        x: data_arr[0],\n                        y: data_arr[i],\n                        name: settingname(columns[i]),\n                        mode: 'lines'\n                    }\n                    if (columnY2.indexOf(columns[i])>=0) trace['yaxis'] = 'y2';\n                    console.log(trace);\n                    traces.push(trace);\n                }\n                var layout = {    \/\/ https:\/\/plotly.com\/javascript\/axes\/\n                    height: 500,\n                    xaxis: {\n                        title: settingname(columns[0])\n                    },\n                    yaxis: {\n                        title: 'Measured Values'\n                    },\n                    margin: { t: 50 } \n                };\n                if (columnY2.length>0) layout['yaxis2'] = { title: 'y2 axis values', overlaying:'y', side: 'right' };\n                console.log(layout);\n                Plotly.newPlot('output_plot', traces, layout);\n                jQuery(\"#output\").html(\"\");\n            });\n  });\n    jQuery(\"#download_data\").click(function(){\n        var columnX = [];\n        var columnY = [];\n        var columnY2 = [];\n        var columns = []\n        jQuery('input:radio[name=\"optionx\"]').each(function() {\n            if(this.checked){\/\/checked \ucc98\ub9ac\ub41c \ud56d\ubaa9\uc758 \uac12\n                columnX.push(this.value);\n                columns.push(this.value);\n            }\n        });\n        jQuery('input:checkbox[name=\"optiony\"]').each(function() {\n            if(this.checked){\/\/checked \ucc98\ub9ac\ub41c \ud56d\ubaa9\uc758 \uac12\n                columnY.push(this.value); \n                columns.push(this.value);\n            }\n        });\n        jQuery('input:checkbox[name=\"optiony2\"]').each(function() {\n            if(this.checked){\/\/checked \ucc98\ub9ac\ub41c \ud56d\ubaa9\uc758 \uac12\n                columnY2.push(this.value); \n                columns.push(this.value);\n            }\n        });\n        var querycols = '';\n        for (var i=0; i < columns.length; i++) {\n            querycols += ' ' + columns[i] + ',';\n        }\n        querycols = querycols.substring(0,querycols.length-1)\n        var speed_index = parseInt(columns.length \/ 16.0 * 80);\n        var filename = prompt(\"\uc800\uc7a5\ud560 \ud30c\uc77c\uba85\ub9cc \uc785\ub825\ud558\uc2ed\uc2dc\uc624. csv\ub294 \uc790\ub3d9\uc73c\ub85c \ubd99\uc2b5\ub2c8\ub2e4.\",\"graph\");\n        filename = filename + \".csv\";\n        jQuery(\"#output\").html(\"<b>Preparing for plotting the sensor data<\/b>\");\n        var choice = jQuery(\"#data_list\").val().toString();\n        var query_string = \"SELECT \" + querycols + \" FROM public.measurements_krict WHERE did = $1 AND mid % $2 = 0 ORDER BY mt ASC;\";\n            jQuery.post(ajaxurl, {\n                action: 'ajax_action_connDW',\n                dbname: 'postgres',\n                tbname: 'measurement_krict',\n                schema: 'public',\n                query: query_string,\n                params: [choice, speed_index]\n            }, function(data) {\n                var data_json = JSON.parse(data);\n                console.log(columns);\n                var data_arr = convert2array(data_json);\n                data_arr.unshift(columns);\n                jQuery(\"#output\").html(\"\");\n                exportToCsv(filename,data_arr);\n           });\n    });\n  });\n  jQuery(\"#delete_data\").click(function(){\n    var did_str = jQuery(\"#data_list\").val().toString();\n    if (confirm(\"\uc815\ub9d0\ub85c \ud574\ub2f9 \ub370\uc774\ud130\ub97c \uc0ad\uc81c\ud560\uae4c\uc694?\")) {\n      jQuery.post(ajaxurl, {\n        action: 'ajax_action_connDW',\n        dbname: 'postgres',\n        tbname: 'measurement_krict_info',\n        schema: 'public',\n        query: 'DELETE FROM public.measurements_krict_info WHERE did = $1;',\n        params: [did_str]\n      }, function(res) {\n        console.log(res);\n      });\n      jQuery.post(ajaxurl, {\n        action: 'ajax_action_connDW',\n        dbname: 'postgres',\n        tbname: 'measurement_krict',\n        schema: 'public',\n        query: 'DELETE FROM public.measurements_krict WHERE did = $1;',\n        params: [did_str]\n      }, function(res) {\n        console.log(res);\n      });  \n      location.reload();\n    }\n  });\n});\nfunction convert2array(data_json) { \n  var rows = [];\n  for (var i = 0; i < data_json.length; i++) {\n    var row = [];\n    for (key in data_json[i]) {\n      row.push(Number(data_json[i][key]));\n    }\n    rows.push(row);\n  }\n  return rows;\n}\nfunction transpose(matrix) {\n  const rows = matrix.length, cols = matrix[0].length;\n  const grid = [];\n  for (let j = 0; j < cols; j++) {\n    grid[j] = Array(rows);\n  }\n  for (let i = 0; i < rows; i++) {\n    for (let j = 0; j < cols; j++) {\n      grid[j][i] = matrix[i][j];\n    }\n  }\n  return grid;\n}\nfunction selectJsonMenu(json_array,id,init_index){\n  var menu = '<select id=\"' + id + '\">';\n  for (var i = 0; i < json_array.length; i++) {\n    if (i == init_index) {\n      menu += '<option value=\"' + json_array[i].did + '\" selected>' + json_array[i].did + ': ' + json_array[i].keyword + '<\/option>';\n    } else {\n      menu += '<option value=\"' + json_array[i].did + '\">' + json_array[i].did + ': ' + json_array[i].keyword + '<\/option>';\n    }\n  }\n  menu += '<\/select>';\n  return menu;\n}\nfunction optionXMenu(json_array, name){\n  var checkmenu = '';\n  for (var i = 0; i < json_array.length; i++) { \n    if (json_array[i].checked) {\n      checkmenu += '<input type=\"radio\" name=\"' + name + '\" value=\"' + json_array[i].value + '\" checked> &nbsp;' + json_array[i].type + '&nbsp;&nbsp;';\n    } else {\n      checkmenu += '<input type=\"radio\" name=\"' + name + '\" value=\"' + json_array[i].value + '\"> &nbsp;' + json_array[i].type + '&nbsp;&nbsp;';\n    }\n  }\n  return checkmenu;\n}\nfunction checkXMenu(json_array, name){\n  var checkmenu = '';\n  for (var i = 0; i < json_array.length; i++) {\n    if (json_array[i].checked) {\n      checkmenu += '<input type=\"checkbox\" name=\"' + name + '\" value=\"' + json_array[i].value + '\" checked> &nbsp;' + json_array[i].type + '&nbsp;&nbsp;';\n    } else {\n      checkmenu += '<input type=\"checkbox\" name=\"' + name + '\" value=\"' + json_array[i].value + '\"> &nbsp;' + json_array[i].type + '&nbsp;&nbsp;';\n    }\n  }\n  return checkmenu;\n}\nfunction settingname(name){\n  var colname = ['mt','sensor1','sensor2','sensor3','sensor4','sensor5','sensor6','sensor7','sensor8','sensor9','gas1','gas2','gas3','gas4','gas5','gas6'];\n  var names = ['Time(s)', 'MQ-3 (Alcohol, Benzene)', 'MQ-6 (LPG, Isobutane, Propane)','MQ-8 (H2)', 'MQ-135 (NH3, NOx, Alcohol, Benzene, Smoke, CO2)', 'H2, Senko','O2, Senko', 'NO2, Senko', 'NH3, Senko', 'PID, Senko', 'Gas CH1: Air','Gas CH2: Liquid','Gas CH3: Solid','Gas CH4: CH4', 'Gas CH5: C3H8', 'Gas CH6: MFM'];\n  return names[colname.indexOf(name)];\n}\nfunction exportToCsv(filename, rows) {\n    var processRow = function (row) {\n        var finalVal = '';\n        for (var j = 0; j < row.length; j++) {\n            var innerValue = row[j] === null ? '' : row[j].toString();\n            if (row[j] instanceof Date) {\n                innerValue = row[j].toLocaleString();\n            };\n            var result = innerValue.replace(\/\"\/g, '\"\"');\n            if (result.search(\/(\"|,|\\n)\/g) >= 0)\n                result = '\"' + result + '\"';\n            if (j > 0)\n                finalVal += ',';\n            finalVal += result;\n        }\n        return finalVal + '\\n';\n    };\n    var csvFile = '';\n    for (var i = 0; i < rows.length; i++) {\n        csvFile += processRow(rows[i]);\n    }\n    var blob = new Blob([csvFile], { type: 'text\/csv;charset=utf-8;' });\n    if (navigator.msSaveBlob) { \/\/ IE 10+\n        navigator.msSaveBlob(blob, filename);\n    } else {\n        var link = document.createElement(\"a\");\n        if (link.download !== undefined) { \/\/ feature detection\n            \/\/ Browsers that support HTML5 download attribute\n            var url = URL.createObjectURL(blob);\n            link.setAttribute(\"href\", url);\n            link.setAttribute(\"download\", filename);\n            link.style.visibility = 'hidden';\n            document.body.appendChild(link);\n            link.click();\n            document.body.removeChild(link);\n        }\n    }\n}\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p> [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"inline_featured_image":false},"categories":[7],"tags":[],"_links":{"self":[{"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=\/wp\/v2\/posts\/928"}],"collection":[{"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=928"}],"version-history":[{"count":194,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=\/wp\/v2\/posts\/928\/revisions"}],"predecessor-version":[{"id":933,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=\/wp\/v2\/posts\/928\/revisions\/933"}],"wp:attachment":[{"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}