Nel caso ci ritrovassimo con un adattatore bluetooth, un dispositivo gps
bluetooth e un portatile con su linux...cosa potremmo fare?
Nel caso non lo sappiate il segnale irradiato dai satelliti GPS contiene
un segnale orario UTC.
Quindi se abbiamo un ricevitore GPS potremmo ricevere un segnale orario,
che non sara' aggiornato come se avessimo un orologio al cesio, ma certamente
sara' piu' preciso del "ma adesso che ore sono? circa le 10..." :)
Per far andare il giochino serve un ricevitore GPS Bluetooth, io ho preso il GPS 540
della Cellular Line, economico. Ho un portatile con una Fedora 8, e una banale dongle
Bluetooth.
La prima cosa da fare e' configurare lo strato blutooth con Bluez, do per scontato che
abbiate gia' installato e configurato il software blutooth per la vostra distribuzione linux.
Per prima cosa scopriamo l'indirizzo del nostro ricevitore GPS tramite hcitool:
[root:282]$hcitool scan
Scanning ...
00:1C:D4:42:B2:47 Nokia
00:0B:0D:94:13:66 BT GPS
Vediamo cosa ci dice il nostro ricevitore GPS sempre con hcitool:
[root:286]$hcitool info 00:0B:0D:94:13:66
Requesting information ...
BD Address: 00:0B:0D:94:13:66
OUI Company: Air2U, Inc. (00-0B-0D)
Device Name: BT GPS
LMP Version: 2.0 (0x3) LMP Subversion: 0xbb8
Manufacturer: Silicon Wave (11)
Features: 0xff 0xff 0x05 0x38 0x18 0x18 0x00 0x00
[...]
Il gioco e' semplice, editate il file /etc/bluetooth/rfcomm.conf
aggiungendo le seguenti righe:
rfcomm2 {
# Automatically bind the device at startup
bind no;
# Bluetooth address of the device
device 00:0B:0D:94:13:66;
# RFCOMM channel for the connection
channel 1;
# Description of the connection
comment "BT GPS";
}
Io ho altri device seriali quindi ho usato la rfcomm2, di solito il canale di
legato all'emulazione seriale via bluetooth e' il 1.
Ora create un file chiamato pin in /etc/bluetooth/ e inseriteci il classico pin
bluetooth, 0000.
Infine lanciate il comando rfcomm bind /dev/rfcomm2 per collegare il
ricevitore GPS al device seriale via bluetooth /dev/rfcomm2.
Giusto per testare il funzionamento fate:
[root:74]$cat < /dev/rfcomm2
,0000017E,16322000,F,16.367667MHz
$ver,1.4.5,rev,07.09.28
$GPGGA,221712.000,4531.7813,N,00931.0179,E,0,00,0.0,183.4,M,0.0,M,,0000*6C
$GPGSA,A,1,00,,,,,,,,,,,,0.0,0.0,0.0*30
$GPGSV,3,1,10,05,77,035,,30,70,308,,12,63,063,,29,47,213,*7D
$GPGSV,3,2,10,14,37,260,,02,33,082,,09,31,145,,31,19,312,*75
Se fin qui ricevete i messaggi tipo quelli qui riportati allora la comunicazione via
bluetooth con il ricevitore GPS funziona correttamente.
Ora serve installare un demone che gestira' la comunicazione con il ricevitore
GPS e recuperi le informazioni sul posizionamento e il demone per la sincronizzazione
del clock di sistema.
Questi demoni si chiamano gpsd e ntp
(chi con yum, chi con apt-get o aptitude...il gioco e' semplice).
Dopo averlo installato basta lanciarlo con i seguenti parametri:
gpsd -n /dev/rfcomm2
In questo modo gpsd si connettera' al device che abbiamo
configurato tramite Bluez. Per testare telnettiamo la porta
di gpsd su localhost:
[root:85]$telnet localhost 2947
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
d\n
GPSD,D=?,N=0
i\n
GPSD,I=Generic NMEA,N=0
d\n
GPSD,D=2008-05-02T22:21:54.8Z,N=0
Con il comando d\n chiediamo a gpsd di
recuperare la data in utc dal ricevitore GPS, che se sincronizzato con i
satelliti ricevera' tale informazione con cadenza regolare.
Bene rimane ora solo da configurare ntpd per recuperare il segnale orario
da gpsd e questo lo si fa molto semplicemente.
Inserite nella configurazione del demone ntpd, /etc/ntpd.conf le seguenti righe:
server 127.127.28.0 minpoll 4 maxpoll 4
fudge 127.127.28.0 time1 0.420 refid GPS
Rilanciare il demone ntpd e verificare con il comando
ntpq -p cosa succede.
Qui cosa e' successo a me :)
Nel syslog...

SHM(0) e' il clock ottenuto tramite il gpsd e il ricevitore GPS bluetooth.
...e tramite il comando ntpq -p

Come potete vedere il clock ottenuto tramite il GPS e' risultato preferenziale ad un certo
punto, posso pero' dirvi che con una buona connessione internet, non come la mia via
umts, e dei server ntp come quelli dell'istituto energia nucleare italiani, il segnale
ottenuto dal GPS non viene scelto come preferito, questo perche' ovviamente il
clock fornito da un orologio al cesio...direi che e' piu' accurato.
Diciamo che questo sistema puo' essere utile se si vuole un clock molto preciso
a prescindere da connessioni internet e orologi nucleari...
See ya in cyberspace.
