Almacenamiento de configuración#

La configuración residente persiste sobre LittleFS como un archivo por funcionalidad de la administración web, cada uno con el nombre de la página que lo posee. Esta referencia resume la mecánica de almacenamiento; para los grupos de campos véase El motor de configuración.

Mecánica#

  • Un archivo por funcionalidad, bajo /storage: system.json, station.json, wireless.json, radio.json, igate.json, brandmeister.json, digi.json, tracker.json, weather.json, gps.json, message.json, winlink.json, query.json. No existe un archivo de configuración combinado.

  • Cargado con cJSON, un archivo a la vez; guardado por un escritor en flujo token a token.

  • Guardado atómico: escribe <nombre>.json.tmp, luego renombra.

  • Cada página guarda solo su propio archivo. La página My Station es la excepción que nombra varias, porque sus espejos de «Use My Station Data» escriben en campos de otros cinco servicios.

  • Ausente, vacío o corrupto → ese archivo se reescribe desde los valores por defecto durante la carga, de modo que cada funcionalidad siempre tiene un archivo y el equipo siempre arranca con una administración web alcanzable.

  • Sin memoria → no se escribe nada y la carga informa el fallo. Una lectura o un parseo que se quedó sin RAM no dice nada sobre el contenido del archivo, así que nunca debe tomar el camino anterior: el lector escanea el texto sin asignar nada para distinguir ambos casos, y solo los bytes genuinamente imparseables se sobrescriben.

  • Los nombres de campo y las claves JSON se mantienen 1:1 con el proyecto de referencia, así que un operador que se mueva entre ambos los reconoce; las claves desconocidas se ignoran y una clave que un archivo no lleva conserva su valor por defecto documentado.

Otros archivos persistentes#

Archivo

Contenido

/storage/telemetry.json

Configuración del canal 0 de telemetría (telemetry_config_t): analógicos A1–A5, digitales B1–B8, parámetros del informe, conmutadores de los mensajes de definición.

/storage/bulletins.json

Los cinco boletines APRS (identificador y grupo del destinatario, texto, RF/INET, intervalo inicial, rampa de decaimiento, caducidad).

/storage/objitems.json

Los cinco objetos/ítems APRS (nombre, posición, símbolo, rumbo/velocidad, comentario, intervalo, indicador permanente).

/storage/telegram.json

Toda la configuración del bot de Telegram: el interruptor de habilitación, el token del bot, el identificador del administrador, la dirección de la Mini App y las listas de usuarios y chats de grupo autorizados.

/storage/winlink_mail.json

Las respuestas que ha devuelto el servicio Winlink, de la más antigua a la más reciente. Los ajustes de la cuenta son las claves wl* de winlink.json; aquí viven solo las respuestas, así que borrarlas nunca toca la configuración.

/storage/telegram_certificate.pem

El certificado raíz (PEM, hasta 8 KB) contra el que el transporte de Telegram verifica el servidor de la API cuando no se compila con el paquete de certificados de ESP-IDF. La ruta es el valor por defecto de CONFIG_TELEGRAM_BOT_CERT_PATH. A diferencia de los archivos anteriores no se crea desde valores por defecto: el operador lo sube desde la página Almacenamiento, y un archivo ausente o inválido lo informa el diagnóstico de arranque del bot.

Todos los almacenes usan el mismo escritor en flujo, cada uno bajo su propio mutex, cada uno con un setvbuf() explícito para evitar una asignación perezosa de un búfer stdio grande a mitad de escritura. El búfer de setvbuf() es un único objeto estático compartido por todos, ya que el cerrojo de escritura de todo el sistema de archivos impide que dos guardados se solapen.

Cada uno de estos archivos, salvo el certificado, se crea desde sus valores por defecto durante el arranque si no existe, así que un primer arranque deja un conjunto completo en flash sin que el operador visite una sola página.

Reset de fábrica#

POST /default (el botón de reset de fábrica de la página Sistema) llama a app_config_factory_reset(), que devuelve la configuración a app_config_set_defaults() y reescribe todos los archivos de sección. Por sí solo no elimina los archivos separados de telemetría/boletines/objitems/ telegram/winlink_mail — esos regeneran sus valores por defecto en el siguiente acceso si se borran desde la página Almacenamiento.

Claves de la interconexión BrandMeister#

Clave

Tipo

Significado

bmEn

bool

Interruptor principal de la interconexión BrandMeister. Apagado por omisión.

bmMonitor

bool

Intención de correr la suscripción mundial u/APBM*. Se fuerza a apagado al cargar cuando inet2rf está activo e inet2rfRangeEn apagado, así un archivo editado a mano no puede saltear el enclavamiento.

bmMsgInetOnly

bool

Rutear los mensajes a destinatarios BrandMeister solo por APRS-IS. Habilitado por omisión; solo puede quitar la pata de RF.

bmGateways

arreglo de 4 cadenas

Indicativos opcionales de estación de entrada para la tercera prueba del clasificador. Un * final compara por prefijo.

inet2rfRangeEn

bool

Habilita el filtro de rango INET→RF. Apagado por omisión.

inet2rfRangeKm

número

Radio del filtro de rango INET→RF en km, 0 = sin límite. Se acota a 0…20038 al cargar.

inet2rfPositionRequired

bool

Rechaza una línea INET→RF que no sea un mensaje y no lleve una posición propia decodificable. Activado por defecto; una línea clasificada como BrandMeister queda sujeta al requisito diga lo que diga esta clave.

inet2rfHeardOnly

bool

Reenvía una línea INET→RF que no sea un mensaje solo cuando su origen se ha oído por RF dentro de igateLocalWindowSec. Activado por defecto.

inet2rfMinIntervalSec

número

Intervalo mínimo, en segundos, entre dos tramas INET→RF que no sean mensajes reenviadas para el mismo origen. 30 por defecto, 0 desactiva el limitador; se acota a 0…3600 al cargar.