Configurando o tempo através do dongle do GPS

3

Existe este código que afirma definir a hora do seu ambiente Linux,

link

date -s '01/01/2014 00:01'
sleep 1
pkill ntpd
pkill gpsd
gpsd -b -n -D 2 /dev/ttyUSB0
sleep 2
GPSDATE='gpspipe -w | head -10 | grep TPV | sed -r 's/.*"time":"([^"]*)".*//' | head -1'
echo $GPSDATE
date -s "$GPSDATE"
/usr/sbin/ntpd

Mas quando eu estou executando este código através de PUTTy ele define o meu tempo para,

Sun Aug 8 06:08:11 PKT 2010

Gostaria de saber por que está definindo meu tempo de GPS para 2010, enquanto é 2013.

Aqui está a saída do comando gpspipe -w

{"class":"TPV","tag":"MID2","device":"/dev/ttyUSB0","mode":1,"time":"1990-12-22T23:59:53.020Z","ept":0.005}
{"class":"TPV","tag":"MID2","device":"/dev/ttyUSB0","mode":1,"time":"1990-12-22T23:59:54.020Z","ept":0.005}
{"class":"SKY","tag":"MID4","device":"/dev/ttyUSB0","time":"1990-12-22T23:59:55.010Z"}
{"class":"TPV","tag":"MID2","device":"/dev/ttyUSB0","mode":1,"time":"1990-12-22T23:59:55.010Z","ept":0.005}
{"class":"TPV","tag":"MID2","device":"/dev/ttyUSB0","mode":1,"time":"1990-12-22T23:59:56.020Z","ept":0.005}
{"class":"TPV","tag":"MID2","device":"/dev/ttyUSB0","mode":1,"time":"1990-12-22T23:59:57.020Z","ept":0.005}

A saída é contínua, o que significa que ela está mudando a cada segundo.

    
por Sufiyan Ghori 23.10.2013 / 11:13

2 respostas

3

Como $GPSDATE está sendo relatado como

Sun Aug 8 06:08:11 PKT 2010

o comando date -s está fazendo exatamente o que você está dizendo para fazer. Por que está relatando um ano errado (ou nada)? Eu não tenho ideia.

Já que você já está usando ntpd , por que você não se contenta em deixar o NTP fazer o que ele quer? Isso é um problema "Eu gostaria que o gpsdate funcionasse porque está lá"?

A melhor maneira de nos ajudar a depurá-lo, fornecendo a saída completa

gpsdate -w

na sua pergunta.

adicionado em resposta à saída do gpsdate:

De acordo com a documentação do gpsd quando o campo de modo de um registro TPV é 1 , significa "não consertar". Isso significa que o receptor de GPS não viu dados de satélite suficientes (ou nenhum). Isso implica que o valor do tempo é lixo eletrônico, o que certamente faz sentido se você estiver vendo um ano de 1990 ou 2014. Em seu script, o sleep 2 dá muito pouco tempo para que gpsd obtenha uma correção de GPS adequada. Esperar por mais tempo pode ajudar, não ter uma antena adequada significa que você esperará para sempre uma correção.

O Protocolo de horário da rede implementado por ntpd não precisa de GPS para funcionar. Ele troca informações de sincronização de tempo com outros hosts da Internet, alguns dos quais obtêm o relógio de uma referência como GPS. Como seu script para e reinicia seu ntpd, você pode simplesmente esquecer uma correção de GPS e trabalhar com isso. Por exemplo, a máquina na qual estou digitando usa ntpd e tem +4,7 milissegundos de UTC, o que é mais do que preciso para muitos propósitos. Você pode usar ntpq -p para descobrir se e como seu relógio está sincronizado.

    
por 23.10.2013 / 19:40
3
… "mode":1 …

É por isso. Você não tem um GPS fixo e o receptor de GPS provavelmente não tem ideia de que horas são. Você quer que o modo seja 3.

Pelo fato de SKY estar sendo reportado sem nenhum dado adicional, eu acho que seu receptor ainda não tem um almanaque.

Deixe o GPS funcionando com uma visão clara do céu por pelo menos 15 minutos (sim, realmente). Isso deve melhorar as coisas.

Veja a documentação aqui sobre o significado desses campos.

    
por 23.10.2013 / 21:42