Time by telephone · NIST ACTS and WWV formats

Accurate time,
over a telephone line.

No internet connection, no GPS antenna — just a phone line. Dial in with a modem to synchronise a computer clock on the exact on-time marker, or call and listen to a talking clock in the format of the shortwave time station WWV. Open-source software for Linux.

Live time code, as transmitted
      MJD  YR-MO-DA HH:MM:SS ST L DUT1 msADV           OTM
-----                                                     
UTC
--:--:--
MJD
-----
DST (EU)
--

Live demo

Watch a synchronisation call

This simulation runs the same logic as actsd and actsc, driven by your browser's clock. On the left is the serial data stream the client reads from its modem at 240 characters per second. On the right is the actsc log. The simulated client clock starts off by a random amount, and the modem handshake is shortened.

/dev/ttyUSB0 · 2400 8N1 on hook

        
actsc · /var/log/actsc

          
Client clock error—
Samples0 / 10
Median offset—

How it works · modem time service

From a dial tone to a set clock

  1. Your computeractsc
  2. ModemUSB / serial, or software V.22bis
  3. Telephone networkPSTN or VoIP
  4. SIP PBX / providerSIP + RTP
  5. Time serveractsd + spandsp
1

Dial

actsc sends your AT commands to the modem and dials. In SIP mode, it places a VoIP call and uses a software modem instead.

2

Handshake

actsd answers and trains a V.22bis 2400 bps link with the spandsp software modem — the same standard your hardware modem speaks.

3

Time codes

Every second the server sends the date and time of the next second, in the NIST ACTS line format, followed by the on-time marker *.

4

On-time marker

The * leaves 50 ms early (the msADV field) to compensate for modem and network delay, so it arrives on the second.

5

Set the clock

actsc timestamps each marker, requires consecutive seconds, takes the median offset and steps the system clock with millisecond resolution.

Live audio demo · utbd

Listen to the time signal

Call +36 72 223 036 from any phone and you hear a time signal in the format of WWV, the NIST shortwave time station: second ticks, minute and hour markers, standard tones, a 100 Hz time code and a spoken announcement. Press play to hear it here: your browser generates the signal live from your computer's clock, the same way utbd does.

--:--:-- UTC · your computer's clock

Press play to start the broadcast.

100 Hz time code, this minute
0 · 170 ms 1 · 470 ms position marker · 770 ms
  • Ticks 5 ms of 1000 Hz (WWV) or 1200 Hz (WWVH) every second, except 29 and 59
  • Markers 800 ms tone at each minute; 1500 Hz at the top of the hour
  • Tones 500 / 600 Hz on alternating minutes, 440 Hz once an hour
  • Voice "At the tone …", at :52.5 (WWV, male) or :45 (WWVH, female)

The public service broadcasts the WWV format. utbd can also produce WWVH, the Hawaii station's variant with 1200 Hz ticks and a female voice, so you can compare them here. The 100 Hz time code is a low hum below the telephone band. You hear it here and over VoIP, but an analog telephone line filters it out.

How it works · WWV-format time signal

Reading the WWV format

The service at +36 72 223 036 broadcasts in the format of WWV, the NIST shortwave time station in Fort Collins, Colorado, as described in NIST Special Publication 250-67. Every piece of information is in the audio: a listener can read the time by ear, and a computer can decode the time code.

  1. Server clockUTC
  2. utbdWWV signal generator
  3. SIP PBX / providerSIP + RTP
  4. Telephone networkPSTN or VoIP
  5. Your telephoneor a decoder
1

Count the ticks

A 5 ms, 1000 Hz tick marks every second, in 40 ms of silence. Ticks 29 and 59 are missing, so you always know where you are in the minute.

2

Hear the time

At 52.5 seconds a male voice announces the coming minute: "At the tone, twenty hours, sixteen minutes, Coordinated Universal Time."

3

Mark the tone

The minute starts at the beginning of an 800 ms tone: 1000 Hz each minute, 1500 Hz at the top of the hour.

4

Standard tones

Seconds 1–45 carry 500 Hz in even and 600 Hz in odd minutes, and 440 Hz (A440) in minute 2 of every hour except 00. Some minutes are silent.

5

Decode the code

A 100 Hz subcarrier carries the full date and time in binary, one bit per second. It is the only part that gives the year and day of year.

Decoding the 100 Hz time code

  1. Band-pass the audio around 100 Hz and follow its envelope. The time code needs a G.711 VoIP path or a recording; an analog line filters 100 Hz out.
  2. Each second carries one pulse of raised amplitude, starting 30 ms after the tick: 170 ms means 0, 470 ms means 1, 770 ms is a position marker.
  3. Position markers fall on seconds 9, 19, 29, 39, 49 and 59. Second 0 has no pulse: that hole after the marker at second 59 is the frame reference.
  4. Read each decimal digit as four bits, weights 1-2-4-8, least significant bit first.
  5. The frame describes UTC at its start, the moment of the minute marker that began it.
SecondsContent
0No pulse (frame reference)
2, 55Daylight saving at 00:00 / 24:00 UTC today
3Leap second warning
4–7, 51–54Year: units, tens
10–13, 15–17Minute: units, tens
20–23, 25–26Hour: units, tens
30–33, 35–38, 40–41Day of year: units, tens, hundreds
50, 56–58UT1 − UTC: sign, tenths of a second
9, 19 … 59Position markers

Use cases

When the network is not an option

Air-gapped systems

Keep isolated networks on time without opening them to the internet. A phone line carries only the time code, never your data.

Industrial & SCADA

Substations, pumping stations and controllers often still have a phone line but no reliable IP link. Timestamped events need a correct clock.

Backup time source

A diverse fallback for when GPS is jammed or spoofed, or NTP is unreachable. It uses a different medium and fails in different ways.

Legacy & retro computers

Any machine with a serial port and a terminal program can read the time — the format is plain ASCII, 8N1.

Remote & off-grid sites

Weather stations and data loggers on a landline or GSM voice link can sync once a day with a 20-second call.

Your own private service

Connect actsd to your own SIP PBX and give your organisation an in-house dial-in time source, disciplined by your own reference clock.

Open source · GPL-2.0-or-later

Three programs, two services

Small C programs built on spandsp and the Sofia-SIP stack. They work with any SIP PBX or provider (Asterisk, FreeSWITCH, hosted PBXs, SIP trunks) or take calls directly, and each comes with a hardened systemd unit.

actsd

server

The time service daemon. It registers with a SIP PBX or provider, answers calls with a software V.22bis modem over G.711 RTP, and transmits ACTS time codes.

  • V.22bis 2400 bps, 8N1, NIST ACTS line format
  • On-time marker advanced by 50 ms
  • ? help and % disconnect commands
  • Hangs up on a lost line or busy tone; every call is capped by a watchdog
  • Accepts calls only from its PBX or allowed addresses
  • Hardened systemd unit with an unprivileged user and a syscall filter
# /etc/actsd/actsd.conf
registrar = pbx.example.com
username  = actsd
password  = changeme
tgaboreu/actsd

actsc

client

The clock synchronisation client. It calls an ACTS-format server through a physical modem or over SIP, validates the time codes and sets the system clock.

  • TTY mode: any Hayes-compatible modem
  • SIP mode: software modem, no hardware needed
  • Median of consecutive on-time markers
  • Offset sanity limit and dry-run mode
  • One-shot, or a service that syncs every N seconds
  • Hangs up first (DTR), so the modem never prints line noise
# /etc/actsc/actsc.conf
mode         = tty
tty          = /dev/ttyUSB0
at_init      = ATZ,ATE0,ATM0
number       = 0672223035
service_mode = yes
tgaboreu/actsc

utbd

broadcast

The UTC Time Broadcast Daemon. It answers SIP calls and plays a time signal in the WWV format (or WWVH), generated live from UTC.

  • Ticks, minute and hour markers, 440 / 500 / 600 Hz tones
  • 100 Hz BCD time code, DST bits and UT1 doubled ticks
  • Voice announcement from WAV files (Piper or espeak-ng script included)
  • Many listeners at once, with a limit per call
  • Accepts calls only from its PBX or allowed addresses
  • --render writes the signal to a WAV file for testing
# /etc/utbd/utbd.conf
registrar = pbx.example.com
username  = utbd
password  = changeme
station   = wwv
tgaboreu/utbd

Quick start

# Dependencies: apt install libspandsp-dev libsofia-sip-ua-dev
git clone https://github.com/tgaboreu/actsc.git
cd actsc && make && sudo make install

# Test without touching the clock
sudo actsc --mode tty --tty /dev/ttyUSB0 --number 0672223035 --dry-run

Public services

Call the time

Both services are open to everyone. Calls are charged at your carrier's normal rate for a Hungarian geographic number (Pécs, area code 72).

Modem time service · actsd

International
+36 72 223 035
From Hungary
06 72 223 035
Modulation
ITU-T V.22bis, 2400 bps
Framing
8 data bits, no parity, 1 stop bit
Error correction
None (disable V.42 / MNP)
Max call length
40 seconds
# From any terminal program (minicom, screen, cu …)
AT&F          # factory defaults
AT&Q0\N0      # no error correction (command varies by modem)
ATDT0672223035
CONNECT 2400

# … banner, then one line per second:
61337 26-10-24 17:45:41 50 0 +.0 050.0 UTC(ACTS) *

While connected, type ? for the help text, or % to disconnect at the next on-time marker.

WWV-format time signal · utbd

International
+36 72 223 036
From Hungary
06 72 223 036
Format
NIST WWV broadcast format
Equipment
Any telephone
Max call length
3 minutes

Just listen. Every second ticks; each minute begins with a long tone and is announced in advance: "At the tone, twenty hours, fifteen minutes, Coordinated Universal Time." The time is valid at the start of the long tone.

Use it to set a watch, check a clock, or start a stopwatch on the tick. Try it in your browser first.

ACTS time code format

FieldExampleMeaning
MJD61337Modified Julian Day; advances at 00:00 UTC
YR-MO-DA26-10-24UTC date
HH:MM:SS17:45:41UTC time, valid at the on-time marker
ST50Daylight saving (EU rules): 00 standard, 50 summer time
L0Leap second warning: 0 none, 1 insert, 2 delete
DUT1+.0UT1 − UTC in tenths of a second
msADV050.0How early the marker is sent, in milliseconds
LabelUTC(ACTS)Time scale label
OTM*On-time marker: the instant the time code refers to

FAQ

Questions

How accurate is it?

The time code carries whole seconds; the on-time marker defines the instant. The result is limited by how much the path delay varies: typically a few tens of milliseconds over a VoIP route, plus the latency of your serial port. That is well within what logging, billing and most control systems need.

Is this the NIST service?

No. These are independent services and are not affiliated with NIST. The modem service uses the line format of the NIST Automated Computer Time Service (ACTS), labelled UTC(ACTS), at V.22bis 2400 bps. The spoken time signal uses the audio format of the NIST radio station WWV, with its own station identification. Both use European daylight saving rules.

How accurate is the spoken time signal?

utbd starts each tick on the second by the server's clock. You hear it a little later: tens of milliseconds over a landline or VoIP, and sometimes over 100 ms on a mobile phone. For setting a watch by ear, that is far below what you can notice.

Why not just use NTP?

Use NTP wherever you can. ACTS-style dial-up is for systems that cannot or must not reach the internet, and as an independent fallback for GPS and NTP.

Does it work over VoIP lines and mobile phones?

Usually, yes, as long as the path uses the G.711 codec end to end. Compressed codecs (G.729, AMR) and aggressive jitter buffers can prevent the modem from training. 2400 bps is far more tolerant than V.34 or V.90.

What does the client need?

Linux, a Hayes-compatible modem (USB modems work fine), and permission to set the clock (CAP_SYS_TIME). The supplied systemd unit grants exactly that capability to an unprivileged user.