2 This document was created by Steven Baltakatei Sandoval on
3 ~2020-07-23T22:27Z~ under a [[https://creativecommons.org/licenses/by-sa/4.0/][Creative Commons BY-SA 4.0 license]]. It
4 was updated by Steven Baltakatei Sandoval on ~2020-10-13T18:02Z~
6 ** Development Task list
7 *** Set up prototype unit
8 **** DONE Solder wire for PPS signal
9 ***** 2020-07-25T20:03Z; bktei> Soldered pins to permit accessibility.
10 CLOSED: [2020-07-25 Sat 20:03]
12 - [[https://ozzmaker.com/forums/topic/connecting-gps-pps-pin/][Ozzmaker post]] on ~PPS~ wiring and a [[https://www.satsignal.eu/ntp/Raspberry-Pi-NTP.html][guide]] recommendation.
13 - [[http://www.satsignal.eu/raspberry-pi/Schmidt-RPZ-NTP-2016.pdf][Schmidt article]] on Raspberry Pi Zero time server.
14 - [[https://gpsd.gitlab.io/gpsd/gpsd-time-service-howto.html][GPSD dev ref]] page for ~gpsd~ interfacing with ~ntp~.
15 - [[https://raspberryautomation.com/connect-multiple-ds18b20-temperature-sensors-to-a-raspberry-pi/][Raspberry Autom]] article on specifying custom GPIO pin.
16 *** Document prototype unit
17 **** Summarize setup steps
18 ***** Perform main setup steps
19 ***** Install time-specific apps
20 : $ sudo apt install usbmount eject gpsd gpsd-clients python-gps pps-tools ntp
24 - ~python-gps~: (Add explanation here)
25 - ~pps-tools~: Package containing ~ppstest~ command useful for
26 checking status of PPS devices.
27 - ~ntpsec~: Security-hardened version of ~ntp~, the Network Time
28 Protocol package. Useful for automatically setting the system clock
29 according to time servers or local hardware.
32 **** TODO Integrate DHCP details from gregledet tutorial
33 http://www.gregledet.net/computers/building-a-stratum-1-ntp-server-with-a-raspberry-pi-4-and-adafruit-ultimate-gps-hat/
34 **** TODO Note working ntp.conf file
37 # /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help
39 driftfile /var/lib/ntp/ntp.drift
40 logfile /var/log/ntp.log
42 # Leap seconds definition provided by tzdata
43 leapfile /usr/share/zoneinfo/leap-seconds.list
45 # Enable this if you want statistics to be logged.
46 statsdir /var/log/ntpstats/
48 statistics loopstats peerstats clockstats
49 filegen loopstats file loopstats type day enable
50 filegen peerstats file peerstats type day enable
51 filegen clockstats file clockstats type day enable
54 # You do need to talk to an NTP server or two (or three).
55 #server ntp.your-provider.example
56 server time.nist.gov iburst minpoll 5 maxpoll 5
57 server tick.usno.navy.mil iburst minpoll 5 maxpoll 5
58 server 0.us.pool.ntp.org iburst minpoll 5 maxpoll 5
59 server 0.us.pool.ntp.org iburst minpoll 5 maxpoll 5
60 server 0.us.pool.ntp.org iburst minpoll 5 maxpoll 5
61 server 0.us.pool.ntp.org iburst minpoll 5 maxpoll 5
63 # pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will
64 # pick a different set every time it starts up. Please consider joining the
65 # pool: <http://www.pool.ntp.org/join.html>
66 #pool 0.debian.pool.ntp.org iburst
67 #pool 1.debian.pool.ntp.org iburst
68 #pool 2.debian.pool.ntp.org iburst
69 #pool 3.debian.pool.ntp.org iburst
72 server 127.127.22.0 minpoll 4 maxpoll 4 true
73 fudge 127.127.22.0 flag3 1 refid kPPS
75 # GPS PPS reference (NTP2)
76 server 127.127.28.2 minpoll 4 maxpoll 4
77 fudge 127.127.28.2 refid SHM2
79 # GPS Serial data reference (NTP0)
80 server 127.127.28.0 minpoll 4 maxpoll 4 prefer
81 fudge 127.127.28.0 time1 +0.593 refid GPS
86 # Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for
87 # details. The web page <http://support.ntp.org/bin/view/Support/AccessRestrictions>
88 # might also be helpful.
90 # Note that "restrict" applies to both servers and clients, so a configuration
91 # that might be intended to block requests from certain clients could also end
92 # up blocking replies from your own upstream servers.
94 # By default, exchange time with everybody, but don't allow configuration.
95 restrict -4 default kod notrap nomodify nopeer noquery limited
96 restrict -6 default kod notrap nomodify nopeer noquery limited
98 # Local users may interrogate the ntp server more closely.
102 # Needed for adding pool entries
103 restrict source notrap nomodify noquery
105 # Clients from this (example!) subnet have unlimited access, but only if
106 # cryptographically authenticated.
107 #restrict 192.168.123.0 mask 255.255.255.0 notrust
110 # If you want to provide time to your local subnet, change the next line.
111 # (Again, the address is an example only.)
112 #broadcast 192.168.123.255
114 # If you want to listen to time broadcasts on your local subnet, de-comment the
115 # next lines. Please do this only if you trust everybody on the network!
120 **** TODO Integreate References
121 - Some explanations for ~time1~, ~flag1~, ~flag3~, ~refid~, etc. strings in ntp.conf: [[http://doc.ntp.org/4.2.8/drivers/driver28.html][link]].
122 - NTP Basics (what "system peer" means): [[https://kb.meinbergglobal.com/kb/time_sync/ntp/ntp_basics][link]].
123 - GPSD guide indicating PPS signals should be preferred over GPS signals: [[https://gpsd.gitlab.io/gpsd/gpsd-time-service-howto.html#_feeding_ntpd_from_gpsd][link]]
126 The ~ninfacyzga-01~ device is equipped with an Ozzmaker BerryGPS-IMU
127 module which provides time and location data to ~gpsd~ and ~ntp~. The
128 time is provided by GPS satellites which themselves are
129 equipped [fn:nasa_20020408_atomicclock] with atomic clocks. This
130 extremely accurate set of clocks are needed since a GPS receiver
131 calculates its position in space using a General Relativity
132 calculation that uses the small variations in the time stamps received
133 from each satellite. This means that ~gpsd~ may be used to set the
134 system clock without a need for an internet connection to a default
135 Debian time server; ~ninfacyzga-01~ can be its own time server.
137 [fn:nasa_20020408_atomicclock] Title:[[https://science.nasa.gov/science-news/science-at-nasa/2002/08apr_atomicclock/][Tick-Tock Atomic Clock]];
138 Date:2002-04-08; Website:NASA.gov; [[https://web.archive.org/web/20100429141752/http://science.nasa.gov/science-news/science-at-nasa/2002/08apr_atomicclock/][Archive-link]]; Archive-date:
143 Ozzmaker BerryGPS-IMU, Version 3
145 This guide describes steps that may be used to convert a Raspberry Pi
146 into a time server using ~gpsd~.
147 ** Operating Procedures
149 **** Install Raspbian 10 (Buster) onto a Raspberry Pi Zero W.
152 **** Install Hardware
153 See [[https://ozzmaker.com/forums/topic/connecting-gps-pps-pin/][this]] Ozzmaker forum topic about connecting the BerryGPS-IMU
154 ~T_PULSE~ pin to GPIO 18.
156 Connect the ~T_PULSE~ connection on the BerryGPS-IMU-3 to GPIO pin 18
157 (ex: with solder and wire) in order to provide the PPS data signal
158 generated by the BerryGPS-IMU to the Raspberry Pi. Processing of this
159 data signal is handled by adding a line to ~/boot/config.txt~ in the
160 next section ("Install Software").
162 **** Install Software
163 These instructions assume that ~gpsd~ has already been setup to
164 provide NMEA sentences to ~gpspipe~ for location. See the ~README.org~
165 in ~doc/location~ for details. Basically, ~gpsd~ needs to be told via
166 its ~/etc/default/gpsd~ configuration file of which ~/dev/ttyS0~ will
167 provide the raw GPS module data.
169 ***** Install packages via ~apt~
170 Run the following command to install the required packages.
171 : $ sudo apt install usbmount eject gpsd gpsd-clients python-gps pps-tools ntp
173 ***** Modify ~/boot/config.txt~
174 In order to tell the Raspberry Pi to expect PPS data on ~BCM 18~ (pin
175 number 12; see [[https://pinout.xyz/][RaspPi pinout]]), add the following line to
176 ~/boot/config.txt~ as described on [[https://ozzmaker.com/forums/topic/problems-with-pps-on-a-pi0w-running-raspian-and-attached-to-a-berrygps-imuv3/][this Ozzmaker page]]:
178 : dtoverlay=pps-gpio,gpiopin=18
180 PPS data can be confirmed by running:
185 trying PPS source "/dev/pps0"
186 found PPS source "/dev/pps0"
187 ok, found 1 source(s), now start fetching data...
188 source 0 - assert 1595708074.003644641, sequence: 219 - clear 0.000000000, sequence: 0
189 source 0 - assert 1595708075.003709620, sequence: 220 - clear 0.000000000, sequence: 0
190 source 0 - assert 1595708076.003779580, sequence: 221 - clear 0.000000000, sequence: 0
191 source 0 - assert 1595708077.003850580, sequence: 222 - clear 0.000000000, sequence: 0
195 As per [[https://www.slsmk.com/how-to-setup-a-gps-pps-ntp-time-server-on-raspberry-pi/][the slsmk.com]] guide, create symbolic links expected by ~ntp~
196 pointing to the PPS device. This may be performed by creating the file:
198 : /etc/udev/rules.d/09-pps.rules
203 KERNEL=="ttyAMA0", SUBSYSTEM=="tty", DRIVER=="", OWNER=="root", GROUP=="tty", MODE=="0777", SYMLINK+="gps0"
206 ***** Modify ~/etc/modules~
207 For older versions of Raspberry Pi, it may be necessary to explicitly
208 require the ~pps-gpio~ module to be loaded by making sure
209 ~/etc/modules~ contains the line:
213 According to [[https://www.raspberrypi.org/forums/viewtopic.php?p=757747#p757747][this]] post on 2015-05-13T09:14 by [[https://www.raspberrypi.org/forums/memberlist.php?mode=viewprofile&u=31454][ame]] on the Raspberry Pi
220 > I want the RPi to load/probe the w1-gpio module on boot.
224 > sudo modprobe w1-gpio
226 > To the etc/modules file, but on boot it is not loaded.
227 > I have checked this by the lsmod command. If i then enter the above line manually and then check it's there loaded.
229 > What's wrong with my line on code in the modules file?
233 You no longer need to load modules for some devices. It's handled by devicetree.
235 Search for "devicetree" on the forum, or start here:
236 https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=97314
239 As of 2020-07-25, using Raspbian Buster 10 with a BerryGPS-IMU v3,
240 ~/etc/modules~ did not need to be modified.
242 ***** Remove DHCP client hooks
243 As per [[https://www.slsmk.com/how-to-setup-a-gps-pps-ntp-time-server-on-raspberry-pi/][this]] guide, "remove ntp DHCP hook (so that it doesn't override ntp settings)".
245 This can be performed by running the following command (shown in
246 script form for readability):
249 if [ -f "/etc/dhcp/dhclient-exit-hooks.d/ntp" ]; then
250 mv /etc/dhcp/dhclient-exit-hooks.d/ntp /etc/dhcp/dhclient-exit-hooks.d/xxxntp-orig;
252 echo "NTP exit hook does not exist";
259 *** Unscheduled Shutdown