{"id":1621,"date":"2023-03-17T04:24:34","date_gmt":"2023-03-16T19:24:34","guid":{"rendered":"https:\/\/www.gassensor.kr\/?p=1621"},"modified":"2023-05-03T00:23:38","modified_gmt":"2023-05-02T15:23:38","slug":"%eb%a9%94%eb%89%b4%ec%84%a4%ea%b3%84","status":"publish","type":"post","link":"https:\/\/www.gassensor.kr\/?p=1621","title":{"rendered":"\uc13c\uc11c DB UI \uc124\uacc4"},"content":{"rendered":"<p>  <!-- \uc2a4\ud0c0\uc77c\uacfc \ud544\uc694\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac \ubd88\ub7ec\ub4e4\uc784 --><\/p>\n<style type=\"text\/css\">\n          img { width: 100% },\n          button.search { \n            color: black;\n            padding-right: 3px;\n            padding-left: 3px;\n            background-color: gray;\n          }\n       <\/style>\n<p>       <script src=\"https:\/\/cdn.plot.ly\/plotly-latest.min.js\"><\/script><br \/>\n       <script src=\"https:\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/1.9.1\/jquery.min.js\"><\/script><br \/>\n       <script src=\"https:\/\/mattstow.com\/experiment\/responsive-image-maps\/jquery.rwdImageMaps.min.js\"><\/script><br \/>\n  <!--  --><br \/>\n  <!-- \uac00\uc2a4 DB\ub97c \uc120\ud0dd\ud560 \uc218 \uc788\ub3c4\ub85d \uc774\ubbf8\uc9c0\ub9f5 \uc9c0\uc815 --><br \/>\n  <!--  --><br \/>\n<img decoding=\"async\" src=\"https:\/\/www.gassensor.kr\/wp-content\/uploads\/2023\/03\/sensor_map.jpg\" alt=\"\" usemap=\"#sensormap\" \/><\/p>\n<map name=\"sensormap\">\n<area shape=\"rect\" coords=\"63,73,213,120\" alt=\"\ud0c4\ud654\uc218\uc18c\" href=\"#bottom\" onclick=\"showmenu('\ud0c4\ud654\uc218\uc18c');\" title=\"\ud0c4\ud654\uc218\uc18c\">\n<area shape=\"rect\" coords=\"281,32,399,69\" alt=\"\ud504\ub85c\ud310\" href=\"#bottom\" onclick=\"showmenu('\ud504\ub85c\ud310');\" title=\"\ud504\ub85c\ud310\">\n<area shape=\"rect\" coords=\"604,3,695,40\" alt=\"\uc218\uc18c\" href=\"#bottom\" onclick=\"showmenu('\uc218\uc18c');\" title=\"\uc218\">\n<area shape=\"rect\" coords=\"586,48,968,79\" alt=\"\ud558\uc774\ub4dc\ub85d\uc2a4(\uc218\uc18c\/\uc0b0\uc18c\ud63c\ud569\uac00\uc2a4)\" href=\"#bottom\" onclick=\"showmenu('\ud558\uc774\ub4dc\ub85d\uc2a4(\uc218\uc18c\/\uc0b0\uc18c\ud63c\ud569\uac00\uc2a4)');\" title=\"\ud558\uc774\ub4dc\ub85d\uc2a4(\uc218\uc18c\/\uc0b0\uc18c\ud63c\ud569\uac00\uc2a4)\">\n<area shape=\"rect\" coords=\"586,84,715,113\" alt=\"\uc0b0\ud654\uc9c8\uc18c\" href=\"#bottom\" onclick=\"showmenu('\uc0b0\ud654\uc9c8\uc18c');\" title=\"\uc0b0\ud654\uc9c8\uc18c\">\n<area shape=\"rect\" coords=\"584,119,718,149\" alt=\"\uc554\ubaa8\ub2c8\uc544\" href=\"#bottom\" onclick=\"showmenu('\uc554\ubaa8\ub2c8\uc544');\" title=\"\uc554\ubaa8\ub2c8\uc544\">\n<area shape=\"rect\" coords=\"585,166,671,195\" alt=\"\uba54\ud0c4\" href=\"#bottom\" onclick=\"showmenu('\uba54\ud0c4');\" title=\"\uba54\ud0c4\">\n<area shape=\"rect\" coords=\"595,212,730,242\" alt=\"\uc5fc\ud654\uc2dc\uc548\" href=\"#bottom\" onclick=\"showmenu('\uc5fc\ud654\uc2dc\uc548');\" title=\"\uc5fc\ud654\uc2dc\uc548\">\n<area shape=\"rect\" coords=\"187,248,292,286\" alt=\"\ud1a8\ub8e8\uc5d4\" href=\"#bottom\" onclick=\"showmenu('\ud1a8\ub8e8\uc5d4');\" title=\"\ud1a8\ub8e8\uc5d4\">\n<area shape=\"rect\" coords=\"101,272,181,303\" alt=\"\uc0ac\ub9b0\" href=\"#bottom\" onclick=\"showmenu('\uc0ac\ub9b0');\" title=\"\uc0ac\ub9b0\">\n<area shape=\"rect\" coords=\"220,293,323,323\" alt=\"\uc544\uc138\ud1a4\" href=\"#bottom\" onclick=\"showmenu('\uc544\uc138\ud1a4');\" title=\"\uc544\uc138\ud1a4\">\n<area shape=\"rect\" coords=\"208,347,276,380\" alt=\"VX\" href=\"#bottom\" onclick=\"showmenu('VX');\" title=\"VX\">\n<area shape=\"rect\" coords=\"282,339,421,371\" alt=\"\uaca8\uc790\uac00\uc2a4\" href=\"#bottom\" onclick=\"showmenu('\uaca8\uc790\uac00\uc2a4');\" title=\"\uaca8\uc790\uac00\uc2a4\">\n<area shape=\"rect\" coords=\"80,354,184,386\" alt=\"\ud3ec\uc2a4\ud540\" href=\"#bottom\" onclick=\"showmenu('\ud3ec\uc2a4\ud540');\" title=\"\ud3ec\uc2a4\ud540\">\n<area shape=\"rect\" coords=\"1,392,169,428\" alt=\"\ud074\ub85c\ub85c\ud53c\ud06c\ub9b0\" href=\"#bottom\" onclick=\"showmenu('\ud074\ub85c\ub85c\ud53c\ud06c\ub9b0');\" title=\"\ud074\ub85c\ub85c\ud53c\ud06c\ub9b0\">\n<area shape=\"rect\" coords=\"187,390,273,424\" alt=\"\ubca4\uc820\" href=\"#bottom\" onclick=\"showmenu('\ubca4\uc820');\" title=\"\ubca4\uc820\">\n<area shape=\"rect\" coords=\"165,435,323,468\" alt=\"\ud558\uc774\ub4dc\ub77c\uc9c4\" href=\"#bottom\" onclick=\"showmenu('\ud558\uc774\ub4dc\ub77c\uc9c4');\" title=\"\ud558\uc774\ub4dc\ub77c\uc9c4\">\n<area shape=\"rect\" coords=\"82,480,261,511\" alt=\"\uc561\ud654\uc11d\uc720\uac00\uc2a4\" href=\"#bottom\" onclick=\"showmenu('\uc561\ud654\uc11d\uc720\uac00\uc2a4');\" title=\"\uc561\ud654\uc11d\uc720\uac00\uc2a4\">\n<area shape=\"rect\" coords=\"211,617,321,646\" alt=\"\ub098\ud504\ud0c0\" href=\"#bottom\" onclick=\"showmenu('\ub098\ud504\ud0c0');\" title=\"\ub098\ud504\ud0c0\">\n<area shape=\"rect\" coords=\"335,615,495,650\" alt=\"\uc544\ud06c\ub864\ub808\uc778\" href=\"#bottom\" onclick=\"showmenu('\uc544\ud06c\ub864\ub808\uc778');\" title=\"\uc544\ud06c\ub864\ub808\uc778\">\n<area shape=\"rect\" coords=\"580,389,793,426\" alt=\"\uc5d0\ud2f8\ub80c\uc625\uc0ac\uc774\ub4dc\" href=\"#bottom\" onclick=\"showmenu('\uc5d0\ud2f8\ub80c\uc625\uc0ac\uc774\ub4dc');\" title=\"\uc5d0\ud2f8\ub80c\uc625\uc0ac\uc774\ub4dc\">\n<area shape=\"rect\" coords=\"604,452,839,486\" alt=\"\uce74\ubcf8\ub2e4\uc774\uc124\ud30c\uc774\ub4dc\" href=\"#bottom\" onclick=\"showmenu('\uce74\ubcf8\ub2e4\uc774\uc124\ud30c\uc774\ub4dc');\" title=\"\uce74\ubcf8\ub2e4\uc774\uc124\ud30c\uc774\ub4dc\">\n<area shape=\"rect\" coords=\"616,502,726,534\" alt=\"\ud3ec\uc2a4\uac90\" href=\"#bottom\" onclick=\"showmenu('\ud3ec\uc2a4\uac90');\" title=\"\ud3ec\uc2a4\uac90\">\n<area shape=\"rect\" coords=\"642,551,773,582\" alt=\"\uc5fc\uc18c\uac00\uc2a4\" href=\"#bottom\" onclick=\"showmenu('\uc5fc\uc18c\uac00\uc2a4');\" title=\"\uc5fc\uc18c\uac00\uc2a4\">\n<area shape=\"rect\" coords=\"663,604,806,637\" alt=\"\uc5d0\ud2f8\ub80c\uacc4\" href=\"#bottom\" onclick=\"showmenu('\uc5d0\ud2f8\ub80c\uacc4');\" title=\"\uc5d0\ud2f8\ub80c\uacc4\">\n<area shape=\"rect\" coords=\"927,157,1139,197\" alt=\"\ud2b8\ub9ac\ud074\ub85c\ub85c\uc2e4\ub780\" href=\"#bottom\" onclick=\"showmenu('\ud2b8\ub9ac\ud074\ub85c\ub85c\uc2e4\ub780');\" title=\"\ud2b8\ub9ac\ud074\ub85c\ub85c\uc2e4\ub780\">\n<area shape=\"rect\" coords=\"953,219,1042,254\" alt=\"\uc0b0\uc18c\" href=\"#bottom\" onclick=\"showmenu('\uc0b0\uc18c');\" title=\"\uc0b0\uc18c\">\n<area shape=\"rect\" coords=\"973,317,1133,358\" alt=\"\ube0c\ub86c\ud654\uc218\uc18c\" href=\"#bottom\" onclick=\"showmenu('\ube0c\ub86c\ud654\uc218\uc18c');\" title=\"\ube0c\ub86c\ud654\uc218\uc18c\">\n<area shape=\"rect\" coords=\"933,387,1089,420\" alt=\"\uc2dc\uc548\ud654\uc218\uc18c\" href=\"#bottom\" onclick=\"showmenu('\uc2dc\uc548\ud654\uc218\uc18c');\" title=\"\uc2dc\uc548\ud654\uc218\uc18c\">\n<area shape=\"rect\" coords=\"340,440,432,504\" alt=\"PID \uc13c\uc11c\" href=\"#bottom\" onclick=\"showmenu('PID \uc13c\uc11c');\" title=\"PID \uc13c\uc11c\">\n<area shape=\"rect\" coords=\"336,219,520,307\" alt=\"Chemiresistor\/Semiconductor Sensor\" href=\"#bottom\" onclick=\"showmenu('Chemiresistor\/Semiconductor Sensor');\" title=\"Chemiresistor\/Semiconductor Sensor\">\n<area shape=\"rect\" coords=\"627,281,821,348\" alt=\"Electrochemical Sensor\" href=\"#bottom\" onclick=\"showmenu('Electrochemical Sensor');\" title=\"Electrochemical Sensor\">\n<area shape=\"rect\" coords=\"\" alt=\"\" href=\"#bottom\" onclick=\"showmenu('');\" title=\"\">\n<area shape=\"rect\" coords=\"\" alt=\"\" href=\"#bottom\" onclick=\"showmenu('');\" title=\"\">\n<\/map>\n<p>  <!--  --><br \/>\n  <!-- \ud654\uba74\uc124\uacc4 --><br \/>\n  <!--  --><\/p>\n<table>\n<tr>\n<th> \uad6c\ubd84 <\/th>\n<th>\uc885\ub958 <\/th>\n<th>\uac00\uc2a4\uc120\ud0dd <span id=\"dblist\"><\/span> <\/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<button id=\"get_data\">\ub370\uc774\ud130 \uadf8\ub9ac\uae30<\/button>  <button id=\"download_data\">\ub370\uc774\ud130 \ub2e4\uc6b4\ub85c\ub4dc<\/button><\/p>\n<div id=\"output\"><\/div>\n<div id=\"output_plot\"><\/div>\n<div id=\"id_show\"><\/div>\n<p>  <!--  --><br \/>\n  <!-- jQuery \ub8e8\ud2f4 --><br \/>\n  <!--  --><br \/>\n<script>\nvar d = {};\njQuery(document).ready(function(e){\n  jQuery('img[usemap]').rwdImageMaps(); \/\/ response image map https:\/\/webty.tistory.com\/143\n  jQuery('#dblist').html('<b>\uac00\uc2a4\uc13c\uc2f1 : \ubcf4\uace0\uc790 \ud558\ub294 \uac00\uc2a4\ub97c \uadf8\ub9bc\uc5d0\uc11c \uc120\ud0dd\ud558\uc2ed\uc2dc\uc624.<\/b>');\n  jQuery('#dblist').change(function(){\n    d[\"selected\"] = jQuery(\"#data_list\").val();\n    set_menu_option();\n    console.log(d);\n  });\n  jQuery(\"#get_data\").click(function(){\n     plot_data(d);\n  });\n  jQuery(\"#download_data\").click(function(){\n        var tablename = d[\"tablename\"];\n        var tablename_info = d[\"tablename_info\"];\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 choice = d['config'][d['selected']].did;\n        var query_string = \"SELECT \" + querycols + \" FROM public.\" + tablename + \" WHERE did = $1 AND mid % $2 = 0 ORDER BY mt ASC;\";\n        console.log(choice);\n        console.log(speed_index);\n        console.log(query_string);\n        jQuery.post(ajaxurl, {\n            action: 'ajax_action_connDW',\n            dbname: 'postgres',\n            tbname: tablename,\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 = convert2array(data_json);\n            data_arr.unshift(columns);\n            jQuery(\"#output\").html(\"\");\n            exportToCsv(filename,data_arr);\n       });\n    });\n});\nfunction set_table_name(){\n  var generation = d[\"config\"][d[\"selected\"]].generation;\n  var did = d[\"config\"][d[\"selected\"]].did;\n  var tablename_info = \"\";\n  var tablename = \"\";\n  switch (generation) {\n    case \"1\": \n      tablename_info = \"measurements_krict_info\"; \n      tablename = \"measurements_krict\"; \n      break;\n    case \"2\":\n      tablename_info = \"measurements_krict_2nd_info\";\n      tablename = \"measurements_krict_2nd\";\n      break;\n    case \"3\":\n      tablename_info = \"measurements_krict_3rd_info\";\n      tablename = \"measurements_krict_3rd\";\n      break;\n  }\n  d[\"tablename_info\"] = tablename_info;\n  d[\"tablename\"] = tablename;\n}\nfunction set_menu_option() {\n    var json_timearray = [\n      { type: '\uce21\uc815\uc2dc\uac04', value: 'mt', checked: true }\n    ];\n    d[\"json_timearray\"] = json_timearray;\n    var json_sensor_situation = JSON.parse(d[\"config\"][d[\"selected\"]].situation);\n    var json_sensorarray = [];\n    var json_gasarray = [];\n    var json_sensor_keys = Object.keys(json_sensor_situation);\n    for (let i = 0; i < json_sensor_keys.length; i++){\n      if (json_sensor_keys[i].substring(0, 1) == 's') {\n        json_sensorarray.push({type: json_sensor_situation[json_sensor_keys[i]], value: json_sensor_keys[i], checked: false} );\n      } else {\n        json_gasarray.push({type: json_sensor_situation[json_sensor_keys[i]], value: json_sensor_keys[i], checked: false} );\n      }\n    }\n    d[\"json_sensorarray\"] = json_sensorarray;\n    d[\"json_gasarray\"] = json_gasarray;\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[0]['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[0]['checked'] = false;\n    var optionY2_S = checkXMenu(json_sensorarray,\"optiony2\");\n    jQuery(\"#menuY2_S\").html(optionY2_S);\n    var optionY2_G = checkXMenu(json_gasarray,\"optiony2\");\n    jQuery(\"#menuY2_G\").html(optionY2_G);\n    set_table_name();\n}\nfunction showmenu(element){\n  jQuery.post(ajaxurl, {\n    action: 'ajax_action_connDW',\n    dbname: 'postgres',\n    tbname: 'table_gas_generation',\n    schema: 'public',\n    query: 'SELECT * FROM public.table_gas_generation WHERE imagemap = $1 ORDER BY did ASC;',\n    params: [element]\n  }, function(res) {\n    var res_contents_json = JSON.parse(res);\n    res_contents_json.sort((a,b) => parseInt(a.generation) - parseInt(b.generation));\n    jQuery(\"#dblist\").html(selectJsonMenu(res_contents_json,\"data_list\",0));\n    d[\"config\"] = res_contents_json;\n    d[\"selected\"] = jQuery(\"#data_list\").val();\n    set_menu_option();\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=\"' + i + '\" selected>' + json_array[i].generation + '\uc138\ub300: ' + json_array[i].chemical_name + ' (' + json_array[i].desp + ') <\/option>';\n    } else {\n      menu += '<option value=\"' + i + '\">' + json_array[i].generation + '\uc138\ub300: ' + json_array[i].chemical_name + ' (' + json_array[i].desp + ')<\/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 plot_data(db_data){\n  var tablename = d[\"tablename\"];\n  var tablename_info = d[\"tablename_info\"];\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 = d['config'][d['selected']].did;\n  console.log(d);\n  var query_string = \"SELECT \" + querycols + \" FROM public.\" + tablename + \" 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: tablename,\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}\nfunction settingname(name){\n  var json_sensor_situation = JSON.parse(d[\"config\"][d[\"selected\"]].situation);\n  return json_sensor_situation[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":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=\/wp\/v2\/posts\/1621"}],"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=1621"}],"version-history":[{"count":171,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=\/wp\/v2\/posts\/1621\/revisions"}],"predecessor-version":[{"id":1801,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=\/wp\/v2\/posts\/1621\/revisions\/1801"}],"wp:attachment":[{"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}