Introduzione
In AIknow, nel corso degli anni abbiamo dovuto gestire connessioni 4G su numerosi dispositivi IoT basati su Linux, dalle soluzioni più semplici ai gateway industriali complessi. La nostra esperienza ci ha portato attraverso un’evoluzione naturale nell’utilizzo degli strumenti di gestione della connettività: partendo dal tradizionale wvdial
fino ad arrivare a NetworkManager
, passando per la scoperta di ModemManager
come strumento fondamentale per il debugging e il monitoraggio.
Questo articolo racconta il nostro percorso, condividendo i problemi che abbiamo incontrato, le soluzioni che abbiamo sviluppato e i criteri che oggi utilizziamo per scegliere lo strumento più appropriato per ogni progetto.
I primi passi: wvdial e l’approccio diretto
Perché abbiamo iniziato con wvdial
Nei nostri primi progetti con connettività 4G, wvdial
sembrava la scelta più naturale: uno strumento semplice, leggero e diretto che utilizzava il protocollo PPP per stabilire connessioni attraverso modem cellulari. La configurazione appariva immediata e la documentazione, seppur limitata, era chiara.
I vantaggi che abbiamo apprezzato
L’utilizzo di wvdial ci ha subito mostrato alcuni vantaggi significativi:
Leggerezza estrema: Il consumo di risorse era minimo, ideale per dispositivi con RAM limitata (64-128MB). Su questi sistemi, wvdial lasciava spazio sufficiente per l’applicazione principale senza compromettere le prestazioni.
Semplicità di configurazione: Un singolo file /etc/wvdial.conf
conteneva tutto il necessario per la connessione. La configurazione era trasparente e facilmente comprensibile. Di seguito un esempio:
[Dialer Defaults] Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 Init3 = AT+CGDCONT=1,\"IP\",\"your.apn.here\",,0,0 Modem Type = Analog Modem ISDN = 0 Modem = /dev/ttyUSB0 Baud = 9600 Phone = *99# Username = your_username Password = your_password New PPPD = yes
Controllo diretto: La possibilità di intervenire direttamente sui comandi AT inviati al modem ci dava un controllo completo sul processo di connessione.
I problemi che ci hanno fatto riflettere
Tuttavia, utilizzando wvdial in progetti reali, abbiamo incontrato limitazioni significative:
Gestione delle disconnessioni: Il punto più critico. wvdial non aveva meccanismi robusti per gestire le disconnessioni automaticamente. Quando la connessione si interrompeva – per problemi di segnale, riavvii di rete dell’operatore o semplicemente timeout – dovevamo implementare script esterni per rilevare la situazione e riconnettere.
Mancanza di astrazione: Ogni cambio di modem o operatore richiedeva modifiche manuali alla configurazione. Non c’era un livello di astrazione che gestisse automaticamente le differenze tra dispositivi.
Debugging complesso: Quando qualcosa non funzionava, dovevamo analizzare manualmente i log PPP e interagire direttamente con il modem tramite comandi AT per capire cosa stava succedendo.
Quando scegliere wvdial
Nonostante i limiti, wvdial rimane la nostra scelta in specifici contesti:
- Dispositivi con meno di 256MB di RAM dove ogni risorsa conta
- Progetti con budget hardware molto contenuti
- Installazioni dove possiamo tollerare brevi interruzioni di servizio
- Situazioni dove abbiamo pieno controllo dell’ambiente e possiamo implementare sistemi di monitoraggio personalizzati
ModemManager per la verifica dello stato del modem
Il problema del debugging
Uno dei maggiori problemi con wvdial era la difficoltà nel diagnosticare problemi di connessione. Spesso dovevamo aprire una sessione seriale diretta con il modem e inviare comandi AT per ottenere informazioni basilari come:
- Qualità del segnale (
AT+CSQ
) - Informazioni sull’operatore (
AT+COPS?
) - IMEI del dispositivo (
AT+CGSN
) - ICCID della SIM (
AT+CCID
) - IMSI della SIM (
AT+CIMI
) - APN configurato (
AT+CGDCONT?
) - Stato del PIN della SIM (
AT+CPIN?
) - IP assegnato alla connessione (
AT+CGPADDR
)
ModemManager come strumento di diagnostica
La scoperta di ModemManager ha rivoluzionato il nostro approccio al debugging delle connessioni 4G. Attraverso mmcli
, abbiamo ottenuto accesso immediato a tutte le informazioni del modem senza dover interagire direttamente con comandi AT.
# Informazioni complete sul modem mmcli -m 0 # Qualità del segnale in tempo reale mmcli -m 0 --signal-get # Informazioni sulla SIM mmcli -m 0 --sim=0 # Stato della connessione mmcli -m 0 --bearer=0
I vantaggi di ModemManager
ModemManager ci ha fornito:
- Astrazione dei comandi AT: Non dovevamo più ricordare la sintassi specifica di ogni modem per ottenere informazioni basilari.
- Informazioni strutturate: I dati venivano presentati in formato leggibile e parsabile, facilitando l’automazione del monitoraggio.
- Compatibilità estesa: Supportava automaticamente una vasta gamma di modem senza configurazioni aggiuntive.
- Integrazione con script: Potevamo facilmente integrare le informazioni di ModemManager nei nostri sistemi di monitoraggio.
L’utilizzo di comandi AT per casi specifici
Nonostante ModemManager coprisse la maggior parte delle nostre esigenze, in alcuni casi dovevamo ancora ricorrere ai comandi AT diretti:
# Accesso diretto al modem per comandi specifici echo "AT+COPS=?" > /dev/ttyUSB2 # Scansione operatori disponibili echo "AT+CGDCONT?" > /dev/ttyUSB2 # Verifica configurazione APN echo "AT+CREG?" > /dev/ttyUSB2 # Stato registrazione rete
I comandi AT rimanevano utili per:
- Configurazioni avanzate specifiche del modem
- Debug di problemi particolari non coperti da ModemManager
- Ottimizzazioni specifiche per certi operatori
- Test di funzionalità sperimentali
L’evoluzione verso NetworkManager: affidabilità e robustezza
Perché abbiamo fatto il salto
Con l’aumentare della complessità dei nostri progetti e la necessità di connessioni più affidabili, le limitazioni di wvdial sono diventate sempre più evidenti. NetworkManager prometteva di risolvere molti dei problemi che avevamo incontrato, offrendo un sistema di gestione delle connessioni più robusto e automatizzato.
I vantaggi che abbiamo immediatamente apprezzato
- Gestione automatica delle connessioni: Il beneficio più immediato è stata la gestione automatica delle riconnessioni. NetworkManager monitora costantemente lo stato delle connessioni e riconnette automaticamente in caso di interruzioni.
- Integrazione con ModemManager: L’integrazione nativa con ModemManager ci ha dato accesso immediato a tutte le informazioni del modem senza configurazioni aggiuntive.
- Supporto hardware esteso: Non dovevamo più preoccuparci delle specificità di ogni modem; NetworkManager gestiva automaticamente le differenze tra dispositivi diversi.
- Configurazione centralizzata: Tutte le connessioni potevano essere gestite attraverso un’interfaccia unificata, semplificando la manutenzione.
- Profili di connessione avanzati: Potevamo configurare connessioni multiple, priorità, failover e altre funzionalità avanzate.
Le sfide che abbiamo dovuto affrontare
- Maggiore consumo di risorse: NetworkManager richiede più RAM e CPU rispetto a wvdial. Su dispositivi con 256MB di RAM, abbiamo notato un impatto significativo sulle prestazioni, soprattutto durante i picchi di attività.
- Complessità di configurazione: Per scenari avanzati, la configurazione diventa più articolata. Configurare failover tra connessioni diverse o integrazioni con VPN richiede una comprensione approfondita dell’architettura di NetworkManager.
- Debugging più stratificato: Quando qualcosa non funziona, dobbiamo investigare l’interazione tra NetworkManager, ModemManager e il kernel. Il debugging richiede conoscenza di più livelli del sistema.
- Dipendenze maggiori: NetworkManager introduce più componenti nel sistema, aumentando la superficie di possibili problemi e la complessità di deployment.
Quando utilizziamo NetworkManager
NetworkManager è diventato la nostra scelta standard, in particolare per:
- Installazioni critiche: Dove l’affidabilità della connessione è prioritaria
- Sistemi complessi: Che richiedono configurazioni di rete avanzate (failover, VPN, bridging)
- Ambienti di produzione: Dove abbiamo bisogno di strumenti robusti di monitoraggio e gestione
Pro e contro della nostra esperienza
wvdial – Vantaggi:
- Consumo di risorse minimo
- Configurazione semplice e trasparente
- Controllo diretto sui comandi inviati al modem
- Ideale per dispositivi con risorse limitate
- Debugging relativamente semplice (una volta compresi PPP e AT)
wvdial – Svantaggi:
- Gestione manuale delle riconnessioni
- Mancanza di astrazione hardware
- Debugging complesso per problemi di connettività
- Necessità di script esterni per robustezza
- Non adatto per ambienti di produzione critici
NetworkManager – Vantaggi:
- Gestione automatica e robusta delle connessioni
- Supporto hardware esteso e automatico
- Integrazione nativa con ModemManager
- Funzionalità avanzate (failover, priorità, profili)
- Strumenti di debugging e monitoraggio integrati
- Adatto per ambienti di produzione
NetworkManager – Svantaggi:
- Maggiore consumo di risorse (RAM e CPU)
- Complessità di configurazione per scenari avanzati
- Più componenti da gestire e potenziali punti di failure
- Curva di apprendimento più ripida
- Overkill per applicazioni semplici
Strumenti di supporto e best practices
Il nostro toolkit di diagnostica
Indipendentemente dallo strumento principale scelto, abbiamo sviluppato un set di procedure di diagnostica che utilizziamo sistematicamente in tutti i progetti:
Verifica dello stato del modem:
mmcli -L
per elencare i modem rilevati dal sistemammcli -m 0
per ottenere informazioni complete sul modem principalemmcli -m 0 --signal-get
per monitorare la qualità del segnale in tempo reale
Controllo delle informazioni SIM:
mmcli -m 0 --sim=0
per verificare IMSI, ICCID e operatore- Comandi AT diretti
AT+CPIN?
per controllare lo stato del PIN AT+CIMI
eAT+CCID
per verifiche alternative di IMSI e ICCID
Test di connettività di base:
- Ping verso DNS pubblici (
ping -c 3 8.8.8.8
eping -c 3 1.1.1.1
) - Verifica di risoluzione DNS (
nslookup google.com
) - Test di connettività HTTP/HTTPS con
curl
Analisi delle interfacce di rete:
ip addr show
per visualizzare tutte le interfacce attiveip route show
per verificare le tabelle di routing- Controllo specifico delle interfacce cellulari (ppp, wwan, usb)
Monitoraggio del traffico dati:
- Analisi dei contatori in
/proc/net/dev
per le interfacce cellulari ifconfig
per statistiche dettagliate di TX/RX- Monitoraggio dell’utilizzo della banda in tempo reale
Debugging avanzato con comandi AT:
AT+CSQ
per qualità del segnale quando ModemManager non è disponibileAT+CGDCONT?
per verificare la configurazione APNAT+CGPADDR
per controllare l’IP assegnato alla connessioneAT+COPS?
per informazioni sull’operatore di rete
Verifica dello stato delle connessioni:
nmcli connection show
per lo stato dei profili NetworkManagernmcli device status
per verificare lo stato dei dispositivi- Analisi dei log di sistema (
journalctl -u NetworkManager
o/var/log/messages
)
Criteri di scelta basati sulla nostra esperienza
Dopo anni di progetti, abbiamo definito criteri chiari per la scelta:
Scegliere wvdial quando:
- RAM disponibile < 256MB
- Budget hardware estremamente limitato
- Connettività semplice senza requisiti di alta disponibilità
- Team con competenze sistemistiche per gestire script personalizzati
- Tolleranza per interruzioni brevi del servizio
- Controllo completo dell’ambiente di deployment
Scegliere NetworkManager quando:
- RAM disponibile > 512MB
- Requisiti di alta affidabilità e disponibilità
- Configurazioni di rete complesse
- Ambienti di produzione critici
- Necessità di strumenti integrati di monitoraggio
- Team con competenze di system administration avanzate
Altre alternative: ConnMan come opzione intermedia
Vale la pena menzionare che esiste anche ConnMan come alternativa intermedia.
Progettato specificamente per sistemi embedded, offre un compromesso interessante tra la leggerezza di wvdial e le funzionalità di NetworkManager.
Tuttavia, la nostra esperienza si è concentrata principalmente sui due strumenti principali per la maggior parte dei nostri casi d’uso.
Conclusioni e raccomandazioni
La nostra evoluzione da wvdial a NetworkManager riflette la maturazione delle nostre esigenze e della complessità dei progetti.
Entrambi gli strumenti hanno il loro posto nel nostro toolkit, e la scelta dipende sempre dai requisiti specifici del progetto.
ModemManager si è rivelato fondamentale indipendentemente dalla scelta principale, fornendo informazioni essenziali per il debugging e il monitoraggio senza dover ricorrere costantemente ai comandi AT diretti.
I comandi AT rimangono uno strumento indispensabile per situazioni specifiche e debug avanzato, anche se ModemManager ha ridotto significativamente la necessità di utilizzarli quotidianamente.
La lezione più importante che abbiamo imparato è che non esiste una soluzione universale: la scelta deve sempre essere guidata dai vincoli reali del progetto, come risorse hardware, requisiti di affidabilità, complessità dell’implementazione.
Per i progetti futuri, continuiamo a valutare nuove soluzioni, ma la combinazione di NetworkManager + ModemManager rimane il nostro standard per la maggior parte delle implementazioni IoT moderne che richiedono connettività 4G affidabile e robusta.
Hai avuto anche tu esperienze simili nella gestione di connessioni 4G su dispositivi IoT, oppure ti serve supporto per configurare la connettività del tuo progetto? Contattaci per condividere la tua esperienza o per ricevere assistenza tecnica specializzata!