{"id":1862,"date":"2023-11-01T21:45:55","date_gmt":"2023-11-01T12:45:55","guid":{"rendered":"https:\/\/www.gassensor.kr\/?p=1862"},"modified":"2023-11-02T07:26:58","modified_gmt":"2023-11-01T22:26:58","slug":"%ed%85%8c%ec%8a%a4%ed%8a%b8","status":"publish","type":"post","link":"https:\/\/www.gassensor.kr\/?p=1862","title":{"rendered":"\ubaa8\ubc14\uc77c \uacc4\uce21\uae30 \ud559\uc2b5\uc6a9 \uce21\uc815\ub370\uc774\ud130 \uad00\ub9ac (2023.11.2) (did \uae30\ubc18)"},"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=\"2\"> X \ucd95 <\/td>\n<td>\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> Y \ucd95 <\/td>\n<td>Sensors<\/td>\n<td><span id=\"menuY_S\"><\/span><\/td>\n<\/tr>\n<tr>\n<td> Y2 \ucd95 <\/td>\n<td>Sensors<\/td>\n<td><span id=\"menuY2_S\"><\/span><\/td>\n<\/tr>\n<\/table>\n<p>\n<span id=\"dblist\"><\/span><button id=\"btn_load\"> \uadf8\ub798\ud504\ub85c \uadf8\ub9ac\uae30 <\/button> &nbsp; <button id=\"btn_save\"> \ub2e4\uc6b4\ub85c\ub4dc <\/button> &nbsp;<button id=\"btn_allsave\"> \uc804\uccb4\ub2e4\uc6b4\ub85c\ub4dc <\/button> &nbsp; <button id=\"btn_delete\"> \uc0ad\uc81c\ud558\uae30 <\/button><\/p>\n<div id=\"msg\"><\/div>\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  const authority = [\"gassensor\", \"blair0701\", \"portax7\"];\n  if (authority.includes(user_id)) {\n    jQuery(\"#btn_delete\").show();\n  } else {\n    jQuery(\"#btn_delete\").hide();\n  }\n    var json_timearray = [\n        { type: '\uce21\uc815\uc2dc\uac04', value: 'mt', checked: true }\n    ];\n    var json_sensorarray = [\n        { type:'MQ7', value: 's1', checked: false },\n        { type:'d(MQ7)\/dt', value: 'ds1', checked: false },\n        { type:'dd(MQ7)\/ddt', value: 'dds1', checked: false },\n        { type:'MQ8 (H2)', value: 's2', checked: false },\n        { type:'d(MQ8)\/dt', value: 'ds2', checked: false },\n        { type:'dd(MQ8)\/ddt', value: 'dds2', checked: false },\n        { type:'SS2178', value: 's3', checked: false },\n        { type:'d(SS2178)\/dt', value: 'ds3', checked: false },\n        { type:'dd(SS2178)\/ddt', value: 'dds3', checked: false },\n        { type:'PID', value: 's4', checked: false },\n        { type:'d(PID)\/dt', value: 'ds4', checked: false },\n        { type:'dd(PID)\/ddt', value: 'dds4', 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    json_sensorarray[0]['checked'] = true;\n    json_sensorarray[3]['checked'] = true;\n    json_sensorarray[7]['checked'] = true;\n    json_sensorarray[9]['checked'] = true;\n    var optionY_S = checkXMenu(json_sensorarray,\"optiony\");\n    jQuery(\"#menuY_S\").html(optionY_S);\n    json_sensorarray[0]['checked'] = false;\n    json_sensorarray[3]['checked'] = false;\n    json_sensorarray[7]['checked'] = false;\n    json_sensorarray[9]['checked'] = false;\n    var optionY2_S = checkXMenu(json_sensorarray,\"optiony2\");\n    jQuery(\"#menuY2_S\").html(optionY2_S);\n    jQuery.post(ajaxurl, {\n      action: 'ajax_action_loadDW',\n      dbname: 'postgres',\n      tbname: 'measure_mobile',\n      schema: 'public',\n      query: 'SELECT DISTINCT did FROM public.measure_mobile;',\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    });\n    jQuery(\"#btn_load\").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        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.measure_mobile WHERE did = $1 ORDER BY mid ASC;\";\n      jQuery.post(ajaxurl, {\n        action: 'ajax_action_loadDW',\n        dbname: 'postgres',\n        tbname: 'measure_mobile',\n        schema: 'public',\n        query: query_string,\n        params: [choice]\n      }, function(res) {\n         var data_json = JSON.parse(res);\n         console.log(data_json);\n                var data_arr = transpose(convert2array(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(\"#btn_measure\").click(function(){\n      if (jQuery(\"#btn_measure\").text().trim() == \"\uce21\uc815\ud558\uae30\") {\n        jQuery(\"#btn_measure\").text(\"\uc7a0\uc2dc\uba48\ucda4\");\n      } else {\n        jQuery(\"#btn_measure\").text(\"\uce21\uc815\ud558\uae30\");\n      }\n    });\n    jQuery(\"#btn_save\").click(function(){\n       var did_str = jQuery(\"#data_list\").val().toString();\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        var query_string = \"SELECT * FROM public.measure_mobile WHERE did = $1 ORDER BY mid ASC;\";\n        jQuery.post(ajaxurl, {\n          action: 'ajax_action_loadDW',\n          dbname: 'postgres',\n          tbname: 'measure_mobile',\n          schema: 'public',\n          query: query_string,\n          params: [did_str]\n        }, function(data) {\n           var data_json = JSON.parse(data);\n           console.log(data_json);\n           var data_arr = convert2array(data_json);\n           console.log(data_arr);\n           data_arr.unshift(['date','mt','did','mid','s1','ds1','dds1','s2','ds2','dds2','s3','ds3','dds3','s4','ds4','dds4']);\n\/\/           console.log(data_arr);\n\/\/           jQuery(\"#msg\").html(data);\n           exportToCsv(filename, data_arr);\n        });\n    });\n    jQuery(\"#btn_allsave\").click(function(){\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        var query_string = \"SELECT * FROM public.measure_mobile ORDER BY age(cts) DESC;\";\n        jQuery.post(ajaxurl, {\n          action: 'ajax_action_loadDW',\n          dbname: 'postgres',\n          tbname: 'measure_mobile',\n          schema: 'public',\n          query: query_string,\n          params: []\n        }, function(data) {\n           var data_json = JSON.parse(data);\n           console.log(data_json);\n           var data_arr = convert2array(data_json);\n           console.log(data_arr);\n           data_arr.unshift(['date','mt','did','mid','s1','ds1','dds1','s2','ds2','dds2','s3','ds3','dds3','s4','ds4','dds4']);\n\/\/           console.log(data_arr);\n\/\/           jQuery(\"#msg\").html(data);\n           exportToCsv(filename, data_arr);\n        });\n    });\n    jQuery(\"#btn_delete\").click(function(){\n      if (confirm(\"\uc815\ub9d0\ub85c \ud574\ub2f9 \ub370\uc774\ud130\ub97c \uc0ad\uc81c\ud560\uae4c\uc694?\")) {\n        var did_str = jQuery(\"#data_list\").val().toString();\n        var query_string = \"DELETE FROM public.measure_mobile WHERE did = $1;\";\n        jQuery.post(ajaxurl, {\n          action: 'ajax_action_loadDW',\n          dbname: 'postgres',\n          tbname: 'measure_mobile',\n          schema: 'public',\n          query: query_string,\n          params: [did_str]\n        }, function(res) {\n          console.log(res);\n        });\n        location.reload();\n      }\n    });\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}\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 + '<\/option>';\n    } else {\n      menu += '<option value=\"' + json_array[i].did + '\">' + json_array[i].did + '<\/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 isNumeric(n) {\n  return !isNaN(parseFloat(n)) && isFinite(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      if (isNumeric(data_json[i][key])) {\n         row.push(Number(data_json[i][key]));\n      } else {\n         row.push(data_json[i][key]);\n      }\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 settingname(name){   \/\/ *****\n  var colname = ['mt','s1','ds1','dds1','s2','ds2','dds2','s3','ds3','dds3','s4','ds4','dds4'];\n  var names = ['Time(s)', 'MQ7','d(MQ7)\/dt','dd(MQ7)\/ddt','MQ8','d(MQ8)\/dt','dd(MQ8)\/ddt','SS2178','d(SS2178)\/dt','dd(SS2178)\/ddt','PID','d(PID)\/dt','dd(PID)\/ddt'];\n  return names[colname.indexOf(name)];\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\/1862"}],"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=1862"}],"version-history":[{"count":10,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=\/wp\/v2\/posts\/1862\/revisions"}],"predecessor-version":[{"id":1884,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=\/wp\/v2\/posts\/1862\/revisions\/1884"}],"wp:attachment":[{"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1862"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1862"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gassensor.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1862"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}