{"id":4769,"date":"2021-04-24T13:24:02","date_gmt":"2021-04-24T12:24:02","guid":{"rendered":"https:\/\/bitacora.eniac2000.com\/?p=4769"},"modified":"2021-04-24T13:24:02","modified_gmt":"2021-04-24T12:24:02","slug":"trazabilidad-de-activos-en-exterior-con-lorawan-chirpstack-node-red-y-una-arquitectura-de-microservicios","status":"publish","type":"post","link":"https:\/\/bitacora.eniac2000.com\/?p=4769","title":{"rendered":"Trazabilidad de activos en exterior con LoRaWAN, Chirpstack, Node-Red y una arquitectura de microservicios"},"content":{"rendered":"<p>Bonito <em>combo<\/em> el del t\u00edtulo de este art\u00edculo, \u00bfverdad? A resultas de algunas actividades que estoy realizando en el trabajo relacionadas con redes IoT industriales, en mi tiempo libre le he dado una vuelta de tuerca al proyecto, para realizar un piloto de trazabilidad de activos en exterior. C\u00f3mo no, basado en el <a href=\"https:\/\/bitacora.eniac2000.com\/?p=4725\" title=\"Despliegue de un servidor LoRaWAN libre con Chirpstack basado en contenedores\" target=\"_blank\">uso de LoRaWAN y Chirpstack, como contaba en un art\u00edculo anterior<\/a>.<\/p>\n<figure id=\"attachment_4772\" aria-describedby=\"caption-attachment-4772\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2021\/04\/trazabilidad-activos-03.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2021\/04\/trazabilidad-activos-03-400x239.png\" alt=\"Arquitectura LoRaWAN\" title=\"Arquitectura LoRaWAN\" width=\"400\" height=\"239\" class=\"size-medium wp-image-4772\" \/><\/a><figcaption id=\"caption-attachment-4772\" class=\"wp-caption-text\">Arquitectura LoRaWAN<\/figcaption><\/figure>\n<p>La cosa es que aprovechando que contaba con una peque\u00f1a infraestructura local de Chirpstack desplegada mediante microservicios, me hice con un dispositivo de Dragino bastante interesante, el <a href=\"https:\/\/www.dragino.com\/products\/lora-lorawan-end-node\/item\/165-lbt1.html\" target=\"_blank\">LBT1<\/a>:<\/p>\n<figure id=\"attachment_4771\" aria-describedby=\"caption-attachment-4771\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2021\/04\/trazabilidad-activos-02.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2021\/04\/trazabilidad-activos-02-400x317.png\" alt=\"Dragino LBT1\" title=\"Dragino LBT1\" width=\"400\" height=\"317\" class=\"size-medium wp-image-4771\" \/><\/a><figcaption id=\"caption-attachment-4771\" class=\"wp-caption-text\">Dragino LBT1<\/figcaption><\/figure>\n<p>Este dispositivo es bastante interesante: integra un m\u00f3dulo GPS que permite obtener su ubicaci\u00f3n precisa, que es trasmitida mediante LoRaWAN para ser posteriormente explotada. Pero cuenta con capacidad Bluetooth, para realizar ubicaci\u00f3n en interiores mediante iBeacons; dispone de un aceler\u00f3metro, de tal manera que el dispositivo tiene capacidad de enviar la se\u00f1al LoRaWAN cuando detecta movimiento y no de manera indiscriminada, con el consiguiente ahorro de bater\u00eda; tiene una bater\u00eda recargable de 1000 mAh (que he podido probar que da para m\u00e1s de una semana de actividad sin necesidad de recarga); y cuenta con un bot\u00f3n que -en su configuraci\u00f3n por defecto- permite pasar al dispositivo a un modo de emergencia, de tal manera que pasa a emitir la se\u00f1al de manera peri\u00f3dica (y no activada por el aceler\u00f3metro, como en el modo normal), y con una codificaci\u00f3n del paquete de datos espec\u00edfica, de tal manera que es posible distinguirlo de una transmisi\u00f3n normal, y actuar en consecuencia.<\/p>\n<p>Estas capacidades, junto con la caracter\u00edstica de integraci\u00f3n HTTP proporcionada por Chirpstack, permiten algo bastante interesante, y es realizar un sistema de monitorizaci\u00f3n de activos en exterior, si lo combinamos con un procesamiento en segundo plano. Para ello, en mi caso, he utilizado Node-Red. <\/p>\n<figure id=\"attachment_4775\" aria-describedby=\"caption-attachment-4775\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2021\/04\/trazabilidad-activos-04.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2021\/04\/trazabilidad-activos-04-400x150.png\" alt=\"Flujo Node-Red para trazabilidad de activos\" title=\"Flujo Node-Red para trazabilidad de activos\" width=\"400\" height=\"150\" class=\"size-medium wp-image-4775\" \/><\/a><figcaption id=\"caption-attachment-4775\" class=\"wp-caption-text\">Flujo Node-Red para trazabilidad de activos<\/figcaption><\/figure>\n<p>La idea general es la siguiente: se establece un punto de entrada desde donde recibir los POST HTTP provenientes de Chirpstack, que nos har\u00e1n llegar cada uno de los eventos provenientes de los dispositivos. Aqu\u00ed realizamos un primer procesado para obtener informaci\u00f3n relevante de la se\u00f1al transmitida (b\u00e1sicamente, latitud, longitud, identificador del dispositivo, cantidad de carga de la bater\u00eda, y si se trata o no de una se\u00f1al de emergencia). Con esta informaci\u00f3n realizamos dos acciones: representar cada objeto definido en la aplicaci\u00f3n Chirpstack y que est\u00e9 enviando se\u00f1al en el mapa, bien con un icono verde si todo va bien, o con un icono rojo si se ha pulsado el bot\u00f3n de emergencia. Adem\u00e1s de esto, se mantiene trazabilidad de los movimiento realizados creando una l\u00ednea con las distintas ubicaciones GPS enviadas por el dispositivo. Todo ello se representa sobre un mapa, que permite definir zonas de calor, y filtrar por cada uno de los objetos que est\u00e9n enviando se\u00f1al. El resultado es algo como esto:<\/p>\n<figure id=\"attachment_4770\" aria-describedby=\"caption-attachment-4770\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2021\/04\/trazabilidad-activos-01.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2021\/04\/trazabilidad-activos-01-400x231.png\" alt=\"Mapa de ubicaciones resultante\" title=\"Mapa de ubicaciones resultante\" width=\"400\" height=\"231\" class=\"size-medium wp-image-4770\" \/><\/a><figcaption id=\"caption-attachment-4770\" class=\"wp-caption-text\">Mapa de ubicaciones resultante<\/figcaption><\/figure>\n<p>El sistema, adem\u00e1s, tiene capacidad para integrarse con sistemas de monitorizaci\u00f3n de terceros, as\u00ed como con sistemas de alerta espec\u00edficos. En mi caso he realizado un procesamiento adicional, que consiste en realizar persistencia de datos para su an\u00e1lisis posterior, en este caso, mediante una hoja de Google Spreadsheet, lo que es interesante de por s\u00ed, y puede dar para otro art\u00edculo.<\/p>\n<p>Este ejemplo de aplicaci\u00f3n tiene bastantes aplicaciones pr\u00e1cticas: realizar seguimiento de activos en una zona exterior de una empresa, seguimiento de personas mayores en zonas urbanas sin coste de transmisi\u00f3n de datos, y con la capacidad de que emitar una se\u00f1al de emergencia en caso de necesidad, o el seguimiento de visitantes en parques naturales y zonas boscosas, ya que como demostr\u00e9 hace alg\u00fan tiempo, <a href=\"https:\/\/bitacora.eniac2000.com\/?p=4442\" title=\"Pruebas de comunicaci\u00f3n LoRaWAN: conseguido enlace de 7,2 km\" target=\"_blank\">es posible cubrir zonas muy amplias en entorno forestal con un despliegue de infraestructuras m\u00ednimo<\/a>. E incluso, que es lo que ten\u00eda en mente, un sistema para seguimiento de ciclistas o senderistas de monta\u00f1a en zonas de monta\u00f1a.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bonito combo el del t\u00edtulo de este art\u00edculo, \u00bfverdad? A<\/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,25,20],"tags":[412,548,996,998,1074,1177],"series":[],"class_list":["post-4769","post","type-post","status-publish","format-standard","hentry","category-informatica","category-trabajo","category-vida-corriente","tag-chirpstack","tag-dragino","tag-lora","tag-lorawan","tag-microservicios","tag-node-red"],"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\/4769","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=4769"}],"version-history":[{"count":0,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/4769\/revisions"}],"wp:attachment":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4769"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4769"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4769"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fseries&post=4769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}