⏱ Grovestreet NTP

A public Stratum 1 GPS-synchronized NTP server providing precise time to our cul-de-sac and beyond!

Checking...
NTP Server Time
--:--:--
Loading...
Your Clock Offset
Calculating...
Comparing to server time
Your System Time
--:--:--
Detecting timezone...
--
Stratum Level
--
Accuracy
--
Active Clients
--
NTP Packets
--
Uptime
Hostname ntp.grovestreet.zip
Reference GPS + PPS
Location Netherlands 🇳🇱
Hardware Raspberry Pi 5 + TimeHAT v6
NTP Pool Pending...

🔧 Sync Your Clock

Windows GUI Configuration

1. Open SettingsTime & LanguageDate & Time

2. Click Additional clocks (or Related settingsAdditional date, time & regional settings)

3. Click Internet Time tab → Change settings

4. Enter the server address and click Update now:

ntp.grovestreet.zip

Command Line (Administrator)

Open Command Prompt as Administrator and run:

w32tm /config /manualpeerlist:"ntp.grovestreet.zip" /syncfromflags:manual /update
net stop w32time && net start w32time
w32tm /resync

Verify Synchronization

w32tm /query /status
w32tm /stripchart /computer:ntp.grovestreet.zip /samples:5

macOS GUI Configuration

1. Open System Settings (or System Preferences on older macOS)

2. Go to GeneralDate & Time

3. Click Set date and time automatically and enter:

ntp.grovestreet.zip

Terminal Commands

One-time sync:

sudo sntp -sS ntp.grovestreet.zip

Permanent configuration:

sudo systemsetup -setnetworktimeserver ntp.grovestreet.zip
sudo systemsetup -setusingnetworktime on

Ubuntu / Debian (systemd-timesyncd)

# Edit configuration
sudo nano /etc/systemd/timesyncd.conf

# Add under [Time]:
[Time]
NTP=ntp.grovestreet.zip

# Restart service
sudo systemctl restart systemd-timesyncd
timedatectl timesync-status

Using Chrony (Recommended)

# Install chrony
sudo apt install chrony

# Edit config
sudo nano /etc/chrony/chrony.conf

# Add at the top:
server ntp.grovestreet.zip iburst

# Restart
sudo systemctl restart chronyd
chronyc sources -v

RHEL / Fedora / Rocky

sudo dnf install chrony
sudo nano /etc/chrony.conf
# Add: server ntp.grovestreet.zip iburst
sudo systemctl enable --now chronyd
chronyc tracking

Arch Linux

sudo pacman -S chrony
echo "server ntp.grovestreet.zip iburst" | sudo tee -a /etc/chrony.conf
sudo systemctl enable --now chronyd

Active Directory Group Policy

Configure via Group Policy Management (gpmc.msc):

Computer Configuration
  → Administrative Templates
    → System
      → Windows Time Service
        → Time Providers
          → Configure Windows NTP Client

Settings:
  NtpServer: ntp.grovestreet.zip,0x9
  Type: NTP
  CrossSiteSyncFlags: 2
  ResolvePeerBackoffMinutes: 15
  ResolvePeerBackoffMaxTimes: 7
  SpecialPollInterval: 3600
  EventLogFlags: 0

PowerShell (Domain Controllers)

# On PDC Emulator
w32tm /config /manualpeerlist:"ntp.grovestreet.zip" /syncfromflags:manual /reliable:yes /update
Restart-Service w32time
w32tm /resync /rediscover

Note: Only configure the PDC Emulator to sync externally. Other DCs sync from it via the domain hierarchy.

DHCP Option 42 (NTP Servers)

Configure your DHCP server to distribute the NTP server address automatically to all clients.

ISC DHCP Server

# /etc/dhcp/dhcpd.conf
option ntp-servers ntp.grovestreet.zip;

Windows DHCP Server

# PowerShell
Add-DhcpServerv4OptionDefinition -OptionId 42 -Name "NTP Servers" -Type IPv4Address -MultiValued
Set-DhcpServerv4OptionValue -OptionId 42 -Value "YOUR_NTP_IP"

# Or via GUI:
# DHCP Manager → Server Options → Configure Options
# → 042 NTP Servers → Add IP address

pfSense / OPNsense

Services → DHCP Server → [Interface]
  → Other Options → NTP Server 1: ntp.grovestreet.zip

Ubiquiti UniFi

Settings → Networks → [Network] → DHCP
  → DHCP NTP Server: 178.238.99.189

📊 Real-time Statistics

Server Tracking Info
Time Reference --
Accuracy --
Root Delay --
Root Dispersion --
Stratum Level --
Traffic Statistics
Total NTP Packets --
Packets/sec --
Traffic Rate --
Active Clients --
Dropped Packets --

🛰️ GPS Status

Satellites Locked --
Fix Quality --
HDOP --

📡 About This Project

The Open Time Project provides free, high-accuracy time synchronization using a GPS-disciplined Stratum 1 NTP server. Unlike typical Stratum 2+ servers that sync from other NTP servers over the internet, this server derives time directly from GPS satellites with nanosecond-level precision.

The Signal Path

GPS Satellites → u-blox NEO-M9N: GPS satellites carry atomic clocks and broadcast precise time signals. The u-blox NEO-M9N GPS module receives these signals and produces two outputs:

NMEA → gpsd → Chrony: The NMEA data flows through gpsd (GPS daemon) which parses it and shares via shared memory. Chrony reads this for coarse time-of-day, but NMEA has ~45ms latency due to serial transmission — not precise enough on its own.

PPS → SDP2 → PHC: The PPS signal is routed via a direct PCB trace to the Intel i226 NIC's SDP2 (Software Defined Pin). When the pulse arrives, the NIC's PHC (PTP Hardware Clock) — backed by a TCXO (Temperature Compensated Crystal Oscillator) — timestamps exactly when it saw the pulse.

ts2phc → PHC Discipline: The ts2phc service reads these timestamps from /dev/ptp0. Since PPS pulses are defined to arrive exactly at .000000000, ts2phc can calculate the error. For example: "PHC said pulse arrived at .000000247 — that's 247ns fast." It then adjusts the PHC oscillator frequency to correct the drift, creating a continuous feedback loop that keeps the hardware clock aligned to GPS atomic time within nanoseconds.

PHC → Chrony → NTP Clients: Chrony reads the GPS-disciplined PHC directly as its primary time source. The PHC runs in TAI (International Atomic Time = UTC + 37 seconds), so Chrony applies the offset correction internally before serving UTC to NTP clients.

Holdover

If GPS signal is temporarily lost, the TCXO maintains timing accuracy. With ~280ppb stability, the clock drifts only ~1ms per hour — plenty of time for GPS to reacquire.

Hardware

Raspberry Pi 5, TimeHAT v6, TCXO-backed Intel i226-LM NIC with hardware timestamping, u-blox NEO-M9N GPS module.

🔗 Resources