Archiviazione della configurazione#

La configurazione residente persiste su LittleFS come un file per funzionalità dell’amministrazione web, ciascuno con il nome della pagina che lo possiede. Questo riferimento riassume la meccanica di archiviazione; per i gruppi di campi vedi Il motore di configurazione.

Meccanica#

  • Un file per funzionalità, sotto /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. Non esiste un file di configurazione combinato.

  • Caricato con cJSON, un file alla volta; salvato da uno scrittore in streaming token per token.

  • Salvataggio atomico: scrive <nome>.json.tmp, poi rinomina.

  • Ogni pagina salva solo il proprio file. La pagina My Station è l’eccezione che ne nomina diverse, perché i suoi specchi «Use My Station Data» scrivono in campi di altri cinque servizi.

  • Mancante, vuoto o corrotto → quel file viene riscritto dai valori predefiniti durante il caricamento, così ogni funzionalità ha sempre un file e il dispositivo si avvia sempre su un’amministrazione web raggiungibile.

  • Senza memoria → non viene scritto nulla e il caricamento segnala l’errore. Una lettura o un’analisi rimasta senza RAM non dice nulla sul contenuto del file, quindi non deve mai prendere la strada precedente: il lettore esamina il testo senza allocare nulla per distinguere i due casi, e solo i byte genuinamente non analizzabili vengono sovrascritti.

  • I nomi dei campi e le chiavi JSON sono mantenuti 1:1 con il progetto di riferimento, così un operatore che si sposta tra i due li riconosce; le chiavi sconosciute vengono ignorate e una chiave che un file non porta conserva il suo predefinito documentato.

Altri file persistenti#

File

Contenuto

/storage/telemetry.json

Configurazione del canale 0 di telemetria (telemetry_config_t): analogici A1–A5, digitali B1–B8, parametri del rapporto, interruttori dei messaggi di definizione.

/storage/bulletins.json

I cinque bollettini APRS (identificativo e gruppo del destinatario, testo, RF/INET, intervallo iniziale, rampa di decadimento, scadenza).

/storage/objitems.json

I cinque oggetti/item APRS (nome, posizione, simbolo, rotta/velocità, commento, intervallo, flag permanente).

/storage/telegram.json

L’intera configurazione del bot Telegram: l’interruttore di abilitazione, il token del bot, l’identificativo dell’amministratore, l’indirizzo della Mini App e gli elenchi di utenti e chat di gruppo autorizzati.

/storage/winlink_mail.json

Le risposte che il servizio Winlink ha rimandato, dalla più vecchia alla più recente. Le impostazioni dell’account sono le chiavi wl* di winlink.json; qui vivono solo le risposte, quindi cancellarle non tocca mai la configurazione.

/storage/telegram_certificate.pem

Il certificato radice (PEM, fino a 8 KB) con cui il trasporto Telegram verifica il server dell’API quando non è compilato con il bundle di certificati di ESP-IDF. Il percorso è il valore predefinito di CONFIG_TELEGRAM_BOT_CERT_PATH. A differenza dei file precedenti non viene creato dai predefiniti: l’operatore lo carica dalla pagina Archivio, e un file mancante o non valido viene segnalato dalla diagnosi di avvio del bot.

Tutti gli archivi usano lo stesso scrittore in streaming, ciascuno sotto il proprio mutex, ciascuno con un setvbuf() esplicito per evitare un’allocazione pigra di un grande buffer stdio a metà scrittura. Il buffer di setvbuf() è un unico oggetto statico condiviso da tutti, dato che il gate di scrittura dell’intero filesystem impedisce a due salvataggi di sovrapporsi.

Ognuno di questi file, tranne il certificato, viene creato dai suoi valori predefiniti durante l’avvio se non esiste, così un primo avvio lascia un insieme completo in flash senza che l’operatore visiti una sola pagina.

Reset di fabbrica#

POST /default (il pulsante di reset di fabbrica nella pagina Sistema) chiama app_config_factory_reset(), che riporta la configurazione a app_config_set_defaults() e riscrive tutti i file di sezione. Di per sé non rimuove i file separati di telemetria/bollettini/objitems/telegram/winlink_mail — quelli rigenerano i predefiniti al prossimo accesso se cancellati dalla pagina Archivio.

Chiavi dell’interconnessione BrandMeister#

Chiave

Tipo

Significato

bmEn

bool

Interruttore principale dell’interconnessione BrandMeister. Disattivato per impostazione predefinita.

bmMonitor

bool

Intenzione di usare la sottoscrizione mondiale u/APBM*. Forzato a disattivato al caricamento quando inet2rf è attivo e inet2rfRangeEn disattivato, così un file modificato a mano non può aggirare l’interblocco.

bmMsgInetOnly

bool

Instrada i messaggi per destinatari BrandMeister solo via APRS-IS. Abilitato per impostazione predefinita; può soltanto togliere la tratta RF.

bmGateways

array di 4 stringhe

Nominativi facoltativi di stazione di ingresso per il terzo test del classificatore. Un * finale confronta per prefisso.

inet2rfRangeEn

bool

Abilita il filtro di distanza INET→RF. Disattivato per impostazione predefinita.

inet2rfRangeKm

numero

Raggio del filtro di distanza INET→RF in km, 0 = illimitato. Limitato a 0…20038 al caricamento.

inet2rfPositionRequired

bool

Rifiuta una riga INET→RF che non sia un messaggio e non porti una posizione propria decodificabile. Attivo per impostazione predefinita; una riga classificata come BrandMeister e soggetta al requisito qualunque cosa dica questa chiave.

inet2rfHeardOnly

bool

Inoltra una riga INET→RF che non sia un messaggio solo quando la sua origine e stata ascoltata in RF entro igateLocalWindowSec. Attivo per impostazione predefinita.

inet2rfMinIntervalSec

numero

Intervallo minimo, in secondi, tra due trame INET→RF che non siano messaggi inoltrate per la stessa origine. 30 per impostazione predefinita, 0 disattiva il limitatore; limitato a 0…3600 al caricamento.