{"id":307,"date":"2018-01-12T08:02:05","date_gmt":"2018-01-12T10:02:05","guid":{"rendered":"http:\/\/vejas.defas.lt\/?p=307"},"modified":"2018-11-16T01:57:34","modified_gmt":"2018-11-16T03:57:34","slug":"analoginiu-parametru-atvaizdavimas-internetineje-svetaineje","status":"publish","type":"post","link":"http:\/\/vejas.defas.lt\/?p=307","title":{"rendered":"Analogini\u0173 parametr\u0173 atvaizdavimas internetin\u0117je svetain\u0117je"},"content":{"rendered":"<p>Analoginiai duomenys randasi duomen\u0173 baz\u0117je. U\u017eduotis vaizd\u017eiai atvaizduoti dinamin\u012f parametr\u0173 pokyt\u012f interneto nar\u0161ykl\u0117je. \u0160i\u0105 u\u017eduot\u012f sudaro dvi dalys: duomen\u0173 nuskaitymas ir atvaizdavimas. \u017demiau apra\u0161ysiu abu procesus.<\/p>\n<p>A. Duomen\u0173 nuskaitymas i\u0161 duomen\u0173 baz\u0117s.<\/p>\n<p>\u0160is etapas apima duomen\u0173 periodin\u012f u\u017eklausos formavim\u0105, rezultato gavim\u0105, rezultato i\u0161vedim\u0105. Interneto svetain\u0117je aktyvuojame JavaScript proced\u016br\u0105 vgrrefresh().<\/p>\n<p>HTML kalba tai atrodys:<\/p>\n<pre>body onload=\"vgrrefresh();\"\r\n<\/pre>\n<p>Proced\u016br\u0105 sudaro viena eilut\u0117:<\/p>\n<pre>function vgrrefresh() { \r\n\tsetInterval(function() {vgrrefresh1();},1000); \r\n}\r\n<\/pre>\n<p>\u0160i funkcija i\u0161kvie\u010dia periodin\u012f kreipim\u0105si \u012f sekan\u010dia funkcij\u0105 vgrrefresh1(). Ji patalpnta faile vejas.js, kurio turinys pateiktas \u017eemiau:<\/p>\n<pre style=\"font-size: 12px;\">var ct=0;\r\nvar ve=0;\r\nvar ctmax=50;\r\nvar ctx;\r\nvar myChart;\r\nvar DuplRec=0;\/\/u\u017eklausa gr\u0105\u017eina tok\u012f pat \u012fra\u0161\u0105, kaip ir praeita u\u017eklausa\r\nvar vgrss;\/\/start stop kintamasis\r\nvar vgrid=0;\/\/u\u017eklausiam\u0173 duomen\u0173 id kintamasis\r\nvar ooo=\"\";\/\/outut isvedimo kintamasis\r\nvar vgrgo=false;\/\/u\u017eklausai startuoti\r\nvar vgrctreset=false;\/\/ctreset - naujausi duomenys\r\nvar tik=5;\/\/tik - priodas\r\nfunction vgrrefresh() {\r\n    ctx = document.getElementById('myChart1').getContext('2d');\r\n    myChart = new Chart(ctx, {\r\n        type: 'line',\r\n        data: {\r\n            labels: [],\r\n            datasets: [{\r\n                label: 'V\u0117jo greitis',\r\n                data: [],\r\n                backgroundColor: \"rgba(153,255,51,0.4)\"\r\n              }, {\r\n                label: 'Generatoriaus da\u017enis',\r\n                data: [],\r\n                backgroundColor: \"rgba(127,153,0,0.4)\"\r\n              }, {\r\n                label: 'Srov\u0117',\r\n                data: [],\r\n                backgroundColor: \"rgba(255,153,0,0.4)\"\r\n              }, {\r\n                label: '\u012etampa',\r\n                data: [],\r\n                backgroundColor: \"rgba(73,153,0,0.4)\"\r\n              }, {\r\n                label: 'Apkrova',\r\n                data: [],\r\n                backgroundColor: \"rgba(73,153,127,0.4)\"\r\n              }]\r\n        },\r\n        options: {\r\n            animation: false,\r\n            animation: {duration: 0}\r\n        }    \r\n    });\r\n    realtime=false;\r\n    vgrstartstop();\r\n}\r\nfunction vgrrefresh1() {\/\/Send a http request with AJAX http:\/\/api.jquery.com\/jQuery.ajax\/\r\n    Toggle_color();\r\n    if (vgrctreset==true) {vgrid=0; vgrctreset=false;}\r\n    if (realtime==true) {vgrid=0;}\r\n    var uzklausa=\"host=vejas001&amp;id=\" + vgrid;\r\n    $.ajax({\r\n        type: \"POST\",\r\n        cache: true,\r\n        url: 'http:\/\/uzsakymai.defas.lt\/vgreitis.php',             \/\/the script to call to get data          \r\n        data: \"host=vejas001&amp;id=\" + vgrid,           \/\/you can insert url argumnets here to pass to api.php for example \"id=5&amp;parent=6\"\r\n        dataType: 'json',                \/\/data format      \r\n        success: function(data) {        \/\/on recieve of reply\r\n            if (data!=null) {\r\n                var out=\"\";\r\n                for (i=0;i&lt;11;i++) {out=out+\" \" + data[i];}\/\/alert(JSON.stringify(data));\r\n                vgrid=parseInt(data[0])+tik; \/\/u\u017eklausos parametras\r\n                    if (data[7]==0) {ve=0;} else {ve=(1000000\/12\/(data[7])).toFixed(2);}\/\/data[7] - meandro periodas mikrosekund\u0117mis. 1m\/s - 12 impuls\u0173!\r\n                    if (data[8]==0) {ge=0;} else {ge=(1000000\/12\/(data[8])).toFixed(2);}\/\/data[7] - generatoriaus signalo periodas mikrosekund\u0117mis. rpm\r\n                    ooo=\"ct=\" + ct + \" data=\" + out;\r\n                    ooo+=\"&lt;br&gt;V\u0117jo greitis:<b>\" + ve+ \" <\/b>m\/s&lt;br&gt;\";\r\n                    ooo+=\"Apkrova=<b>\" + ((data[9] &amp; 255)\/256*100).toFixed(2) + \"<\/b>%&lt;br&gt;\";\r\n                    ooo+=\"Apkrovos indeksas=\" + (data[9]&gt;&gt;&gt;8) + \"&lt;br&gt;\";\r\n                    document.getElementById('output22').innerHTML=ooo;\r\n                    document.getElementById('DL').value=data[11].substring(0,10);\r\n                    \/\/ recommend reading http:\/\/api.jquery.com\/category\/selectors\/\r\n                    if (ct==ctmax) {shiftarray();} else {ct++;} \r\n                    myChart.data.labels[ct]=data[11].substring(11,16);\r\n                    myChart.data.datasets[0].data[ct]=ve;\r\n                    myChart.data.datasets[1].data[ct]=ge;\r\n                    myChart.data.datasets[2].data[ct]=data[1];\r\n                    myChart.data.datasets[3].data[ct]=data[4];\r\n                    myChart.data.datasets[4].data[ct]=((data[9] &amp; 255)\/256*100).toFixed(2);\r\n                    myChart.update();\r\n            }\r\n            vgrgo=true;\r\n        },\r\n        error: function(xhr, status, error) {\r\n            document.getElementById('output22').innerHTML+=\". Kaida:\" + error;\r\n            vgrgo=true;\r\n        }\r\n    });\r\n    vgrgo=true;\r\n}\r\nfunction shiftarray() {\r\n    for (i=0;i&lt;ctmax;i++) {\r\n        myChart.data.labels[i]=myChart.data.labels[i+1];\r\n        myChart.data.datasets[0].data[i]=myChart.data.datasets[0].data[i+1];\r\n        myChart.data.datasets[1].data[i]=myChart.data.datasets[1].data[i+1];\r\n        myChart.data.datasets[2].data[i]=myChart.data.datasets[2].data[i+1];\r\n        myChart.data.datasets[3].data[i]=myChart.data.datasets[3].data[i+1];\r\n        myChart.data.datasets[4].data[i]=myChart.data.datasets[4].data[i+1];\r\n        \/\/myChart.data.datasets[5].data[i]=myChart.data.datasets[5].data[i+1];\r\n    }\r\n    \/\/myChart.options: {animation: false,animation: {duration: 0}};    \r\n}\r\nfunction vgrstartstop() {\r\n    if (document.getElementById('vgrstartstop').value==\"Stop\") {\r\n        document.getElementById('vgrstartstop').value=\"Start\";\r\n        clearTimeout(vgrss);\r\n    } else {\r\n        document.getElementById('vgrstartstop').value=\"Stop\";\r\n        vgrgo=true;       \r\n        vgrss=setInterval(function() {vgrgocheck();},1000);\r\n    }   \r\n}\r\nfunction vgrgocheck() {\r\n    if (vgrgo==true) {\r\n        vgrrefresh1();\r\n        vgrgo=false;\r\n    }  \r\n}\r\nfunction Resetct() {\r\n    vgrctreset=true;\r\n}\r\nfunction Toggle_color() {\r\n    if (document.getElementById('vgrstartstop').style.border==\"2px solid red\") {\r\n        document.getElementById('vgrstartstop').style.border=\"2px solid green\";    \r\n      } else {\r\n        document.getElementById('vgrstartstop').style.border=\"2px solid red\";    \r\n    }\r\n}\r\nfunction Toggle_realtime() {\r\n    if (realtime==false) {\r\n        document.getElementById('realtime').value=\"\u012era\u0161as\"; \r\n        realtime=true;           \r\n      } else {\r\n        document.getElementById('realtime').value=\"Realiu laiku\";  \r\n        realtime=false;      \r\n    }\r\n}\r\nfunction setid() {\r\n    vgrid=parseInt(document.getElementById('setid').value);\r\n}\r\nfunction settik() {\r\n    tik=parseInt(document.getElementById('settik').value);\r\n}\r\n<\/pre>\n<p>\u0160ioje funkcijoje formuojama AJAX u\u017eklausa \u012f vgreitis.php fail\u0105 su parametru host=vejas001, identifikuojan\u010diu j\u0117gain\u0119. Sistema kuriama keletos j\u0117gaini\u0173 valdymui. Taigi JavaScript proced\u016bra formuoja http u\u017eklaus\u0105:<\/p>\n<pre><a href=\"http:\/\/uzsakymai.defas.lt\/vgreitis.php?host=vejas001\">http:\/\/uzsakymai.defas.lt\/vgreitis.php?host=vejas001<\/a><\/pre>\n<p>Failo vgreitis.php turinys:<\/p>\n<pre style=\"font-size: 12px;\">&lt;?\r\nheader(\"Access-Control-Allow-Origin: *\");\r\nheader(\"Access-Control-Allow-Methods: POST, GET, OPTIONS\");\r\nheader(\"Access-Control-Allow-Headers: X-PINGOTHER\");\r\nheader(\"Access-Control-Max-Age: 3600\");\r\nif(($dbh=mysqli_connect(\"localhost\", \"vejas\", \"dvejasD1\", \"VJserver\", 3306)) &gt; 0 ){\r\n  if(isset($_REQUEST['host'])) {\r\n    $q=\"Select * from VJserver.hostai where host='\".$_REQUEST['host'].\"' order by id desc limit 1\";\r\n    if (!$res = mysqli_query($dbh, $q)) {\r\n\t\techo $q.\"&lt;br&gt;\".mysqli_error($dbh);\r\n\t  } else {\r\n        $row = mysqli_fetch_array($res);\r\n        if(($dbh=mysqli_connect($row[\"IP\"], \"vejojegaines\", \"vejojegaines\", \"vejojegaines\", 3306)) &gt; 0 ){\r\n            if ($_REQUEST['id']!=0) {\r\n                $id=$_REQUEST['id'];\r\n              } else {\r\n                $q=\"Select id from vejojegaines.spi order by id desc limit 1\";\/\/TSL\r\n                if (!$res = mysqli_query($dbh, $q)) {\r\n                    echo $q.\"&lt;br&gt;\".mysqli_error($dbh);\r\n                  } else {\r\n                    $row = mysqli_fetch_assoc($res);\r\n                    $id=$row['id'];\r\n                }\r\n            }\r\n            $q=\"Select * from vejojegaines.spi where id=\".$id.\" order by id asc limit 1\";\/\/TSL\r\n            if (!$res = mysqli_query($dbh, $q)) {\r\n                echo $q.\"&lt;br&gt;\".mysqli_error($dbh);\r\n              } else {\r\n                while($row = mysqli_fetch_row($res)) {echo json_encode($row);}\r\n            }\r\n        } else echo \"Klaida 2-ame connecte: \".mysqli_error($dbh); \r\n    }\r\n  } else echo \"Naudoti: &lt;a href=\\\"http:\/\/uzsakymai.defas.lt\/vgreitis.php?host=vejas001&amp;id=0\\\"&gt;Nuoroda&lt;\/a&gt;\";\r\n} else echo mysqli_error($dbh);\r\n?&gt;\r\n<\/pre>\n<p>Kaip tipin\u012f atsakym\u0105 gauname pagal DB u\u017eklausos &#8216;Select * from vejojegaines.spi order by id desc limit 1&#8217; format\u0105. Atkreipkite d\u0117mes\u012f, kad u\u017eklausa formuojama \u012f valdiklio DB, kuris randamas pagal \u012fra\u0161\u0105 centriniame serveryje: &#8222;Select * from VJserver.hostai where host='&#8221;.$_REQUEST[&#8216;host&#8217;].&#8221;&#8216; order by id desc limit 1&#8243;. \u010cia $_REQUEST[&#8216;host&#8217;] yra tas pats parametras i\u0161 http u\u017eklausos. Tai galima remiantis strategine nuostata, pagal kuri\u0105 kiekviena j\u0117gain\u0117 kas 15 min registruojasi centriniame serveryje prane\u0161dama savo IP adres\u0105. To galima b\u016bt\u0173 i\u0161vengti naudojant statinius IP adresus. Taigi atsakymo formatas:<\/p>\n<pre style=\"font-size: 12px;\">[\"909795\",\"13\",\"11\",\"8\",\"10\",\"11\",\"9\",\"27700\",\"224480\",\"12291\",\"237762269\",\"2018-11-16 05:50:10\"]<\/pre>\n<p>\u010cia duomen\u0173 formatas atitinka duomen\u0173 baz\u0117s lentel\u0117s strukt\u016br\u0105, kur 12 parametr\u0173 atskirt\u0173 kableliu rei\u0161kia: identifikatori\u0173 (DB \u012fra\u0161o eil\u0117s numeris), A0-A5 &#8211; analogin\u0117s Arduino matavimo reik\u0161m\u0117s, v\u0117jo ir generatoriaus grei\u010dius mikrosekund\u0117mis, apkrovos indeks\u0105 (auk\u0161tsnis baitas) ir koeficient\u0105 (\u017eemesnis baitas) patalpintus viename \u017eodyje, TimeStamp reik\u0161m\u0117 &#8211; gautas i\u0161 Arduino laiko parametras ir data su laiku, DB \u012fra\u0161o (Rpi) data ir laikas. DB lentel\u0117s strukt\u016bra:<\/p>\n<pre style=\"font-size: 12px;\">DROP TABLE IF EXISTS `vejojegaines`.`spi`;\r\nCREATE TABLE  `vejojegaines`.`spi` (\r\n  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,\r\n  `A1` smallint(5) unsigned NOT NULL,\r\n  `A2` smallint(5) unsigned NOT NULL,\r\n  `A3` smallint(5) unsigned NOT NULL,\r\n  `A4` smallint(5) unsigned NOT NULL,\r\n  `A5` smallint(5) unsigned NOT NULL,\r\n  `A6` smallint(5) unsigned NOT NULL,\r\n  `VGRusvid` int(10) unsigned NOT NULL,\r\n  `GDAusvid` int(10) unsigned NOT NULL,\r\n  `Apkrova` int(10) unsigned NOT NULL,\r\n  `TS` int(10) unsigned NOT NULL,\r\n  `Data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,\r\n  PRIMARY KEY (`id`)\r\n) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;\r\n<\/pre>\n<p>B. Duomen\u0173 atvaizdavimas interneto nar\u0161ykl\u0117s lange.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Analoginiai duomenys randasi duomen\u0173 baz\u0117je. U\u017eduotis vaizd\u017eiai atvaizduoti dinamin\u012f parametr\u0173 pokyt\u012f interneto nar\u0161ykl\u0117je. \u0160i\u0105 u\u017eduot\u012f sudaro dvi dalys: duomen\u0173 nuskaitymas ir atvaizdavimas. \u017demiau apra\u0161ysiu abu procesus. A. Duomen\u0173 nuskaitymas i\u0161 duomen\u0173 baz\u0117s. \u0160is etapas apima duomen\u0173 periodin\u012f u\u017eklausos formavim\u0105, rezultato gavim\u0105, rezultato i\u0161vedim\u0105. Interneto svetain\u0117je aktyvuojame JavaScript proced\u016br\u0105 vgrrefresh(). HTML kalba tai atrodys: body onload=&#8221;vgrrefresh();&#8221; &hellip; <a href=\"http:\/\/vejas.defas.lt\/?p=307\" class=\"more-link\">Skaityti toliau: <span class=\"screen-reader-text\">Analogini\u0173 parametr\u0173 atvaizdavimas internetin\u0117je svetain\u0117je<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_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_forum_subforum_count":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-307","post","type-post","status-publish","format-standard","hentry","category-be-kategorijos"],"acf":[],"_links":{"self":[{"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=\/wp\/v2\/posts\/307","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=307"}],"version-history":[{"count":13,"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=\/wp\/v2\/posts\/307\/revisions"}],"predecessor-version":[{"id":549,"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=\/wp\/v2\/posts\/307\/revisions\/549"}],"wp:attachment":[{"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=307"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=307"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}