{"id":4077,"date":"2017-01-29T21:28:54","date_gmt":"2017-01-29T20:28:54","guid":{"rendered":"http:\/\/bitacora.eniac2000.com\/?p=4077"},"modified":"2017-01-29T21:28:54","modified_gmt":"2017-01-29T20:28:54","slug":"sistema-de-telemetria-y-geoposicionamiento-para-vehiculos","status":"publish","type":"post","link":"https:\/\/bitacora.eniac2000.com\/?p=4077","title":{"rendered":"Sistema de telemetr\u00eda y geoposicionamiento para veh\u00edculos"},"content":{"rendered":"<p>Escrib\u00eda <a href=\"http:\/\/bitacora.eniac2000.com\/?p=4039\" title=\"Sistema de telemetr\u00eda para el Mercedes\">en mi entrada anterior<\/a> que estaba trabajando en un sistema de telemetr\u00eda para el Mercedes. Durante estas \u00faltimas semanas he estado realizando algunas mejoras en el sistema, y si bien a\u00fan es posible incorporar algunas m\u00e1s, en este momento ya empieza a tener un desarrollo bastante definido. En pocas palabras, se trata de un sistema de telemetr\u00eda que recoge datos de dos fuentes, la centralita del coche y un m\u00f3dulo GPS, para transmitirlo a un servidor donde se almacenan los datos para su posterior tratamiento. En este momento, el tratamiento consiste en dos actividades: representaci\u00f3n gr\u00e1fica de velocidad, revoluciones por minuto y consumo del coche, y geoposicionamiento en mapas en tiempo real. Este es un esquema b\u00e1sico de la plataforma:<\/p>\n<figure id=\"attachment_4085\" aria-describedby=\"caption-attachment-4085\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2017\/01\/Telemetry1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2017\/01\/Telemetry1-400x222.png\" alt=\"Esquema del sistema de telemetr\u00eda\" title=\"Esquema del sistema de telemetr\u00eda\" width=\"400\" height=\"222\" class=\"size-medium wp-image-4085\" \/><\/a><figcaption id=\"caption-attachment-4085\" class=\"wp-caption-text\">Esquema del sistema de telemetr\u00eda<\/figcaption><\/figure>\n<p>El sistema est\u00e1 compuesto por los siguientes elementos:<\/p>\n<ul>\n<li><strong><em>Sonda de captura de datos:<\/em><\/strong> La sonda de captura de datos consiste en una Raspberry Pi que se conecta con la centralita del coche mediante un m\u00f3dulo bluetooth. La centralita del coche se ha equipado, a su vez, con un m\u00f3dulo OBD-II con bluetooth. Esta sonda, de igual manera, dispone de un <a href=\"http:\/\/bitacora.eniac2000.com\/?p=4017\" title=\"Receptor GPS GlobalSat BU-353-S4 en Debian\">m\u00f3dulo GPS<\/a> para proporcionar datos relativos a la posici\u00f3n del veh\u00edculo.<\/li>\n<li><strong>Programa de telemetr\u00eda:<\/strong> En la sonda de posicionamiento he desplegado un programa que recopila informaci\u00f3n de las fuentes anteriores, que he desarrollado en Python. Este programa, en l\u00edneas generales, comprueba el estado de las fuentes de datos antes mencionados, recopila la informaci\u00f3n y la prepara para su transmisi\u00f3n. Para ello, se apoya en un broker MQTT instalado en la propia sonda. Por \u00faltimo, se hace un almacenado local en ficheros csv de la informaci\u00f3n recopilada, junto con una marca de tiempo.<\/li>\n<li><strong>Broker MQTT local:<\/strong> Para realizar la transmisi\u00f3n de datos al servidor de almacenamiento y procesado de datos se hace uso de un broker MQTT local. MQTT es un protocolo ligero de mensajer\u00eda para peque\u00f1os sensores y dispositivos m\u00f3viles ideado por IBM. Est\u00e1 optimizado para realizar la transmisi\u00f3n de datos incluso en redes no confiables y en entornos de alta latencia, por lo que es ideal para delegar en \u00e9l la capa de transmisi\u00f3n de datos del programa anterior, ya que es presumible que el veh\u00edculo pueda encontrarse en situaciones de escasa cobertura o incluso p\u00e9rdida total de la misma, adem\u00e1s de en situaciones en las que la transmisi\u00f3n de datos haya de efectuarse haciendo uso de redes GSM de escasa capacidad. Adem\u00e1s, tiene la ventaja de que produce menos sobrecarga que otros protocolos como HTTP, y (en teor\u00eda) hace un menor consumo de datos. La idea es la siguiente: el programa anterior delega en el broker MQTT el establecer el env\u00edo de paquetes al servidor. El broker MQTT act\u00faa adem\u00e1s como buffer local de los paquetes transmitidos, en caso de p\u00e9rdida o inestabilidad de las comunicaciones. Este buffer local, gracias a una peque\u00f1a base de datos interna, es persistente incluso ante reinicios inesperados de la sonda. El broker MQTT local est\u00e1 sincronizado con otro broker MQTT desplegado en el servidor de recepci\u00f3n de datos, y es capaz de garantizar la correcta sincronizaci\u00f3n, como se ha comentado, incluso en situaciones de p\u00e9rdida total de conectividad y reinicios en la sonda de datos.<\/li>\n<li><strong>Env\u00edo de datos mediante tethering bluetooth:<\/strong> El broker local MQTT es dotado de conectividad a Internet mediante tethering bluetooth con un tel\u00e9fono m\u00f3vil. Si bien a priori ser\u00eda m\u00e1s interesante hacer uso de tethering wifi para esto mismo, hay tres buenas razones para optar por bluetooth: La primera es que al hacer uso de MQTT el volumen de informaci\u00f3n a intercambiar es bastante reducido, por lo que es posible hacer uso de bluetooth para ello, con el consiguiente impacto positivo en el consumo de energ\u00eda necesario para establecer el canal de datos. La segunda es una limitaci\u00f3n f\u00edsica en la sonda. La Raspberry Pi 2 que utilizo tiene s\u00f3lo dos puertos USB, uno usado con el m\u00f3dulo GPS y otro con el m\u00f3dulo bluetooth para conectar con la centralita, por lo que no queda sitio para un m\u00f3dulo WiFi. Y la tercera, es que <a href=\"http:\/\/www.dailymotion.com\/video\/x2p5m7p\" target=\"_blank\">todo es mejor con bluetooth<\/a>. <img src=\"https:\/\/bitacora.eniac2000.com\/wp-includes\/images\/smilies\/mrgreen.png\" alt=\":mrgreen:\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/li>\n<li><strong><em>Servidor de recepci\u00f3n de datos:<\/em><\/strong> El segundo bloque del sistema es el servidor de recepci\u00f3n y an\u00e1lisis de datos. Consiste en l\u00edneas generales en un servidor Graphite donde se almacenan los datos proporcionados por la sonda de captura de datos, y que permite su posterior utilizaci\u00f3n, bien para la representaci\u00f3n de gr\u00e1ficas de dichos datos mediante Grafana, bien para la el geoposicionamiento del veh\u00edculo en tiempo real, con informaci\u00f3n a\u00f1adida del resto de par\u00e1metros proporcionados por la sonda.<\/li>\n<li><strong>Broker MQTT:<\/strong> La comunicaci\u00f3n, como se ha comentado, se realiza mediante un broker MQTT que sincroniza con el broker MQTT de la sonda. Este broker recibe los datos proporcionados por la sonda, y los inyecta, mediante una pasarela desarrollada en Python, en el servidor Graphite. Dado que es posible que la informaci\u00f3n proporcionada por el broker MQTT de la sonda no se reciba en tiempo real debido a posibles cortes en las comunicaciones, se hace uso de la marca de tiempo incluida en cada transmisi\u00f3n de la sonda remota para inyectar los datos en el servidor Graphite con informaci\u00f3n de tiempo de creaci\u00f3n correcta.<\/li>\n<li><strong>Servidor Graphite:<\/strong> El servidor Graphite consolida la informaci\u00f3n proporcionada por la sonda de captura de datos, la almacena en una sistema de base de datos buffer de corta duraci\u00f3n (Carbon) y posteriormente la consolida en una base de datos da larga duraci\u00f3n (whisper).<\/li>\n<li><strong>Servidor Grafana:<\/strong> Los datos consolidados en el servidor Graphite son consumidos por Grafana, software para visualizaci\u00f3n de m\u00e9tricas. Se han creado una serie de gr\u00e1ficas que permiten acceder a la informaci\u00f3n relativa a la velocidad, revoluciones por minuto, entrada de aire en el motor, consumo de combustible y altitud con respecto al mar, as\u00ed como a sus valores medios en un rango de tiempo establecido. Grafana proporciona, adem\u00e1s, la capacidad de integrar estas gr\u00e1ficas en una plataforma de terceros.<\/li>\n<figure id=\"attachment_4080\" aria-describedby=\"caption-attachment-4080\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2017\/01\/mercedes-geotagging.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2017\/01\/mercedes-geotagging-400x270.png\" alt=\"Captura de posicionamiento de veh\u00edculo con datos en tiempo real\" title=\"Captura de posicionamiento de veh\u00edculo con datos en tiempo real\" width=\"400\" height=\"270\" class=\"size-medium wp-image-4080\" \/><\/a><figcaption id=\"caption-attachment-4080\" class=\"wp-caption-text\">Captura de posicionamiento de veh\u00edculo con datos en tiempo real<\/figcaption><\/figure>\n<li><strong>Sistema de geoposicionamiento:<\/strong> El broker MQTT permite, adem\u00e1s, el procesamiento de la informaci\u00f3n proporcionada por la sonda para representar en tiempo real la ubicaci\u00f3n geogr\u00e1fica del veh\u00edculo, as\u00ed como la traza de las posiciones anteriores mediante una l\u00ednea de posici\u00f3n. Adem\u00e1s, se proporciona informaci\u00f3n en tiempo real de los par\u00e1metros proporcionados por la sonda. Este sistema est\u00e1 basado en <a href=\"https:\/\/nodered.org\/\" target=\"_blank\">Node-RED<\/a>, una herramienta desarrollada por IBM para permitir una interconexi\u00f3n sencilla de diversas aplicaciones y dispositivos IoT. Tambi\u00e9n hace uso de OpenStreetMap, mediante la librer\u00eda WorldMap.<\/li>\n<\/ul>\n<p>Todo este sistema lo he compilado en la siguente web para su visualizaci\u00f3n: <a href=\"http:\/\/www.eniac2000.com\/telemetria\" title=\"Telemetr\u00eda\" target=\"_blank\">Telemetr\u00eda (www.eniac2000.com\/telemetria)<\/a><\/p>\n<p>Dado que la informaci\u00f3n mostrada en esa URL proporciona datos en tiempo real, he realizado una captura de datos obtenidos en vivo:<\/p>\n<figure id=\"attachment_4083\" aria-describedby=\"caption-attachment-4083\" style=\"width: 201px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2017\/01\/telemetry-mercedes.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2017\/01\/telemetry-mercedes-201x400.png\" alt=\"Captura del sistema de telemetr\u00eda\" title=\"Captura del sistema de telemetr\u00eda\" width=\"201\" height=\"400\" class=\"size-medium wp-image-4083\" \/><\/a><figcaption id=\"caption-attachment-4083\" class=\"wp-caption-text\">Captura del sistema de telemetr\u00eda<\/figcaption><\/figure>\n<p>&#8230;as\u00ed como un v\u00eddeo en el que se aprecia la informaci\u00f3n, si bien realizando la captura de la informaci\u00f3n desde las dos fuentes de datos separadas, y no desde el mismo portal:<\/p>\n<p><iframe loading=\"lazy\" frameborder=\"0\" width=\"512\" height=\"288\" src=\"https:\/\/www.dailymotion.com\/embed\/video\/x5a079z\" allowfullscreen allow=\"autoplay; fullscreen; picture-in-picture\"><\/iframe><\/p>\n<p>Como comentaba, el sistema est\u00e1 a\u00fan en una fase muy temprana, pero el potencial de mejora es grande. Los principales puntos en los que estoy trabajando son los siguientes:<\/p>\n<ul>\n<li>Mejora en la seguridad de comunicaciones entre brokers MQTT<\/li>\n<li>Mejora en la fiabilidad de la comunicaci\u00f3n OBD-II<\/li>\n<li>Reemplazo del sistema de base datos de larga duraci\u00f3n de Graphite por un sistema NoSQL, presumiblemente un InfluxDB<\/li>\n<li>Dotar de redundancia a los elementos de la plataforma<\/li>\n<li>Proporcionar un sistema de persistencia de la informaci\u00f3n\n\t<\/li>\n<li>Creaci\u00f3n de un portal multiusuario con soporte de m\u00faltiples dispositivos<\/li>\n<li>Otros&#8230; \ud83d\ude42<\/li>\n<\/ul>\n<p>Si bien este proyecto empez\u00f3 como algo personal, con la idea de comprobar cu\u00e1nto consum\u00eda mi coche en los desplazamientos, tengo el convencimiento de que puede convertirse en algo m\u00e1s que en un mero pasatiempo. Esperemos que as\u00ed sea.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Escrib\u00eda en mi entrada anterior que estaba trabajando en un<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13],"tags":[234,745,753,757,828,851,1134,1177,1184,1361,1381,1606,1616],"series":[],"class_list":["post-4077","post","type-post","status-publish","format-standard","hentry","category-informatica","tag-bluetooth","tag-gps","tag-grafana","tag-graphite","tag-ibm","tag-iot","tag-mqtt","tag-node-red","tag-obd-ii","tag-python","tag-raspberry-pi","tag-telemetria","tag-tethering"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/4077","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4077"}],"version-history":[{"count":0,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/4077\/revisions"}],"wp:attachment":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4077"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4077"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4077"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fseries&post=4077"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}