El libro de vuelo desde un CSV: Litchi y Airdata sí, DJI no, y el motivo no es la dificultad
Qué saca la importación de un registro de vuelo, qué se niega a adivinar, y las seis trampas que se midieron contra ficheros de verdad.
Las horas del libro de vuelo no son un adorno: son de donde sale el número que decide cuándo le toca revisión a una aeronave. Y hasta hace poco se tecleaban una a una, con el registro del propio aparato midiendo lo mismo al lado. La pregunta nunca fue si usarlo, sino de quién es el código que lo lee y qué ficheros entran.
Dos formatos, y el tercero es una decisión de despacho
Entran el CSV de Litchi y el de Airdata. Los registros propios de DJI se quedan fuera, y no por dificultad: desde la versión trece de su formato van cifrados con AES, y las llaves se piden a la API de DJI con una credencial de su portal de desarrolladores. Eso es un alta, unos términos que aceptar y un tercero del que depender para leer un fichero que es del usuario. Es una decisión de negocio y va antes del código, no después.
Y lo que cuesta se dice: los dos formatos son exportaciones, así que quien no abra ninguna de las dos herramientas todavía no tiene nada que importar.
El analizador es nuestro. La biblioteca libre que hace esto es AGPL-3.0, y su cláusula de interacción remota se dispara al servirle su interfaz a un cliente, así que integrarla obligaría a publicar LOWLEVEL entero bajo esa licencia. Levantarla en local como banco de pruebas para comparar qué campos saca es otra cosa —el uso privado no lo restringe— y es lo que se hizo antes de escribir una línea.
Un formato no es una implementación. Los dos CSV son una fila por muestra con la unidad escrita en la cabecera.
Propone, no crea
La importación lee el fichero y no escribe nada. Devuelve la fecha, la hora de inicio y de fin, la duración, la distancia máxima al punto de despegue, la distancia recorrida, la altura máxima sobre el despegue y la traza; la fila la sigue creando una persona con el formulario de siempre, ya relleno.
El registro sabe cuándo y dónde. No sabe con qué aeronave, para qué rodaje ni con qué encargo. Un importador que creara filas llenaría el libro de vuelos que nadie ha revisado, y de ese libro salen las horas de mantenimiento.
Tampoco tiene puerta de plan, y no debe tenerla: el libro de vuelo y el de mantenimiento no se cobran en ninguno de los cuatro planes, porque cobrar por planificar un vuelo dentro de la norma empuja a volar sin planificar. Lo que hay es una frontera técnica —veinte megas y doscientas mil muestras, igual en los cuatro— que no es un cupo: no se cuenta, no se acumula y no se reinicia el día uno. El número sale de medir: a diez muestras por segundo, una batería de veinticinco minutos son unas quince mil filas y unos cinco megas y medio.
El fichero no se guarda
Se queda la traza simplificada —ciento veinte vértices como mucho, medidos en setenta y cinco a ochenta y dos caracteres, en torno al 0,006% de lo que pesa el CSV— y los números. El CSV no viaja a ningún almacén.
Un registro de vuelo dice dónde estuvo alguien y a qué hora, así que lo que no se guarda es lo mejor protegido que hay. Y lo que sí se guarda cae con la cuenta, sin objeto que barrer ni huérfano que buscar.
Seis trampas, todas medidas contra ficheros de verdad
- Las primeras filas valen cero y cero. Los dos exportadores escriben muestras desde antes de que haya enganche de GPS. Darlas por buenas manda la traza a la isla Null y convierte un vuelo de cuatrocientos metros en uno de cinco mil kilómetros.
- La unidad va en la cabecera y por defecto no es métrica. Los dos escriben pies y millas por hora salvo que su dueño cambie la preferencia, y leer una altura en pies como metros la multiplica por 3,28. Una unidad desconocida deja hueco y lo dice, en vez de inventar un número en la unidad equivocada.
- La hora local manda sobre la UTC, y a falta de local se avisa. La asimetría es deliberada: dar por local algo que era UTC enseña horas equivocadas sin decirlo; al revés, horas correctas y una nota. Un fallo recuperable contra uno que no lo es.
- Una fecha con barras y los dos primeros números por debajo de trece no se adivina. No hay forma de saber si es el tres de abril o el cuatro de marzo, así que se rechaza en vez de elegir. Con uno por encima de doce, sí se lee.
- Litchi exporta dos cosas con extensión CSV: el registro de vuelo y la misión de puntos de paso. La segunda se reconoce y se rechaza con su nombre, porque «no reconocemos este fichero» delante de un CSV de Litchi se lee como un fallo nuestro.
- La distancia se mide desde el primer enganche, que es consecuencia de la primera trampa. Sale por debajo de la columna que declara el propio fichero, por decenas de metros, y se prefiere igual porque es la misma fuente que la traza que se dibuja: con dos fuentes para un número acaban discrepando y nadie sabe cuál mira.
Hay una séptima que no es de datos sino de forma. El algoritmo que simplifica la traza es recursivo y su profundidad la decide la forma del camino, no su tamaño: con quince mil muestras eso no es un dibujo feo, es una excepción. Se diezma a cuatro mil puntos antes de simplificar, y el orden importa.
Lo que no se extrae, y por qué
La aeronave no sale: ninguno de los dos formatos lleva el número de serie en el CSV, así que la elige el piloto. Adivinarla por el modelo sería inventarse la fila que decide las horas de mantenimiento.
La batería tampoco: el libro no tiene dónde ponerla, y su salud es la otra mitad, la que sí necesita el registro cifrado. Y la altura sobre el nivel del mar se descarta aunque Airdata la traiga: se guarda la de sobre el punto de despegue, que es la que significa algo aquí, y mezclarlas daría una cifra con aspecto de altitud aeronáutica sin serlo.