Experimental setup
- 01Satellites. GPS, Galileo, GLONASS and BeiDou constantly broadcast their time, measured by atomic clocks on board.
- 02Antenna and receiver. A u-blox NEO-M9N receives all four systems at once and also delivers a pulse per second (PPS): an electrical signal exactly at the start of every second.
- 03
- 04The network. Every device in the house asks via NTP: “What time is it?” The answer is right to the millionth of a second.
Evidence
Build your own (DIY)
Not a kit, but every part can be bought on its own. For the clock itself:
- Raspberry Pi 4, here with a PoE HAT, so power comes over the network cable
- GPS receiver SparkFun NEO-M9N (GPS-15712), because of the pulse per second (PPS)
- active GPS antenna with an SMA connector, plus an SMA cable and an adapter to U.FL
- Software:
gpsdandchrony
For the antenna heater, in case it freezes where you live too:
- Polyimide heating mat 12 V / 25 W and a 12 V power supply
- NTC 10 kΩ temperature sensor (B3950) with a stainless steel probe
- ADS1115 analogue-to-digital converter, because the Pi has no analogue input
- 5 V relay module, active low: it is off before any software is even running
Winter operation
The antenna needs a clear view of the sky. That is exactly why it cools down on clear nights and gets frost. Once it ices up, reception is gone, and the clocks in the house hang on the internet again instead of the atomic clock in space.
So there is a 12 V heating mat under the antenna plate, with a temperature sensor on top. The Pi switches it on at 2 °C and off again at 6 °C. Not to keep it warm, only against ice.
Most of the software, by the way, is about switching the heater off: when the sensor reports nonsense, when it gets too hot, when current flows although the mat should be off. 25 watts under insulation, right next to a plastic antenna: caution is half the circuit.
Why?
Because it can be done. And because a lot in the homelab depends on it: certificates, passkey logins, log files, backups. When two computers disagree about the time, strange errors follow. With a stratum 1 source of their own, they never disagree.
Test result
Passed. The test subject (a Raspberry Pi 4) showed no signs of time drift.


