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.
Time by telephone · NIST ACTS and WWV formats
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.
MJD YR-MO-DA HH:MM:SS ST L DUT1 msADV OTM -----
Live demo
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.
How it works · modem time service
actsc sends your AT commands to the modem and dials. In SIP mode, it places a VoIP call and uses a software modem instead.
actsd answers and trains a V.22bis 2400 bps link with the spandsp software modem — the same standard your hardware modem speaks.
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 *.
The * leaves 50 ms early (the msADV field) to compensate for modem and network delay, so it arrives on the second.
actsc timestamps each marker, requires consecutive seconds, takes the median offset and steps the system clock with millisecond resolution.
Live audio demo · utbd
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.
Press play to start the broadcast.
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
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.
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.
At 52.5 seconds a male voice announces the coming minute: "At the tone, twenty hours, sixteen minutes, Coordinated Universal Time."
The minute starts at the beginning of an 800 ms tone: 1000 Hz each minute, 1500 Hz at the top of the hour.
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.
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.
| Seconds | Content |
|---|---|
| 0 | No pulse (frame reference) |
| 2, 55 | Daylight saving at 00:00 / 24:00 UTC today |
| 3 | Leap second warning |
| 4–7, 51–54 | Year: units, tens |
| 10–13, 15–17 | Minute: units, tens |
| 20–23, 25–26 | Hour: units, tens |
| 30–33, 35–38, 40–41 | Day of year: units, tens, hundreds |
| 50, 56–58 | UT1 − UTC: sign, tenths of a second |
| 9, 19 … 59 | Position markers |
Use cases
Keep isolated networks on time without opening them to the internet. A phone line carries only the time code, never your data.
Substations, pumping stations and controllers often still have a phone line but no reliable IP link. Timestamped events need a correct clock.
A diverse fallback for when GPS is jammed or spoofed, or NTP is unreachable. It uses a different medium and fails in different ways.
Any machine with a serial port and a terminal program can read the time — the format is plain ASCII, 8N1.
Weather stations and data loggers on a landline or GSM voice link can sync once a day with a 20-second call.
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
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.
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.
# /etc/actsd/actsd.conf
registrar = pbx.example.com
username = actsd
password = changeme
tgaboreu/actsd
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.
# /etc/actsc/actsc.conf
mode = tty
tty = /dev/ttyUSB0
at_init = ATZ,ATE0,ATM0
number = 0672223035
service_mode = yes
tgaboreu/actsc
The UTC Time Broadcast Daemon. It answers SIP calls and plays a time signal in the WWV format (or WWVH), generated live from UTC.
--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
# 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
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).
# 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.
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.
| Field | Example | Meaning |
|---|---|---|
| MJD | 61337 | Modified Julian Day; advances at 00:00 UTC |
| YR-MO-DA | 26-10-24 | UTC date |
| HH:MM:SS | 17:45:41 | UTC time, valid at the on-time marker |
| ST | 50 | Daylight saving (EU rules): 00 standard, 50 summer time |
| L | 0 | Leap second warning: 0 none, 1 insert, 2 delete |
| DUT1 | +.0 | UT1 − UTC in tenths of a second |
| msADV | 050.0 | How early the marker is sent, in milliseconds |
| Label | UTC(ACTS) | Time scale label |
| OTM | * | On-time marker: the instant the time code refers to |
FAQ
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.
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.
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.
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.
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.
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.