{"id":215,"date":"2017-03-06T18:35:58","date_gmt":"2017-03-06T17:35:58","guid":{"rendered":"https:\/\/www.f8eby.org\/blog\/?p=215"},"modified":"2017-03-07T00:18:23","modified_gmt":"2017-03-06T23:18:23","slug":"analyse-graphique-de-la-zone-de-couverture","status":"publish","type":"post","link":"https:\/\/www.f8eby.org\/blog\/index.php\/2017\/03\/06\/analyse-graphique-de-la-zone-de-couverture\/","title":{"rendered":"Analyse graphique de la zone de couverture"},"content":{"rendered":"<p>Dans le <a href=\"https:\/\/www.f8eby.org\/blog\/index.php\/2016\/08\/14\/creation-dun-digipeater-aprs-ou-relais-de-positionnement-gps\/\" target=\"_blank\">premier article<\/a> de cette s\u00e9rie sur l&rsquo;APRS, j&rsquo;ai r\u00e9alis\u00e9 une simulation de la zone de couverture avec <a href=\"http:\/\/www.cplus.org\/rmw\/\" target=\"_blank\">Radiomobile<\/a> (merci Roger VE2DBE). Apr\u00e8s quelques mois de fonctionnement, il me semble int\u00e9ressant de valider ces pr\u00e9visions et en m\u00eame v\u00e9rifier l&rsquo;int\u00e9r\u00eat de ce digipeater.&nbsp;<\/p>\n<p>J&rsquo;utilise le fichier log quotidien de DireWolf (dans \/var\/log), un script Perl pour faire le travail de mise en forme et de calcul des distances entre la station et les stations entendues. Mais pour ne pas tomber dans la routine de la base de donn\u00e9es relationnelle, j&rsquo;ai choisi d&rsquo;essayer un autre syst\u00e8me appel\u00e9 base de donn\u00e9es de s\u00e9ries temporelles.<\/p>\n<p>A part la nouveaut\u00e9, c&rsquo;est surtout un type de SGBD bien adapt\u00e9 pour le stockage des donn\u00e9es de l&rsquo;IdO (Internet des Objets) car sans structure rigide et une facilit\u00e9 \u00e0 engranger beaucoup de donn\u00e9es et tr\u00e8s rapidement. Ce type de SGBD est class\u00e9 dans le NoSQL, que l&rsquo;on peut d\u00e9crypter par : \u00ab\u00a0Not Only SQL\u00a0\u00bb plut\u00f4t que \u00ab\u00a0No SQL\u00a0\u00bb.<!--more--><\/p>\n<p>Le SGBD qui me sembe avoir le vent en poupe est <a href=\"https:\/\/www.influxdata.com\/open-source\/\" target=\"_blank\">InfluxDB<\/a>, qui est bien connu dans le stockage de la t\u00e9l\u00e9m\u00e9trie de supervision car il est bien entour\u00e9 :<\/p>\n<ul>\n<li>Telegraph pour la collecte<\/li>\n<li>InfluxDB pour le stockage<\/li>\n<li>Chronograf pour la repr\u00e9sentation<\/li>\n<li>Kapacitor pour la d\u00e9tection, l&rsquo;alerte et la r\u00e9ponse aux probl\u00e8mes.<\/li>\n<\/ul>\n<p>Ce qui fait <a href=\"http:\/\/jargonf.org\/wiki\/tick\" target=\"_blank\">TICK<\/a> en r\u00e9f\u00e9rence \u00e0 cette unit\u00e9 de mesure du temps en informatique. Mais revenons \u00e0 nos moutons, je n&rsquo;utiliserai que InfluxDB et j&rsquo;ajouterai <a href=\"http:\/\/grafana.org\/\" target=\"_blank\">Grafana<\/a> qui est un bel environnement de requ\u00eate et de visualisation.<\/p>\n<p>La cha\u00eene de traitement est simple, et sera bient\u00f4t automatis\u00e9e :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-217\" src=\"https:\/\/www.f8eby.org\/blog\/wp-content\/uploads\/2017\/03\/traitement-stat.png\" alt=\"\" height=\"224\" width=\"995\" srcset=\"https:\/\/www.f8eby.org\/blog\/wp-content\/uploads\/2017\/03\/traitement-stat.png 995w, https:\/\/www.f8eby.org\/blog\/wp-content\/uploads\/2017\/03\/traitement-stat-300x68.png 300w, https:\/\/www.f8eby.org\/blog\/wp-content\/uploads\/2017\/03\/traitement-stat-768x173.png 768w\" sizes=\"auto, (max-width: 995px) 100vw, 995px\" \/><\/p>\n<p>Le format du log est indiqu\u00e9 dans la <a href=\"https:\/\/github.com\/wb2osz\/direwolf\/blob\/master\/doc\/User-Guide.pdf\" target=\"_blank\">documentation de DIreWolf<\/a>. Le script Perl met en forme les infos \u00e0 stocker, calcule la distance entre le Digipeater et la station entendue gr\u00e2ce&nbsp; au module <a href=\"https:\/\/metacpan.org\/pod\/Geo::Calc::XS\" target=\"_blank\">Geo::Calc:XS<\/a> et enfin le locator gr\u00e2ce au module <a href=\"https:\/\/metacpan.org\/pod\/Ham::Locator\" target=\"_blank\">Ham::Locator<\/a>. Evidemment une qualification des donn\u00e9es a \u00e9t\u00e9 n\u00e9cessaire car l&rsquo;analyse des trames permet aussi de remonter les erreurs de configuration de quelques stations qui seraient \u00e0 une distance que m\u00eame <a href=\"https:\/\/fr.wikipedia.org\/wiki\/%C3%89toile_filante\" target=\"_blank\">le meteo scatter<\/a> ne permet pas d&rsquo;atteindre. Le fichier g\u00e9n\u00e9r\u00e9 est au format CSV qui peut \u00eatre int\u00e9gr\u00e9 directement par l&rsquo;API HTTP de InfluxDB par une commande du style :<\/p>\n<p><strong>curl -i -XPOST &lsquo;http:\/\/localhost:8086\/write?db=mydb&rsquo; &#8211;data-binary @cpu_data.txt<\/strong><\/p>\n<p>Dans le cas pr\u00e9sent j&rsquo;ai but\u00e9 sur une quantit\u00e9 de donn\u00e9es trop importante pour \u00eatre ing\u00e9r\u00e9e en une requ\u00eate, donc j&rsquo;ai utilis\u00e9 le bon vieil outil <strong>split<\/strong> pour d\u00e9couper le fichier en extraits de 500 lignes. L&rsquo;ensemble de la cha\u00eene est l\u00e9g\u00e8re et peu gourmande en ressource ce qui permet de se l\u00e2cher sur la quantit\u00e9 de donn\u00e9es \u00e0 stocker. Car sur les 175 log quotidien, j&rsquo;arrive \u00e0 une moyenne de <strong>27700<\/strong> trames re\u00e7ues par jour pour <strong>3,8 Mo<\/strong>.<\/p>\n<p>Une agr\u00e9gation des donn\u00e9es est indispensable dans Grafana pour l&rsquo;affichage car trop de donn\u00e9es tue les donn\u00e9es ;-).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-218\" src=\"https:\/\/www.f8eby.org\/blog\/wp-content\/uploads\/2017\/03\/stats-grafana1.png\" alt=\"\" height=\"501\" width=\"1000\" srcset=\"https:\/\/www.f8eby.org\/blog\/wp-content\/uploads\/2017\/03\/stats-grafana1.png 1000w, https:\/\/www.f8eby.org\/blog\/wp-content\/uploads\/2017\/03\/stats-grafana1-300x150.png 300w, https:\/\/www.f8eby.org\/blog\/wp-content\/uploads\/2017\/03\/stats-grafana1-768x385.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-219\" src=\"https:\/\/www.f8eby.org\/blog\/wp-content\/uploads\/2017\/03\/stats-grafana2.png\" alt=\"\" height=\"501\" width=\"1000\" srcset=\"https:\/\/www.f8eby.org\/blog\/wp-content\/uploads\/2017\/03\/stats-grafana2.png 1000w, https:\/\/www.f8eby.org\/blog\/wp-content\/uploads\/2017\/03\/stats-grafana2-300x150.png 300w, https:\/\/www.f8eby.org\/blog\/wp-content\/uploads\/2017\/03\/stats-grafana2-768x385.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<p>Ces deux extraits indiquent une distance moyenne de 120 et 133 km sur deux p\u00e9riodes diff\u00e9rentes. CE r\u00e9sultat est coh\u00e9rent avec ce qui est indiqu\u00e9 sur <a href=\"http:\/\/aprs.fi\/info\/a\/F8EBY-2\" target=\"_blank\">aprs.fi<\/a>. L&rsquo;\u00e9tape suivante sera l&rsquo;affichage sur carte des positions g\u00e9ographiques re\u00e7ues. Ces informations seront par la suite \u00e0 suivre lorsque le Digipeater sera d\u00e9plac\u00e9 dans le pyl\u00f4ne.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans le premier article de cette s\u00e9rie sur l&rsquo;APRS, j&rsquo;ai r\u00e9alis\u00e9 une simulation de la zone de couverture avec Radiomobile (merci Roger VE2DBE). Apr\u00e8s quelques mois de fonctionnement, il me semble int\u00e9ressant de valider ces pr\u00e9visions et en m\u00eame v\u00e9rifier l&rsquo;int\u00e9r\u00eat de ce digipeater. <\/p>\n","protected":false},"author":1,"featured_media":221,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[16],"tags":[19,28,20,44,18,45],"class_list":["post-215","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aprs","tag-aprs","tag-couverture-radio","tag-digipeater","tag-influxdb","tag-linux","tag-statistiques","item-wrap"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.f8eby.org\/blog\/index.php\/wp-json\/wp\/v2\/posts\/215","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.f8eby.org\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.f8eby.org\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.f8eby.org\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.f8eby.org\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=215"}],"version-history":[{"count":0,"href":"https:\/\/www.f8eby.org\/blog\/index.php\/wp-json\/wp\/v2\/posts\/215\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.f8eby.org\/blog\/index.php\/wp-json\/wp\/v2\/media\/221"}],"wp:attachment":[{"href":"https:\/\/www.f8eby.org\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=215"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.f8eby.org\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=215"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.f8eby.org\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=215"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}