DCF77 Meteotime Decoding – Technical Details
What Was Achieved
The goal was to fully decode the DCF77 Meteotime weather data, including its actual content.
✔️ Bitstream fully understood
✔️ 3-minute frame structure reconstructed
✔️ Decoder and crypto correctly implemented
✔️ Validation via 0x2501 magic check confirmed
✔️ Weather data (temperature, conditions, wind) decoded
✔️ Regions and forecast sections identified
👉 Result:
The system is now understood — from raw RF signal to human-readable weather data.
For many years, numerous attempts were made to decode Meteotime, with only limited success.
Today, with modern tools, the process has become much more accessible.
👉 The approach used here was simple:
- Provide real DCF77 recordings
- Combine them with publicly available reference implementations
- Let AI iteratively generate and refine a decoder
- Let AI automatically test against real data until valid decryption is achieved
👉 The result is a fully working decoder — without manually writing a single line of code.
📦 Data Structure
Meteotime data is embedded into the standard DCF77 signal and transmitted in 3-minute frames.
Each frame consists of 22 payload bits and 20 check bits:
- Minute n: 14 payload bits
- Minute n+1: 8 payload bits + 6 check bits
- Minute n+2: 14 check bits
👉 Total: 42-bit block per dataset
🔐 Encoding & Encryption
Meteotime data is not transmitted in plain form.
- Data is permuted and encoded
- A substitution-based cipher (S-Boxes) is used
- The key is derived from the current time/date
- No key is transmitted
👉 This effectively forms a lightweight broadcast cryptosystem
🔄 Decoding Process
- Bitstream acquisition
Detect pulses and convert to binary - Frame assembly
Group into 3-minute blocks - Integrity check
Validate using check bits - Key generation
Derived from decoded time - Decryption
Reverse permutation and substitution - Interpretation
Map to weather data
🔍 The Road to the Solution
🧩 Phase 1 – Crypto Analysis
- S-Boxes and permutations analyzed
- Time-based key hypothesis
❌ No valid output
👉 Insight: Input data was wrong, not the algorithm
🧩 Phase 2 – Heuristic Reconstruction
- Sliding windows
- Bit order experiments
- Key variations
❌ No stable results
👉 Insight: Missing correct framing
💡 Breakthrough (Phase 3)
The breakthrough came from publicly available reference code.
Key findings:
- Fixed 3-minute frames
- Frame alignment:
(minute - 1) % 3 - Edge case:
- minute = 0 → underflow → 255 →
255 % 3 = 0✅
- minute = 0 → underflow → 255 →
- Total structure: 82 bits
- 42 weather bits
- 40 time bits
- Time taken from minute 2
- Bit 7 is skipped ❗
- Info bits are not part of the key
👉 This was the turning point.
⚙️ Decoder Implementation
📡 Input
Per minute:
- 14 weather bits
- Full time information
🧱 Frame Assembly
- Minute 1 → Weather A
- Minute 2 → Weather B + Time
- Minute 3 → Weather C
→ 42 weather bits
🧠 Data Buffer
[ 0..41 ] = weather
[ 42..81 ] = time
⚠️ Bit 7 is skipped
🔐 Cipher & Key
- Cipher → weather bits
- Key → time bits
🔓 Decryption Output
[ byte0 | byte1 | byte2 | byte3 | byte4 ]
✅ Validation
plain[1..2] == 0x2501
👉 Confirms valid decode
🌦️ Payload
- Lower 22 bits contain weather data
🌍 Data Mapping
| Bits | Meaning |
|---|---|
| 0–3 | Day weather |
| 4–7 | Night weather |
| 8–11 | Extreme / wind direction |
| 12–14 | Rain / wind strength |
| 15 | Anomaly flag |
| 16–21 | Temperature |
🗺️ Regions & Sections
- Regions derived from frame index
- Sections define forecast timeline
🚀 Summary
Meteotime is far more than “extra data” in DCF77 — it is a:
- Structured data protocol
- With error detection
- And time-dependent encryption
👉 A surprisingly sophisticated system for a 77.5 kHz broadcast signal.
A reference implementation of this approach is publicly available on GitHub:
https://github.com/johndcf/dcf77-meteotime-decoder
Also the live decoder is taken from GitHub:
https://github.com/johndcf/DCF77-Meteotime-Live-Monitor