RPIGPS

Z Poznámkový blok
Přejít na: navigace, hledání

GPS a NTP - zde se pokusím shrnout zprovoznění NTP serveru z GPS modulem. K testům byl použit Respberry 3 z GSM modulem Adafruit Ultimate GPS HAT pro RPi. Doporučuji rovnou přidat i baterii pro GPS CR1230 ! Z počátku jsem pracoval z image distribuce Jessie ale v závěru vyšel nový image z distribuci Stretch která vše zjednodušila.

Instalace na Raspberri 4 a verzi Debian 12 - bookworm RPIGPS_Bookworm

Zpět na Raspberry.

Příprava

Po vytvoření image na microCD musíme ještě nahrát prázdný soubor ssh aby byl funkční přístup přes SSH. Teprve poté se můžeme k Raspberry přihlásit přes SSH. Ve výchozím nastavení je IP adresa načtena z DHCP serveru. Výchozí login je "pi" a heslo "raspberry". Po prvním spuštění je vhodné spustit příkaz "sudo raspi-config" pro dokončení plného přednastavení vlastního Raspberry. Viz také článek Raspberry.

Následně provedeme upgrade celé distribuce:

sudo apt-get update && sudo apt-get dist-upgrade -y
sudo apt-get upgrade -y && sudo apt autoremove -y

sudo rpi-update
sudo timedatectl set-timezone Europe/Prague

Nastavení distribuce

Některé dále uvedené kroky můžeme nastavit pomocí "sudo raspi-config". Pak stačí jen nastavení podle níže uvedeného zkontrolovat.

Zablokování sériové konzoly

Prvně musíme systému Linux odebrat nastavení pro spuštění sériové konzole. Pokud by jsme tak neučinili, tak nám sériový port obsadí systémová konzole a nešel by následně použít pro GPS. To provedeme editací souboru /boot/cmdline.txt

sudo nano /boot/cmdline.txt

kde odstraníme odeberte console=ttyAMA0,115200 a pokud existuje, kgdboc=ttyAMA0,115200

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

na

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Poznámka:

  • může se zobrazit console=serial0,115200 nebo console=ttyS0,115200 pak odstraníme ty části řádku, pokud jsou k dispozici.

Povolení sériového rozhraní

Na Raspberry V.3 je standardní sériové rozhraní využito pro Bluetooth. My jej ale potřebujeme pro GPS modul. To docílíme vypnutím Bluetooh.

Součástí distribuce je též podpora PPS (one pulse-per-second - jeden impuls na sekundu). Pro aktivaci je potřeba nastavení a načtení příslušného moduly. To docílíme editací v souboru /boot/config.txt

sudo nano /boot/config.txt

kde na konec přidáme parametr

enable_uart=1
dtoverlay=pi3-disable-bt
dtoverlay=pps-gpio,gpiopin=4

Dále do souboru /etc/modules

sudo nano /etc/modules

přidáme ještě načtení vlastního ovladače PPS

pps-gpio

Poté restartujeme celé Reaspberry

sudo reboot

Ověření GPS

Před pokračováním je dobré se přesvědčit že modul GPS má dostatek dat ze satelitů a že je komunikace přes sériový port v pořádku. Dostatek dat je signalizováno led "Fix" na modulu:

  • Bliká v intervalu 1s - No Fix (nedostatek dat)
  • Blikne jednou za 10s - OK Fix

Je možné,že bude nutné přijímač GPS dát blíže k oknu, nebo připojit externí anténu. Pak můžeme pokračovat v ověření "surových" dat z přijímače přímo ze sériového portu:

stty -F /dev/ttyAMA0 raw 9600 cs8 clocal -cstopb
cat /dev/ttyAMA0

Následně by se nám měli zobrazit "surová" data, například

$GPGGA,193338.000,4909.7635,N,01643.8563,E,1,10,0.87,221.4,M,43.4,M,,*6C
$GPGSA,A,3,03,11,31,22,01,17,09,14,06,23,,,1.57,0.87,1.30*01
$GPRMC,193338.000,A,4909.7635,N,01643.8563,E,0.21,357.98,220717,,,A*64
$GPZDA,193338.000,22,07,2017,,*56
$GPGGA,193339.000,4909.7635,N,01643.8563,E,1,10,0.87,221.4,M,43.4,M,,*6D
$GPGSA,A,3,03,11,31,22,01,17,09,14,06,23,,,1.57,0.87,1.30*01
$GPRMC,193339.000,A,4909.7635,N,01643.8563,E,0.11,57.42,220717,,,A*52

Pokud tomu tak je, můžeme pokračovat ....

Instalace GPS a PPS

Pro zpracování dat z GPS modulu je nutné mít nainstalovaná démon "gpsd". Ten můžeme nainstaloval několika způsoby. Pro lepší synchronizaci času je také dobré doinstalovat pps nástroje.

GPS - balíček

Jednoduší instakace, ale instalovana verze je zavisla na distribuci.

sudo apt-get install -y gpsd gpsd-clients pps-tools

Následně otevřeme konfigurační soubor /etc/default/gpsd kde nastavíme parametry

sudo nano /etc/default/gpsd
DEVICES="/dev/pps0 /dev/ttyAMA0"
GPSD_OPTIONS="-n"
USBAUTO="false"
START_DAEMON="true"

Poznámka: V distribuci jessie je verze gpsd 3.11-3, pps-tools 0.20120406+g0deb. Pro novější verzi je nutné upravit source list na distribuci stretch.

GPS - tar.gz

Instalace ze zdrojového kódu. Je o neco složitější, ale máme nejnovější verzi. Doinstalujeme potřebné balíčky - povinné, doporučené:

sudo apt-get install scons libncurses5-dev python-dev pps-tools
sudo apt-get install git-core

Ověříme nejnovější verzi na http://download-mirror.savannah.gnu.org/releases/gpsd/ a následně ji stáhneme:

wget http://download-mirror.savannah.gnu.org/releases/gpsd/gpsd-3.25.tar.gz

Poté soubor rozbalíme:

tar -xzvf gpsd-release-3.16.tar.gz

Přesuneme se do zdrojového adresáře a spustíme instalaci:

cd ./gpsd-release-3.16
scons && scons check && sudo scons udev-install

Pokud se to podaří gpsd a gpsdctl budou instalovány zde:

/usr/local/sbin/

Ostatní klienti a nástroje budou instalovány zde:

/usr/local/bin/

Tyto jsou:

cgps, gps2udp, gpsctl, gpsdecode, gpsmon, gpspipe, gpxlogger, lcdgps, ntpshmmon

Ověření gpsd

Ověření funkčnosti GPS je možné použít několik pomocných programů. Například:

gpsmon

cgps -s

ntpshmmon

Ověření PPS

K ověření pulzů PPS můžeme použít:

sudo ppstest /dev/pps0

Následně by jsme měli získat podobný výpis

trying PPS source "/dev/pps0"
found PPS source "/dev/pps0"
ok, found 1 source(s), now start fetching data...
source 0 - assert 1504898420.000395033, sequence: 2859 - clear  0.000000000, sequence: 0
source 0 - assert 1504898421.000394391, sequence: 2860 - clear  0.000000000, sequence: 0
source 0 - assert 1504898422.000394114, sequence: 2861 - clear  0.000000000, sequence: 0

Pokud by se zobrazil výpis " time_pps_fetch() error -1 (Connection timed out) " tak PPS pulzy nejsou na daném rozhraní k dispozici.

Poznámka: V případě že GPS přijímač je připojen přes seriové rozhraní, tak pro PPS signál se využívá jeden z pinů DCD, RI a DSR.

Instalace NTP

V distribuci jessie sice je server NTP nainstalován, ale jedná se o starší verzi, která nepodporuje PPS. Proto je nutné nainstalovat novější verzi která má i tuto podporu. Dále nabízím dvě možnosti instalace:

NTP - balíček

Instalace je velmi jednoduchá

sudo apt-get update
sudo apt-get -y install ntp

NTP - tar.gz

Na serveru ntp.org v sekci dovnloads si ověříme nejnovější verzi a podle toho je vhodné upravit názvy instalovaných souborů. Následně můžeme postupovat:

sudo service ntp stop

wget http://archive.ntp.org/ntp4/ntp-4.2/ntp-4.2.8p10.tar.gz
tar zxvf ntp-4.2.8p10.tar.gz
cd ntp-4.2.8p10
./configure --enable-linuxcaps
make
sudo make install
sudo cp /usr/local/bin/ntp* /usr/bin/ && sudo cp /usr/local/sbin/ntp* /usr/sbin/

Poznámka: k 9.8.2017 je aktuální a doporučená verze 4.2.8p10

Nastavení NTP

Po instalaci upravíme soubor ntp.conf podle našich požadavků nakonec opět NTP restartujme/spustíme.

sudo nano /etc/ntp.conf

Doporučuji upravit seznam NTP serverů. Pokud by jsme ale chtěli použít data jen z GPS, tak seznam nemusí být potřeba.

pool cz.pool.ntp.org
server ntp.cesnet.cz iburst prefer
server ntp.nix.cz prefer minpoll 10

Pro vzdálený přístup a čtení jsou parametry:

  • nomodify - "Nepovolit hostiteli / podsíti změnit nastavení ntpd, i když mají správné klíče." Implicitně ntpd vyžaduje autentizaci se symetrickými klíči pro modifikace provedené pomocí ntpdc. Takže pokud nenakonfigurujete symetrické klíče pro váš ntpd nebo je necháváte řádně chráněný, nemusíte používat "nomodify", pokud nemáte obavy že autentizace NTP může být ohroženo.
  • noserve - "Nepřipojujte čas tomuto hostiteli / podsíti." Tato možnost je skutečně určena k použití, pokud chcete povolit hostiteli, podsíti přístup k vašemu serveru ntpd pouze pro sledování a / nebo vzdálenou konfiguraci.
  • notrust - ignorovat všechny pakety NTP, které nejsou kryptograficky ověřeny. Tato volba informuje ntpd, že ignoruje všechny pakety, které nejsou kryptograficky ověřeny. NEPOUŽÍVEJTE "notrust", pokud ntp crypto (tj. Symetrické klíče nebo autokey) nebylo správně nakonfigurováno na "obou koncích" asociace ntp (např. Vaše ntpd a vzdálený časový server, váš ntpd a klient).
  • noquery - "Nedovolte hostiteli / podsíti dotazovat váš stav ntpd." Funkce ntpd status query poskytované ntpq / ntpdc zobrazí některé informace o systému kde je spuště ntpd (např. Verze OS, verze ntpd). To si mnozí lidé nepřejí, aby ostatní věděli. Musíte se rozhodnout, zda je shrnutí těchto informací důležitější než možné výhody umožňující klientům vidět synchronizační informace o vašem ntpd.
  • ignore - Zakázat pakety všeho druhu, včetně dotazů ntpq a ntpdc .
  • kod - Pošlete balíček kiss-o'-death (KoD), pokud je přítomen limited příznak a paket porušuje omezení rychlosti stanovené příkazem Vyhoďte. KoD pakety jsou samy o sobě limitovány pro každou zdrojovou adresu zvlášť. Pokud je příznak kod používán v omezení, které nemá limited vlajku, nevzniknou žádné odpovědi KoD.
  • limited - Zakázat časovou službu, pokud paket poruší omezení rychlosti stanovené příkazem discard . To se nevztahuje na dotazy ntpq a ntpdc .
  • mssntp - Povolení ověřování MS-SNTP systému Microsoft Windows pomocí služeb služby Active Directory. Poznámka: Potenciální uživatelé by si měli být vědomi toho, že tyto služby zahrnují připojení TCP k jinému procesu, který by mohl potenciálně blokovat, a odmítá služby ostatním uživatelům. Tento příznak by měl být používán pouze pro vyhrazený server bez klientů jiných než MS-SNTP.
  • nomodify - Zakaž dotazy ntpq a ntpdc, které se pokoušejí změnit stav serveru (tj. Rekonfigurace času spuštění). Dotazy, které vracejí informace, jsou povoleny.
  • noquery - Zakázat dotazy ntpq a ntpdc . Časová služba není ovlivněna.
  • nopeer - Zakázat pakety, které by mohly mobilizovat sdružení, pokud nebyly ověřeny. To zahrnuje vysílání, symetrický a mnohostranný serverový paket, pokud neexistuje nakonfigurovaná asociace. Obsahuje také sdružení pool , takže pokud chcete používat servery z direktivy peer a také chcete ve výchozím nastavení používat nopeer , budete chtít také řádek "restrict source ..." , který neobsahuje direktivu nopeer . Všimněte si, že tento příznak se nevztahuje na pakety, které se nepokouší mobilizovat sdružení.
  • noserve - Zakázat všechny pakety kromě ntpq a ntpdc dotazů.
  • notrap - Odmítnout poskytnout službu přetahování řídicích zpráv režimu 6 odpovídajícím hostitelům. Služba trap je subsystém protokolu protokolu ntpdc, který je určen pro použití programem protokolování vzdálených událostí.
  • notrust - Odmítnout pakety, které nejsou kryptograficky ověřeny. Pečlivě si uvědomte, jak tento příznak interaguje s volbou auth povelem povolit a zakázat . Je-li povoleno auth , což je výchozí, ověření je vyžadováno u všech paketů, které mohou mobilizovat přidružení. Je-li auth zakázán, ale není přítomen příznak notrust , přidružení může být mobilizováno, bez ohledu na to, zda je ověřeno. Je-li auth zakázáno, ale je přítomen příznak notrust , ověření je vyžadováno pouze pro zadaný rozsah adresy / masky.
  • ntpport - Toto je ve skutečnosti modifikátor algoritmu shody, spíše než příznak omezení. Její přítomnost způsobuje, že záznam o omezení je nutný pouze v případě, že zdrojový port v paketu je standardní port NTP UDP (123). Omezující řádek obsahující ntpport je považován za specifičtější než jedna se stejnou adresou a maskou, ale chybí ntpport .
  • version - Odmítnout pakety, které neodpovídají aktuální verzi NTP.



NTP z GPS

Pro synchronizaci NTP serveru z GPS musíme upravit konfigurační soubor /etc/ntp.conf kam přidáme

# gps ntp
server 127.127.28.0 minpoll 4 maxpoll 4 prefer
fudge  127.127.28.0 time1 0.0 refid GPS

NTP z PPS

Pro synchronizaci pomocí PPS přidáme do konfigurace /etc/ntp.conf následující řádky:

# PPS ntp
server 127.127.22.0 minpoll 4 maxpoll 4
fudge 127.127.22.0 refid PPS

a následně službu NTP restartujeme pro načtení změn

sudo service ntp restart

NTP servery

Ze zajímavosti uvádím zajímavé adresy NTP serverů úrovně 1 (GPS):

  • lx.ujf.cas.cz ( 89.221.208.61 ) - GPS
  • tak.cesnet.cz ( 195.113.144.238 ) - GPS
  • netopyr.hanacke.net ( 94.124.107.190 ) - GPS
  • ntp2.ufe.cz ( 147.231.2.6 ) - ATOM

NTP Second File

Jednou za dva roky, maximálně dvakrát do roka se přidává jedna sekunda. NTP server s touto informací umí pracovat a o této změně dává jeden den dopředu vědět aby se podřízené servery na tuto událost připravili a nenastal problém z důvodu náhlé změny, chybějícího časového údaje. Z toho plyne, že o této informaci musí vědět servery prvního řádu, aby ji dále delegovali. V případě synchronizace GPS je tato informace přenášena přímo GPS družicemi. Pokud je ale synchronizace pro NTP server prvního řádu brána z jiného zdroje který o této změně předem neinformuje, je vhodné přidat odkaz na soubor, obsahující data kdy posun nastane. Vlastní soubor můžeme stáhnout z několika zdrojů, například:

Následně do konfiguračního souboru /etc/ntp.conf přidáme řádek z odkazem na stažený soubor:

# pouziti sekundoveho souboru
leapfile "/cesta/na/leap-soubor"

Poté je nutné službu restartovat, aby se nastavení aplikovalo. Kontrolu vlastního souboru je pak potřeba provádět několikrát do roka.


Kličová slova.

ntp leap second file
http://support.ntp.org/bin/view/Support/ConfiguringNTP

Ověření NTP

Pokud jsme zatím neprovedli, tak provedeme restart služby

sudo service ntp start

Následně ověříme funkcionalitu NTP:

ntpq -pn

Pro úplný výpis z dalšími informacemi můžeme použít:

ntpq -crv -pn

Po chvíli by jsme měli vidět, že se synchronizuje čas z nastavených serverů. Nás nejvíce zajímá SHM a PPS.

pi@raspberrypi:~$ ntpq -p
remote           refid           st t when poll reach   delay   offset  jitter
==============================================================================
*ns1.luns.net.uk 33.117.170.50    2 u   54   64    7   65.454    2.666   5.800
+resntp-b-vip.lo 127.151.91.34    3 u   45   64   17   55.704   -5.169   8.482
+bart.nexellent. 194.242.34.149   2 u   17   64   17   76.585   -4.271  57.595
+v01.s01.be.it2g 193.190.230.65   2 u   20   64   37   86.464   -2.374 228.460
xSHM(0)          .GPS.            0 l   11   16  377    0.000  144.714   3.026
oPPS(0)          .PPS.            0 l    -   16    0    0.000    0.000   0.000

Kde první znak znamená:

"mezera"
   Peer je vyřazen jako nedostupný, synchronizovaný na vlastní server (synchronizační smyčka) nebo velká synchronizační vzdálenost. 
x falsetick
   Peer je vyřazen algoritmem průniku jako falešný. 
. excess
   Peer je vyřazen, protože není mezi prvními deseti podle synchronizační vzdálenosti, a tak je nevhodný kandidát k dalšímu použití. 
- outlyer
   Peer je vyřazen clusteringovým algoritmem jako outlier. 
+ candidat
   Peer je přeživší a je kandidátem na kombinační algoritmus. 
# selected
   Peer je přeživší, ale není mezi prvními šest seřazených podle synchronizační vzdálenosti. Pokud je asociace pomíjivá, může být odpojen, aby šetřil zdroje. 
* sys.peer
   Peer byl prohlášen za systémový a jeho proměnné jsou předávány vlastnímu systému. 
o pps.peer
   Peer byl prohlášen za systémový a předává proměnné vlastnímu systému. Skutečná synchronizace je však odvozena od signálu puls-per-second (PPS), ať už nepřímo přes ovladač referenčních hodin PPS nebo přímo přes rozhraní jádra.
remote - Adresa vzdáleného NTP serveru
refid  - Referenční NTP server vzdáleného NTP serveru
st     - vrstvy vzdáleného peeru
t      - Typ peeru: l - místní, u - unicast, m - multicast, b - broadcast, p - seznam
when   - Interval v sekundách od posledního přijatého paketu
pool   - Interval v sekundách dotazování (log2 sec - min/max pool )
reach  - Registr dostupnosti (v osmičkové soustavě) 
delay  - Aktuálně odhadované zpoždění
offset - Offset serveru vzhledem k tomuto hostiteli
jitter - Odhadovaná časová chyba peerových hodin měřená jako exponenciální průměr časových rozdílů RMS

Web zobrazení

Součástí gpsd je i php skript, který umožní zobrazení zachycených družic přes web rozhraní. V případě zájmu o toto zobrazení je potřeba doinstalovat web server z PHP.

sudo apt install -y lighttpd php-cgi php-gd php-bcmath

sudo lighty-enable-mod fastcgi 
sudo lighty-enable-mod fastcgi-php

sudo service lighttpd force-reload

Následně z adresáře /usr/share/doc/gpsd-clients/examples překopírujeme soubor gpsd.php.gz do adresáře /var/www/html. Tam jej rozbalíme příkazem "gzip -d gpsd.php.gz". Při prvním spuštění gpsd.php se vytváří konfigurační soubor. Proto je potřeba alespoň dočasně povolit do adresáře zápis.

sudo cp /usr/share/doc/gpsd-clients/examples/gpsd.php.gz /var/www/html
cd /var/www/html
sudo gzip -d gpsd.php.gz

Někdy se stane, že po instalaci skript neni zkompromován. Pak je stačí překopírovat.

sudo cp /usr/share/doc/gpsd-clients/examples/gpsd.php /var/www/html

Pred prvním zpuštěním vytvoříme symlink a nastavíme práva, aby se mohl zapsat konfiguracni soubor

cd /var/www/html
sudo ln -s gpsd.php index.php 
sudo chmod 777 ../html

Následně si zobrazime web stránku přes http://<IP_adresa/DNS_nazev gps serveru>. Poté vrátíme práva aby do adresáře nemohl kde kdo zapisovat

sudo chmod 755 ../html

Jestě překlad popisu v souboru gpsd.php (cca řádek 611):

 <p class="caption">
 <u>Plný objeket</u> - data ze satelitu byli použity pro synchronizaci<br>
 <u>Odstup signál od šumu v dBHz</u>:
  <span style="color:green;">Zelená=nejlepší</span>,
  <span style="color:#c7a317;">žlutá=dobrý</span>,
  <span style="color:#dc322f">rudá=nejhorší</span><br>
 <i>Kruh</i> - satelity z GPS a QZSS<br>
 <i>Kosočtverec</i> - satelity s rozšířením (SBAS, WAAS atd.)<br>
 <i>Trojúhelník směrující nahoru</i> - satelity Galileo<br>
 <i>Trojúhelník směrující dolů</i> - satelity BeiDou<br>
 <i>Čtverec</i> - satelity GLONASS<br>
 </p>

A ve vytvořeném konfig souboru:

$blurb = <<<EOT
 <center>
 Jedná se o <a href="https://gpsd.io/">gps</a>/<a href="https://www.ntp.org/">ntp</a> server <blink>v síti SlapNet.cz</blink>.
 Je postaven na <blink>Raspberry pi</blink> z GSM přijímačem.
 Tento server spravuje <a href="mailto://tydyt@tydyt.cz">Tydyt</a>.<br/>
 </center>
EOT;

Dokončení

Odstranit soubor /etc/dhcp/dhclient-exit-hooks.d/ntp abychom zabránili přepsání konfigurace ntp z dhcp.

rm /etc/dhcp/dhclient-exit-hooks.d/ntp
rm /var/lib/ntp/ntp.conf.dhcp

Zdroje:

Další ...

Vzhledem k postupnému vývoji byl vytvořen novy časový server, pod názvem chrony. Je jednoduší a "lehčí" čímž méně zatěžuje procesor, přesto je schopen stávající NTP nahradit. Příklad konfigurace pro GPS - NTP server jsem nalezl na https://wiki.alpinelinux.org/wiki/Chrony_and_GPSD .

Odkazy