11 KiB
Amateurfunk-Anki
Download the German amateur-radio exam question catalog from the Bundesnetzagentur and turn it into Anki decks.
Quick start
make # fetch + build everything (default)
make fetch # download + extract the catalog only → data/
make anki # rebuild the five exam decks from data/ → anki/
make shorthand # rebuild the Q-group / operating-abbreviation deck → anki/
make technical # rebuild the technical / HAM-abbreviation deck → anki/
make test # run all test suites
make clean # remove data/ and anki/
Output: seven .apkg files under anki/.
Five exam decks built from the catalog: Betriebliche and
Vorschriften get one deck each (shared across all license classes);
Technische is split per class into three decks (N / E / A) following
the catalog's class field. A class-A candidate who wants every
Technische question imports all three Technische decks.
Two glossary decks of radio shorthand — Q-groups and operating abbreviations, and technical/HAM abbreviations — built from curated data rather than the catalog (see Glossary decks).
Re-importing a newer build preserves your review history.
Exam sections
The BNetzA exam has three parts (Prüfungsteile): two shared across all license classes plus the technical part, which is split per license tier. The question ID's first letter encodes which part it belongs to:
Non-technical (one deck each, taken by every candidate):
| Section | ID prefix | Questions |
|---|---|---|
| Betriebliche Kenntnisse | B* |
172 |
| Kenntnisse von Vorschriften | V* |
204 |
Technical (one deck per license class):
| Class | Section name | ID prefix | Questions |
|---|---|---|---|
| N | Technische Kenntnisse (N) | N* |
195 |
| E | Technische Kenntnisse (E) | E* |
463 |
| A | Technische Kenntnisse (A) | A* |
716 |
Counts are from the current edition (3. Auflage, März 2024; ~1750
questions total). The license tiers are cumulative for the exam:
a class-E candidate is responsible for N* + E* + B* + V*;
a class-A candidate is responsible for everything. Filter inside
Anki by deck, by the klasse-N|E|A tag, or by the Number field
prefix.
Glossary decks
Two extra decks teach the radio shorthand a candidate actually needs —
the codes used in the exam plus the most common ones used on the
air that the exam never tests (real operating knowledge, not just the
test). They are built from hand-curated JSON, independent of the
catalog, so they build even without make fetch:
| Deck | Source | Builder |
|---|---|---|
amateurfunk-abkuerzungen-q-gruppen.apkg |
shorthand.json |
amateurfunk_shorthand.py |
amateurfunk-technische-abkuerzungen.apkg |
technical.json |
amateurfunk_technical.py |
- Q-groups & operating abbreviations — Q-codes (QRM, QSO, QSY…), CW/voice shorthand (CQ, DE, 73, RST…), prosigns, and the distress/urgency signals (MAYDAY, SOS…).
- Technical & HAM abbreviations — modulation and modes (SSB, FM, CW), signal domains (NF, HF, ZF), building blocks (VFO, PLL, AGC), components, measurements (dB, SWR, PEP), propagation, digital modes, and the organisations/regulations (ITU, CEPT, EMV).
Each code is a single Anki note with two cards: one prompts for the
meaning given the code, the reverse prompts for the code given the
meaning. A Q-group means one thing as a statement (QSO) and another
as a question (QSO?), so each becomes two notes (four cards).
Filter inside Anki by tag: pruefung marks codes that appear in the
exam catalog; q-gruppe / abkuerzung and (technical deck)
kategorie-* mark the kind; prosign and notsignal mark prosigns
and the non-amateur distress signals. The pruefung flags and the
meanings were cross-checked against the BNetzA catalog — pruefung
means "this code's meaning is tested", not merely "the string appears
somewhere".
⚠ Important: AI-generated content.
shorthand.jsonandtechnical.jsonare compiled with AI assistance. As with the explanations and references, verify anything that looks off against a primary source (the catalog, the ARRL/DARC Q-code lists, or the resources under See also) before relying on it.
Exam question source
The catalog is published by the Bundesnetzagentur (BNetzA), the German federal regulator for telecommunications. Current edition: 3. Auflage, März 2024 (issued 2024-03-20, ~1750 questions across license classes N, E, A).
- Landing page: https://www.bundesnetzagentur.de/DE/Fachthemen/Telekommunikation/Frequenzen/SpezielleAnwendungen/Amateurfunk/start.html
- Machine-readable ZIP (what we download):
PruefungsfragenZIP.zip— contains the JSON question tree, thesvgs/figure folder, and aREADME.txtwith the official Quellenvermerk. - Human-readable PDF (not used by this pipeline):
Pruefungsfragen.pdf
BNetzA replaces the file in place across editions, so the URL is
stable; the fetcher detects updates via the HTTP Last-Modified
header.
Exam aids (Hilfsmittel)
BNetzA publishes an official aid sheet that candidates are allowed to use during the exam — you do not have to memorize anything it contains:
It bundles the BNetzA frequency-allocation table (band limits, usage
parameters, and maximum power per class), the IARU band plans, the
German Rufzeichenplan (call-sign series → class plus the
international suffixes like /m, /mm, /p), and the Formelsammlung
(formula collection) together with constants and material tables. It
does not contain foreign-country prefixes (Landeskenner),
Q-codes, or the phonetic alphabet — those remain memory items.
Questions whose answer can be read or derived from this sheet carry a Hilfsmittel note in their explanation (see below), so you can tell when something is a lookup in the exam rather than something to learn by heart.
See also
- 50ohm.de — community-maintained explanations, worked examples, and study material for the same exam. Pairs well with these decks for the why behind each question.
- DARC — Deutscher Amateur-Radio-Club, the German national IARU member-society. Publishes the German band plan, regulatory liaison material, and a large body of technical and operating guidance referenced throughout the amateur-radio community.
Requirements
Python 3.11+, standard library only. No third-party dependencies.
Explanations
⚠ Important: AI-generated content. Every explanation shipped with these decks is written by an AI agent following the contract in
EXPLANATIONS.md. AI agents make mistakes — they misread formulas, misquote law text, and confidently cite wrong sources. Do not treat any explanation as the ultimate source of truth. If something looks off, or if an explanation contradicts your existing understanding, verify against the primary source listed in the card (or against the catalog itself, the AFuV/AFuG on gesetze-im-internet.de, or the resources under See also). The official answer is always the one from the BNetzA catalog — the explanation is just a study aid, not an authority. Cards with a small low confidence badge are explicitly flagged as provisional and should be double-checked before you rely on them.
The back of each card optionally carries a terse English explanation
of why the right answer is right. Explanations are not part of the
BNetzA catalog — they're authored separately (by humans or AI agents)
into explanations.json at the repo root. The build is non-blocking
on this: questions without an entry just show no explanation block.
Entries with confidence < 7 render a small "low confidence" badge
so learners know the reasoning is provisional.
Where a question's answer is available in the official exam aid sheet (see Exam aids (Hilfsmittel)), the explanation appends a short Hilfsmittel note — for example pointing at the frequency-allocation table, the IARU band plan, the Rufzeichenplan, or the Formelsammlung — to flag that it is a lookup you may consult during the exam rather than a memory item.
EXPLANATIONS.md is the editorial contract: schema, sourcing
guidance, confidence scale, and the workflows an AI agent should
follow when asked to add or improve entries.
References
⚠ Important: AI-generated content. The files under
references/are compiled by an AI agent from the exam catalog and public sources. AI agents make mistakes — they mis-transcribe figures, miscopy table boundaries, and confidently state things that are subtly wrong. Do not treat these tables as authoritative. Verify against the primary sources cited in each file (the official IARU Region 1 band plans, the AFuV/AFuG on gesetze-im-internet.de, or the BNetzA catalog itself) before relying on them.
The references/ directory holds study aids that span many questions —
lookup tables cross-referenced to the catalog. They are reading material,
not part of the build, and are not bundled into the .apkg decks.
references/Frequencies.md— IARU Region 1 band-plan frequency recommendations (HF through microwave), cross-referenced to the exam questions that test them.references/Call-Signs.md— call-sign patterns, suffixes, and country prefixes that appear in the catalog.references/Q-Codes.md— Q-codes and operating shorthand used in the questions. This reference is the catalogue the Q-group glossary deck (shorthand.json) was built from.
More
CLAUDE.md— project orientation, pipeline overview (including the two glossary decks).DESIGN.md— source-discovery notes, JSON schema, per-stage design contracts.EXPLANATIONS.md— schema + workflows for the explanations database.shorthand.json/technical.json— curated source data for the two glossary decks.
License
The downloader and builder code is in this repo. The exam questions
themselves are published by the Bundesnetzagentur under
DL-DE→BY-2.0; attribution
is preserved in every generated artifact (README.txt inside
data/<edition>/, attribution field in the per-edition manifest).