Come ottenere l'ora esatta senza internet

sezione dedicata ai sistemi operativi Linux

Come ottenere l'ora esatta senza internet

Messaggio da leggereda root » 22/01/2017, 19:41

Se bisogna ottenere la data e l'ora esatta, ma non si dispone di un collegamento ad internet, ad esempio nel mio caso si tratta di un orologio digitale Linux (fatto con un vecchio Raspberry) con audio che batte le ore e le mezz'ore (campana Big Ben), come fare?

Ecco la mia idea estemporanea, venutami dopo una notte insonne :)

Semplice, basta comperare un adattatore DVB-T USB da pochi euro e prendere la data da una delle emittenti TV che trasmettono nella nostra zona, come la RAI ad esempio, l'ora che trasmettono e' molto precisa.

Non serve un S.O. desktop, si fa tutto da riga di comando, per cui va bene anche per un server.

Quasi tutti i chiavini USB DVB-T di nuova generazione sono riconosciuti automaticamente dai sistemi Linux, eventualmente se cosi' non fosse, ci sono molte guide in rete, cercatene una per il vostro sistema linux e per il vostro modello, installate il firmware, collegate il chiavino e collegateci il suo antennino.

La verifica che il chiavino e' correttamente installato la fate con il comando lsusb, il risultato e' qualcosa del genere:

Codice: Seleziona tutto
Bus 001 Device 008: ID 15a4:9016 Afatech Technologies, Inc. AF9015 DVB-T USB2.0 stick


Poi occorre installare i seguenti pacchetti:

sudo apt-get install dvb-apps w-scan

Lanciare quindi il comando che ricerca le stazioni TV/RADIO che trasmettono nella nostra zona e li memorizza in un file:

w_scan -M -ft -c IT -E 0 -t 2 > /etc/channels.conf

ad operazione terminata, aprite il file appena creato "/etc/channels.conf" e verificate che ci sia almeno uno dei canali RAI, ad esempio Rai 2,

ecco la riga corrispondente nel mio file:
Codice: Seleziona tutto
Rai 2 :482000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_5_6:FEC_NONE:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:513:651+695+696:3402


A noi interessa il nome della stazione prima dei due punti ":", in questo caso Rai 2

quindi diamo il seguente comando per sintonizzare il DVB-T su Rai 2:

zap "Rai 2" &

nota: e' opportuno inserire questo comando in "/etc/rc.local" dato che al riavvio il sintonizzatore perdera' la stazione.

quindi ogni qual volta ci servira' ottenere la data e ora esatta bastera' lanciare il comando:

dvbdate

esempio:

root@InetRadio:~# dvbdate
Sun Jan 22 16:54:53 2017


Quindi per settare l'ora del dispositivo con quella trasmessa dal canale TV, ecco il comando magico:

dvbdate --set --force

Per il Raspberry occorre settare anche il timezone dato che sembra ci sia un bug sul comando dvbdate.

quindi i due comandi da dare in sequenza sono:

dvbdate --set --force
date -s "1 hour"


quindi uno script per aggiornare l'ora puo' essere questo:

#!/bin/sh -e
dvbdate --set --force
date -s "1 hour"
Maurizio
Avatar utente
root
Amministratore
 
Messaggi: 349
Iscritto il: 10/04/2012, 10:55
Località: Ovada

Re: Come ottenere l'ora esatta senza internet

Messaggio da leggereda root » 24/01/2017, 21:20

Sempre per il mio orologio Linux digitale, senza collegamento ad internet, ho necessita' di stabilire la posizione indicativa in cui e' posizionato l'orologio, per calcolare le effemeridi (posizione del sole e della luna durante il giorno).

Come fare?

GPS? No, perche' troppo costoso e non funziona negli interni.
GSM? Si, perche' le celle GSM a cui ci colleghiamo hanno una posizione definita e controllabile.

Ecco uno script per leggere le infomazioni dal programma "gnokii" il parametro LAC e l'identificativo cella della BTS piu' vicina, dati dai quali possiamo estrapolare la posizione nel raggio di qualche chilometro al massimo (ottimo per i mie scopi).

echo $(date) >> posizione-gsm.txt
#gnokii -c /etc/gnokirc --getnetworkinfo | grep -e "LAC" -e "Ident. cella" | grep -oP '\(\K[^)]+' >> posizione-gsm.txt
gnokii -c /etc/gnokirc --getnetworkinfo | grep -e "LAC" -e "Ident. cella" >> posizione-gsm.txt
gnokii -c /etc/gnokirc gnokii --monitor once | grep "RF:" >> posizione-gsm.txt


risultato:

mar 24 gen 2017, 16.55.52, CET
LAC : 3e9f (16031)
Ident. cella : 00003197 (12695)
Livello RF: 18
mar 24 gen 2017, 16.55.54, CET
LAC : 3e9f (16031)
Ident. cella : 00003197 (12695)
Livello RF: 18
mar 24 gen 2017, 16.55.55, CET
LAC : 3e9f (16031)
Ident. cella : 00003197 (12695)
Livello RF: 18
mar 24 gen 2017, 20.01.27, CET
LAC : 3ea2 (16034)
Ident. cella : 0000b484 (46212)
Livello RF: 99
Maurizio
Avatar utente
root
Amministratore
 
Messaggi: 349
Iscritto il: 10/04/2012, 10:55
Località: Ovada


Torna a Linux

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron