Después de poner en funcionamiento mi receptor ADS-B basado en Raspberry Pi a principios de verano, he ido un poco más allá. Algunos de los cambios que he realizado han sido actualizaciones de hardware diseñadas para mejorar tanto el alcance como la confiabilidad del sistema, mientras que otros se han centrado en encontrar usos para los datos que estoy recopilando.
En el lado del hardware, como prometí, cambié la antena de látigo original por una antena mucho más grande de 1090 MHz. Si bien la antena está técnicamente diseñada para la parte superior de un poste, no planeo perforar agujeros en mi techo, por lo que está pegada con cinta adhesiva al interior de una ventana en la parte trasera de mi casa, orientada aproximadamente al norte. Sin duda, ha marcado una gran diferencia, casi duplicando el alcance y mejorando la recepción del tráfico local, incluidos los helicópteros que suben y bajan por el río.
Imagen: Simon Bisson
También aproveché los cambios recientes en el firmware de Raspberry Pi 4 para dejar de ejecutarlo en una tarjeta SD y, en su lugar, estoy usando una unidad SSD M.2 de 240 GB y un adaptador USB 3.0. Al cambiar la configuración de Pi para que admita arranque USB, eliminé el riesgo de falla de la tarjeta SD (mi tarjeta original se desgastó después de solo 3 meses de funcionamiento, lo que implicó una reinstalación y reconfiguración completa) y también le di a Pi un aumento de rendimiento. Configurar el SSD fue la parte más fácil de la transición, ya que encontré un script para manejar la clonación del disco por mí.
Imagen: Simon Bisson
Finalmente, cambié de una simple carcasa de disipador de calor de aluminio sin ventilador a la más sofisticada carcasa Argon One, que mueve los puertos a un diseño más sensato y agrega un ventilador controlado por software además de usar su carcasa como disipador de calor incorporado. También ofrece un botón de encendido, que controla el estado de energía del dispositivo. Mientras estoy ejecutando mi Pi sin cabeza y alimentando datos de la aeronave a múltiples servicios ADS-B, configuré el puente de estado de energía del estuche para que se encienda automáticamente si hay un corte de energía (y conecté su fuente de alimentación a una conexión Wi-Fi habilitada). toma de corriente si necesito reiniciar el dispositivo de forma remota si no puedo usar el shell seguro para iniciar sesión). Me ha gustado tanto este caso que también lo he usado para otra Raspberry Pi que uso como PC de escritorio con Linux.
Todo eso se suma a un receptor ADS-B mucho más potente y confiable. Desde una ventana trasera en Londres, sigo aviones a casi 200 millas náuticas de distancia y obtengo datos de gran parte del tráfico de helicópteros que suben y bajan por el corredor de bajo vuelo del Támesis, tanto militares como civiles.
VER: Tecnología en educación: Los últimos productos y tendencias (PDF gratuito) (República Tecnológica)
La siguiente pregunta fue: ¿puedo hacer más con esos datos?
Había visto que algunas personas ejecutaban varios servicios en las redes sociales para informar sobre el tráfico aéreo local y me preguntaba si sería posible hacer algo similar. Una búsqueda encontró una posible respuesta, un repositorio GitHub relativamente antiguo de la aplicación de Twitter de alguien que parecía estar diseñado para funcionar con una configuración como la mía. El único problema era que no se había actualizado en más de dos años y algunos de los componentes clave ya no eran compatibles.
“¡Ah!” Pensé: “Tal vez pueda actualizar esto”.
Entonces cloné el repositorio de GitHub y comencé a trabajar en la actualización del código. Para ser honesto, realmente no sabía mucho de Python antes de comenzar a trabajar en el código, por lo que algunas de mis correcciones iniciales fueron, para ser honesto, algo del lado complicado de las cosas. Mi primera tarea fue obtener las últimas versiones de las distintas bibliotecas utilizadas en mi Pi. Si bien el administrador de paquetes de Python, Pip, no está instalado de forma predeterminada con la versión Raspberry Pi de Python 3, es bastante fácil de instalar y luego obtener las últimas versiones de la herramienta de automatización web Selenium, la biblioteca de manipulación de imágenes Pillow y Requests REST. Controlador de API y cliente de Twitter Python.
El siguiente problema fue más difícil de abordar. El script que cloné de GitHub dependía de un cliente de controlador web genérico para manejar la automatización de capturas de pantalla en un navegador sin cabeza. Desafortunadamente, ese cliente, PhantomJS, ya estaba obsoleto, por lo que necesitaba encontrar una alternativa que funcionara en hardware ARM. Si bien una opción parecía ser usar Firefox en modo sin cabeza, no pude hacer que funcionara. En lugar de eso, encontré una versión Raspberry Pi del controlador cromado de Chromium y la instalé en mi sistema. Con un poco de trabajo, pude convertir la llamada de Selenium que ejecutaba PhantomJS para tomar capturas de pantalla de la herramienta de mapeo de aviones Dump1090 predeterminada en la imagen de PiAware a una que usaba Chromium. Eso eliminó la principal incompatibilidad entre el script original y el software moderno, y pude hacer que el script publicara capturas de pantalla e información básica de vuelo en Twitter cuando el avión pasaba sobre mi casa.
El siguiente paso fue encontrar una manera de traducir algunos de los datos de la pelea a un formato legible por humanos. Como parte de la especificación ADS-B, todas las aeronaves deben transmitir un código de identificación único de 24 bits que generalmente se muestra en forma hexadecimal, que también es utilizado por aeronaves que utilizan transpondedores Modo-S más simples (a menudo tráfico de aviación militar o general que no No transmitirá datos de vuelo adicionales). Estos códigos son administrados por la OACI, la Organización de Aviación Civil Internacional, y a menudo se los denomina hexadecimals de la OACI.
Como el código hexadecimal es exclusivo de la aeronave, se puede utilizar para buscar detalles de la aeronave en varias bases de datos, incluido el tipo, el registro y la información del operador. Quería agregar esta información a los tweets de mi bot, así que busqué una API pública que me permitiera obtener estos datos. La mayoría son servicios de suscripción, con tarifas basadas en el uso, por lo que no eran realmente adecuados para un proyecto personal.
Sin embargo, finalmente encontré un conjunto simple de API de búsqueda que pude agregar a mi bot. Descubrí dónde necesito extraer la información y creé una nueva función de Python para llamar a las API apropiadas con el código hexadecimal recibido por mi receptor ADS-B. Me tomó un poco de trabajo comprender cómo funcionaba la biblioteca de solicitudes de Python con las API REST, pero pronto pude convertir códigos hexadecimales y mostrar resultados como parte de un tweet. Una nota al margen: la API gratuita que uso no tiene la profundidad de datos que obtendrá de una API de pago, y algunos de los registros están significativamente desactualizados (algunos de los A320 más antiguos de British Airways todavía están codificados como propiedad de British Midland, una aerolínea que cerró en 2012).
Eso me puso en condiciones de enviar mi aplicación clonada a un nuevo repositorio de GitHub, donde podía usar el control de código fuente y las herramientas de edición remota en Visual Studio Code para asegurar el shell en mi Pi y editar el código en mi escritorio de desarrollo antes de realizar cualquier cambio. directamente en GitHub. Tener un editor que funciona directamente en mi código, con una terminal para probar cambios rápidamente y las herramientas para realizar confirmaciones en mi repositorio ha resultado útil, junto con su integración en las herramientas de desarrollo de mi navegador.
Imagen: Simon Bisson
Mi siguiente paso fue cambiar el cliente de mapas de Dump1090 al más nuevo Tar1090, con sus íconos de aeronaves más claros y una nueva barra lateral de información de aeronaves. Instalar Tar1090 desde GitHub fue bastante fácil y rápidamente lo puse en funcionamiento junto con la bifurcación FlightAware de Dump1090 que se usa en la distribución PiAware. Utiliza el mismo formato de datos JSON para aviones rastreados que Dump1090, por lo que no necesitaría escribir un nuevo analizador para extraer detalles de aviones para tweets.
VER: Lenguajes de programación: los desarrolladores revelan lo que aman y lo que odian, y qué es lo que mejor paga
La interfaz de usuario web para el nuevo mapa es muy diferente, por lo que tuve que modificar el código de Selenium para que funcionara con él. Usando las herramientas de depuración F12 en Edge basado en Chromium, pude reducir los elementos de la página necesarios para las interacciones del mapa: restablecerla entre vistas, hacer zoom en un área alrededor de mi antena y hacer clic en un avión para dibujar su ruta de vuelo. y aparecerá la barra lateral de detalles de la aeronave. Entonces todo lo que necesitaba era elegir una resolución adecuada para el navegador virtual y el tamaño de la captura de pantalla resultante.
#BAW2731 G-EUYR Airbus A320-232 British Airways: 0,4 millas de distancia a 2625 pies y 51,2° desde hzn, rumbo W a 202,6 millas/h 16:57:14. #ArribaPutney #ADSB #tar1090 pic.twitter.com/hJALNJ7n5A
— Bot de OverPutney ADS-B (@OverPutney) 18 de octubre de 2020
Imagen: Simon Bisson
¡Muy parecido a esto!
Una vez hecho todo esto, mi solicitud ahora se publica felizmente, enviando a Twitter los detalles de cada avión que pasa por el espacio aéreo sobre nuestra parte del suroeste de Londres. Ha sido un proyecto interesante y también es bueno ver que otras personas encuentran útil mi bifurcación del twitterbot ADS-B original, y el proyecto rápidamente obtuvo su propia bifurcación. Incluso me he visto obligado a dar soporte técnico. Todo lo que queda es sentarse y escribir documentación para ayudar a los usuarios potenciales a ponerse en marcha, además de admitir otro conjunto de API de búsqueda hexadecimal que ofrecen acceso gratuito a aplicaciones ADS-B para aficionados.