{"id":1290,"date":"2021-07-31T11:00:37","date_gmt":"2021-07-31T02:00:37","guid":{"rendered":"http:\/\/sensor.krict.re.kr\/?p=1290"},"modified":"2023-11-01T14:55:49","modified_gmt":"2023-11-01T05:55:49","slug":"2%ec%84%b8%eb%8c%80-%ea%b3%84%ec%b8%a1%ea%b8%b0-%ec%84%bc%ec%84%9c%ec%b8%a1%ec%a0%95-db%ec%97%90%ec%84%9c-%ea%b7%b8%eb%9e%98%ed%94%84-%ea%b7%b8%eb%a6%ac%ea%b8%b0-%ea%b0%9c%eb%b0%9c%ec%a4%91","status":"publish","type":"post","link":"https:\/\/www.gassensor.kr\/?p=1290","title":{"rendered":"2\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:'SS2178(H2)', value: 'sensor1', checked: false },\n    { type:'SS2198(H2S)', value: 'sensor2', checked: false },\n    { type:'SS2168(Cl2)', value: 'sensor3', checked: false },\n    { type:'SS2128(CO)', value: 'sensor4', checked: false },\n    { type:'SS2148(NO2)', value: 'sensor5', checked: false },\n    { type:'SS2118(O2)', value: 'sensor6', checked: false },\n    { type:'PID(VOD)', value: 'sensor7', checked: false },\n    { type:'SS2138(NO)', value: 'sensor8', checked: false },\n    { type:'SS21N8(NH3)', value: 'sensor9', checked: false }, \n    { type:'SS21A8(Alc)', value: 'sensor10', checked: false }, \n    { type:'Temp 1', value: 'sensor11', checked: false }, \n    { type:'Temp 2', value: 'sensor12', checked: false }, \n    { type:'Humidity 1', value: 'sensor13', checked: false }, \n    { type:'Humidity 2', value: 'sensor14', checked: false }, \n    { type:'MQ2(Smoke)', value: 'sensor15', checked: false }, \n    { type:'MQ3(Alc,C6H6)', value: 'sensor16', checked: false }, \n    { type:'MQ4(CH4,LNG)', value: 'sensor17', checked: false }, \n    { type:'MQ5(LPG,LNG)', value: 'sensor18', checked: false }, \n    { type:'MQ6(C4H10,C3H8)', value: 'sensor19', checked: false }, \n    { type:'MQ8(H2)', value: 'sensor20', checked: false }, \n    { type:'MQ9(CH4,LPG)', value: 'sensor21', checked: false }, \n    { type:'MQ131(O3)', value: 'sensor22', checked: false }, \n    { type:'MQ135(NH3,NOx)', value: 'sensor23', checked: false }, \n    { type:'MQ138(C7H8,C3H60)', value: 'sensor24', checked: false } \n  ];\n  var json_gasarray = [\n    { type:'Purge Gas', value: 'gas1', checked: false },\n    { type:'Gas CH1', value: 'gas2', checked: false },\n    { type:'Gas CH2', value: 'gas3', checked: false },\n    { type:'Gas CH3', value: 'gas4', checked: false },\n    { type:'Gas CH4', value: 'gas5', 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_2nd_info',\n    schema: 'public',\n    query: 'SELECT * FROM public.measurements_krict_2nd_info ORDER BY did;',\n    params: ['']\n  }, function(res) {\n    var res_contents_json = JSON.parse(res);\n    console.log(res_contents_json);\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_2nd 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_2nd',\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                console.log(data_json);\n                console.log(data_arr);\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_2nd 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_2nd',\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_2nd_info',\n        schema: 'public',\n        query: 'DELETE FROM public.measurements_krict_2nd_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_2nd',\n        schema: 'public',\n        query: 'DELETE FROM public.measurements_krict_2nd 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','sensor10','sensor11','sensor12','sensor13','sensor14','sensor15','sensor16','sensor17','sensor18','sensor19','sensor20','sensor21','sensor22','sensor23','sensor24','gas1','gas2','gas3','gas4','gas5'];\n  var names = ['Time(s)', 'SS2178(H2)','SS2198(H2S)','SS2168(Cl2)','SS2128(CO)','SS2148(NO2)','SS2118(O2)','PID(VOD)','SS2138(NO)','SS21N8(NH3)','SS21A8(Alc)','Temp1','Temp2','Humidity1','Humidity2','MQ2(Smoke)','MQ3(Alc,C6H6)','MQ4(CH4,LNG)','MQ5(LPG,LNG)','MQ6(C4H10,C3H8)','MQ8(H2)','MQ9(CH4,LPG)','MQ131(O3)','MQ135(NH3,NOx)','MQ138(C7H8,C3H60)','Purge Gas','Gas CH1','Gas CH2','Gas CH3','Gas CH4'];\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":"open","ping_status":"open","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\/1290"}],"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=1290"}],"version-history":[{"count":10,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=\/wp\/v2\/posts\/1290\/revisions"}],"predecessor-version":[{"id":1840,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=\/wp\/v2\/posts\/1290\/revisions\/1840"}],"wp:attachment":[{"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}