GNS3 – che sofferenza!

Da un paio di giorni sto impazzendo per cercare di fare funzionare GNS3 sul mio calcolatore. GNS3 è una piattaforma estremamente potente di simulazione di reti di tipo multivendor.
Si basa su un eseguibile che viene eseguito sul sistema operativo del calcolatore e su una macchina virtuale sulla quale sono eseguite le immagini dei nodi di rete (usando diversi stili di virtualizzazione: dynamips, quemu, virtualbox etc..).

La prima installazione che ho provato ad eseguire è basata su VmWare player, software scaricabile liberamente dal sito di vmware. Dopo una infinità (numerabile) di tentativi ho desistito. Il problema sembra essere dato dalle API VIX, che sono necessarie a GNS3 per interagire con VmWare. Ho trovato diversi articoli in rete e su reddit che sembrano affrontare il problema ma non sono riuscito a risolvere il problema. Ottengo sempre questo errore:

Per questo ho desistito ed ho installato VmWare Workstation (anche di questo software è possibile scaricare un trial libero). Il vantaggio di questo approccio è che non richiede le VIX API, anzi debbono essere accuratamente disinstallate. Provato con Workstation, sono riuscito a fare funzionare tutto al primo colpo: ho caricato le immagini (persino quella Mikrotik, usando questo tutorial).
Attualmente nella TODO – LIST:
– fare una simulazione single-vendor e multi-vendor;
– cercare di importare VRP (sistema operativo dei dispositivi Huawei);
Stay tuned for more happy days!

Ogni scusa è buona!

Recentemente in casa sono comparsi dei simpatici oggettini che sono detti “baby monitor”. Si tratta di una coppia trasmettitore/ricevitore che dovrebbe dare ai neo-genitori, la sensazione di avere una vita normale, potendo ascoltare da remoto vagiti e gemiti dell’infante.
Non si tratta di una invenzione nuova: ricordo perfettamente che “tanti ani fa” lavoravano in FM a 29700kHz. Si potevano ascoltare molto facilmente con ricevitore, davano parecchio fastidio alle automobiline radiocomandate e li ricevevano anche i walkie-talkie giocattolo (che erano in AM).

I baby-monitor di adesso hanno dimensioni molto contenute, antenne interne e batterie ricaricabili. Per intenderci una cosa di questo tipo. Leggendo le specifiche si apprezza la frequenza di funzionamento compresa tra 1800MHz e 1900MHz, in piena banda DECT. In effetti leggendo il manuale:
– Trasmissione vocale tramite sistema basato su tecnologia digitale DECT.
– Range operativo in campo aperto senza ostacoli di circa 300 metri.
DECT è uno standard che nasce per la telefonia cordless che prevede l’uso di codec audio a 32kbps e 64kbps (G726,G722) su 10 canali nella banda 1800MHz, 1900MHz. Il layer fisico usa FDMA/TDMA con TDD. La modulazione usata è GFSK ma può implementare anche modulazioni più aggressive.

In rete ho trovato un interessante articolo con questo titolo: “RE-DECTED: AN RTL-SDR DECT DECODER”. Nell’articolo si fa riferimento ad un codice contenuto su git-hub: re-DECTED. Il sistema è costruito attorno a Gnuradio e richiede un hardware in grado di sintonizzare i 1900MHz. Per questo è consigliato l’uso di un SDR basato su E4000, il compianto tuner della Elonics o di un ricevitore generico in grado di lavorare a 2.4Ms/s. Anche AIRSPY mini è tagliato fuori: arriva fino a 1700MHz. Pertanto ho deciso di modificare il codice per farlo lavorare con ADALM PLUTO.
Il codice elaborato da “znuh” prevede l’uso di diversi elementi:
– un eseguibile C dectrcv.c che riceve i dati dalla interfaccia localhost, visualizza i frames ricevuti e li redirige alla interfaccia dummy0;
– il codice python che avvia una configurazione su GNURADIO che esegue la ricezione del segnale RF;
– il codice GNURAIO è nel file dectrx.grc che può essere aperto anche con GNURADIO.

Il primo step è modificare il codice grc per introdurre il nuovo “sdr source” adalm pluto. Il primo problema è che il PLUTO non campiona a 2.4Ms/s, ma a 3Ms/s. Il blocco di ricezione invece vuole proprio questo valore. Pertanto è necessario modificare il “rational resampler”. Nella formulazione originale il flusso a 2.4Ms/s viene interpolato per 24 e decimato per 25, ottenendo 2304000. Per avere 2.4Ms/s a partire da 3Ms/s occorre moltiplicare per 0.8, ovvero interpolare per 4 e decimare per 5.

Schema a blocchi originale, credit a znuh
Schema a blocchi modificato per Adalm Pluto

Una volta effettuata la modifica non resta che avviare nella sequenza giusta i software e godersi l’output con “wireshark”. Per creare l’interfaccia dummy in un sistema Ubuntu è meglio seguire questo tutorial.

Output per programma in C, credi znuh
Output del programma GRC, modificato per vedere anche la banda base.
Output di Wireshark, con i pacchetti DECT.

Si potrebbe decodificare anche l’audio ma, sinceramente, non ne ho la minima voglia!
Il nuovo GRC si può scaricare da qui.

rtl_433

RTL_433 è un progetto che ho scoperto per caso, navigando senza rotta in giro per la rete. Il sito di riferimento è su github. Si tratta di un simpatico programmino che rileva la presenza di una chiavetta SDR lo sintonizza a 433,920 MHz e si mette in ascolto su una finestra di 250kS/s. In questa fetta di spettro sono allocati sensori e telecomandi a bassa potenza. In particolare le stazioni meteo che hanno sensori wireless usano la modulazione ASK per trasmettere i dati al concentratore.

Universal Radio Hacker alle prese con il segnale in banda base.

Il programma rtl_433 riesce a demodulare i segnali dei sensori ed a interpretare il protocollo ed i dati da esso trasmessi. La cosa è molto interessante soprattutto considerando che i sensori sono dispositivi di debole potenza ed il loro raggio di azione è molto limitato. Pertanto, a meno di installazioni piuttosto bizzare, i dati ricevuti rispecchiano le condizioni meteo della zona in cui sono posizionati.
Il programma si presta bene a “sostituire” una stazione meteo, sfruttando quella di qualche ignaro vicino o consente di confrontare la propria stazione con quelle commerciali.

L’installazione del sistema è banalissima, basta compilare il sorgente scaricato da github ed eseguire il binario rtl_433. Nella mia installazione ho dovuto aumentare la frequenza di campionamento in quanto mi sono reso conto che c’erano diversi sensori “lontani”. Pertanto adesso il sistema lavora a 1024kS/s.

Posizione dei sensori nella banda 433MHz.

Collegata la chiavetta ad una antenna diskona, è iniziata la festa. I segnali dei sensori sono decodificati facilmente ed il programma restituisce un sacco di informazioni utili, anche dal punto di vista comunicazionisitico: SNR – RSSI – NOISE.

A questo punto l’appetito viene mangiando: come fare per immagazzinare i dati ricevuti in un database (MariaDB) in modo da potere rendere in forma grafica alcuni parametri?
In rete ho trovato questo interessante progetto in Python. Ho quindi preso spunto da questo script per cercare di combinare qualche cosa in Python. Ne è venuto fuori uno script che immagazzina tutti i dati nel database e registra i dati grezzi in formato JSON su un file. A corollario di questo ho anche scritto una serie di script php che consentono di accedere ai dati in forma tabulare e di rappresentare l’andamento dei parametri fisici (temperatura, umidità) e radioelettrici (rssi,snr,noise) in funzione del tempo.

Sensori ricevuti e parametri, in forma tabulare.

Grafico dei parametri fisici e radioelettrici:

Andamento della temperatura.

Questa immagine è molto interessante. Mostra l’andamento della temperatura nel tempo. Il fatto è che… le minime sono coerenti con quanto misurato anche da altri sensori. Le massime sono completamente sballate (a gennaio è improbabile raggiungere i 36 gradi). Morale della favola? Il sensore è probabilmente installato al sole, in un contenitore di plastica.

RSSI nel tempo.

Da casa riesco a ricevere una stazione “dignitosa” marca Fine Offset. Penso sia una cosa di questo tipo. Posso confrontare la temperatura rilevata dalla stazione commerciale e la mia: c’è un ottimo accordo di notte. Di giorno c’è qualche discrepanza: 11.7 mia contro 8.8 commerciale ma non conosco l’esatta ubicazione della stazione. Sicuramente il mio schermo solare deve essere perfezionato: apertura sul fondo in primis, ventilazione forzata in secundis.
Chissà cosa viene fuori ad installare il sistema sulla torre di ingegneria?

Nuovo server, considerazioni.

Alcuni giorni addietro, ho scritto un posto sul “nuovo” serve domestico, ricavato da un portatile Dell XPS 1340. A distanza di due giorni, ho analizzato i dati raccolti dall’ottimo LibreNMS.

La macchina ha in esecuzione un web server (utilizzato prevalentemente in locale), un database MariaDB (immagazzina tutti i dati meteo e dei sensori che raccolgo in casa), LibreNMS (chi non ha un sistema di network management system in casa?) e, da poco, una istanza di rtl_433.

I dati di utilizzo delle CPU non sono molto incoraggianti. Il sistema è piuttosto “carico”, soprattutto a causa di rtl_433 che, lavorando con un sample rate di 1024k, fa sudare un po’ la cpu.

Carico delle CPU (core 1 e core 2).

Nulla di preoccupante, visto che non prevedo di installare altri servizi molto impegnativi (farci girare uno spyserver sarebbe follia), solo che “speravo in migliori performances”. Ciò che mi preoccupa è la temperatura di lavoro della CPU: un portatile rispetto ad un server ha una circolazione di aria meno efficiente, in quanto non è previsto che sia accesso 24×7. Pertanto le temperature sono elevate:

Andamento della temperatura per Core, nel tempo.

Questo dato mi preoccupa, soprattutto in vista dell’estate. Il server sarà posizionato in soffitta, dove l’aria è molto calda in estate. Rischio la frittura, ma correrò il rischio, dotando il portatile di una importante supporto alla dissipazione di calore: una bella ventola a 220V. Il flusso di aria investirà il portatile completamente in modo da rimuovere calore da ogni parte. Se poi le cose andranno male, valuterò la possibilità di dotarmi di un calcolatore tipo HP8300elite, magari con 16GB di ram. Intanto… run baby run!

Aggiornamento @home!

Gli eventi del mese di dicembre sono stati veramente importanti per la mia vita. Ma questo è un blog in cui non tratto molto volentieri le mie vicende personali. Pertanto… la permanenza a casa ha comportato che io mi sia finalmente reso conto che l’attuale “server” di casa è arrivato alla frutta.

Attualmente il sistema domestico “gira(va)” su una Cubieboard 2, un aggeggio hardware poco documentato e meno supportato. Dopo lunghe peripezie sono riuscito a farlo funzionare “bene” con notevoli difficoltà per utilizzare in modo dignitoso le GPIO. Ultimamente il dispositivo ha dimostrato una certa instabilità: il web server restituisce “connection refused” e, dopo il riavvio, non viene caricata la shell. Probabile che anche la SD sia arrivata alla frutta, ma anche le risorse di sistema sono allo stremo. Il database con gli eventi meteo è sempre più grande, vorrei implementare anche un ricevitore per i sensori che operano a 433 MHz (vedi altro post). Non è possibile andare avanti con questo hardware, pertanto ho preso una decisione drastica: nuovo server.

L’ideale sarebbe stato prendere un computer refurbished (tipo HP 8300) come quello che sto usando (da un anno) in ufficio. Grandi prestazioni, ottima robustezza, grande silenziosità. Solo che adesso 200 euro per un simile sistema non li voglio spendere. Pertanto l’idea: utilizzare il vecchio portatile Dell XPS13 (1340) del 2009. Il monitor è praticamente andato (funziona solo tenendo lo schermo aperto a 95,33°, ma la cpu funziona bene, ha 8GB di ram e 2 USB 2.0. La CPU è un dual core, non ci farò sicuramente virtualizzazione ma per lo scopo è ottimo. Ingredienti: un nuovo alimentatore ed un pacco batteria.

Proprio ieri sera ho terminato la migrazione dei sistemi, con qualche grattacapo per fare funzionare mailutils. Adesso devo trovare un modo per aggiungere delle GPIO al portatile, in modo da potere controllare dei relè ed avere degli ingressi analogici e digitali magari consultabili in Python. Ci sto lavorando… piano piano!

Linux: ciclo for su nomi con spazi

Mi è successo di dovere eseguire delle operazioni su una lunga serie di files contenuti in una directory condivisa con samba. Per semplificarmi la vita (ricordo che non sono un programmatore…) ho deciso di popolare un array con il path dei files e di scorrerlo per eseguire le operazioni su di essi.

I primi problemi sono nati in fase di parsing dei nomi dei files: se sono presenti degli spazi samba li esporta inserendo i nomi tra “apici singoli”. Inoltre, quando il nome viene processato, ogni sezione del nome tra due spazi è considerata come un elemento dell’array.

Ho trovato delle indicazioni piuttosto interessanti su questo sito: si parla di ridefinizione del Internal field separator ($IFS). Si tratta di una variabile di sistema che definisce il carattere o i caratteri che sono utilizzati per separare una stringa in sottostringhe. Tipicamente è impostato come “spazio” o “tab” o “newline”. In ambiente Linux è impostato a “spazio”. Ridefinire questa variabile consente di istruire il sistema a non considerare lo spazio come separatore. 

Una volta che la variabile è stata ridefinita, lo spazio non è un separatore ed i nomi files non vengono “spezzettati” in tanti frammenti. Importante ricordare che la variabile deve essere reimpostata al valore originale prima che lo script termini.

SAVEIFS=$IFS
IFS=$(echo -en “\n\b”)
for i in `ls -ld $MOUNT_POINT1/* | awk ‘{ print substr($0, index($0,$9)) }’ `
do
ARRAY_FOLDER[ARRAY_INDEX_FOLDER]=$i
ARRAY_INDEX_FOLDER=$[ $ARRAY_INDEX_FOLDER+1]
done
IFS=$SAVEIFS

Le nuove gomme invernali

Primo mese di utilizzo delle nuove gomme invernali che hanno rimpiazzato le Kuhmo. La preferenza è andata alle Matador MP92 Sibir Snow che mi sono state consigliate dal mio gommistsa di fiducia: Gommauto di Paolucci.

Avevo montato in passato le Matador invernali su una Fiat 600 ed ero rimasto positivamente impressionato dalla loro trazione sulla neve fresca. Ad un mese dal loro montaggio sul Jimny sono davvero contento della scelta. Il Jimny è una macchina notoriamente difficile da tenere in strada: trazione posteriore, motore che spinge quando entra in coppia, retrotreno molto leggero. Questi pregi si traducono in sottosterzo in ingresso curva e sovrasterzo in uscita, con frequenti scodate e qualche testacoda.

Le Sibir si stanno comportando benissimo sul bagnato, sono davvero sorpreso della loro capacità di aderenza e resistenza all’acquaplaning. In questi giorni di pioggia, non mi hanno mai messo in difficoltà ed il loro comportamento è sempre prevedibile. Sull’asciutto si sente un po’ la morbidezza della carcassa, con un po’ di incertezza nell’ingresso curva. Rispetto alle vecchie gomme, un altro pianeta. Vediamo come si comporteranno sul lungo periodo!

Vista dello pneumatico. Percorsi meno di 1000km

I regali… quelli belli!

Un amico che lavora nel campo della radiotecnica professionale mi ha omaggiato di alcuni fondi di magazzino. Ben conoscendomi mi ha detto: “io devo pulire il magazzino, ho trovato delle cose che ti possono piacere…”:
Bingo!!

La famiglia al completo, pronta per il set fotografico.

Da sinistra verso destra:
4CX5000A – 3CX3000A7 – YC-236+EI

  • 4CX5000A
  • Tetrodo di potenza raffreddato ad aria;
  • Massima frequenza 110MHz;
  • Potenza 10kW;
  • 3CX3000A7
  • Triodo di potenza raffreddato ad aria;
  • Massima frequenza 110MHz;
  • Potenza di uscita 5.5kW in classe C;
  • YC-236
  • Triodo di potenza raffreddato ad aria;
  • Massima frequenza di uscita 250MHz;
  • Potenza di uscita 2kW;

I data sheet possono essere scaricati da questi link:

Un disco nuovo… quasi

Nel 2015 ho acquistato un bellissimo NAS della QNAP che monta dei dischi WDC fabbricati nel gennaio 2015. Non ho MAI avuto un problema sui dischi, tutto lo S.M.A.R.T. è a posto, non ci sono errori o cali di prestazioni.

Visto che la capacità del sistema è agli sgoccioli e che i dischi hanno “girato” per 3 anni, ho deciso di rimpiazzare le unità. La strategia prevede di acquistare un disco ogni 4-6 mesi, in modo che non siano perfettamente coevi.

Ordino il disco su Amazon, da un venditore del quale non farò il nome. Arriva l’unità perfettamente imballata. La monto, faccio il rebuild dell’array e tutto va bene.

Oggi mi arriva una mail minacciosa del NAS: il disco nell’unità 1 ha un valore smart non corretto e viene marcato come anomalo. Si tratta proprio del disco “nuovo”. Poco male, impreco una buona 40ina di minuti, avvio la procedura di reso sul sito e metto il disco vecchio che (intelligentemente) avevo conservato nel cassetto.

Il disco che mi hanno venduto… è vecchio (più vecchio di quelli che ho installato).

Mai più hard disk tramite Amazon: si va in negozio e si contratta!

Ormai… solo meteo

Pare che io riesca ad aggiornare il blog solo con note meteo ultimamente.

Interessante il calo generalizzato della temperatura, con notevole differenza tra minima e massima. Siamo passati dai comodi 18 gradi di massima ad 8 nell’arco di 8 giorni.

Le minime sono scese moltissimo in questi ultimi giorni. Siamo arrivati 2.4 gradi il giorno 30 alle ore 03:24. Le massime non hanno superato i 14 gradi. Il cielo sereno del 29 si è fatto sentire con una differenza di temperatura di 9 gradi. Se continua di questo passo rischiamo qualche brinata. E’ ora di montare la serra in giardino (sarebbe anche carino sensorizzarla ad avere un po’ di tempo…)