<!-- Uebersetzung von docs/HANDBUCH.md, Quell-Commit 9097793, Stand 2026-09-01 -->
TowerZERO Handbook
Guide for operators, club board members and operations managers (Betriebsleiter). This handbook describes how to use the web dashboard - no technical background, no command line required. For installation and hardware, see README.md (developer documentation).
This handbook can be read directly in the dashboard: menu item Help (page /hilfe). This file is the source for it - changes made here appear automatically in the Help section after the next update.
Status: 13.08.2026.
How TowerZERO detects flights
TowerZERO listens with several receivers at the same time and automatically builds logbook entries from what it hears:
- ADS-B / transponder (1090 MHz): powered aircraft, helicopters and any aircraft with a transponder - registration, type, position, altitude. Optionally supplemented with internet sources (OpenSky, adsb.fi), which fill gaps in the box's own antenna coverage with data from other receivers.
- FLARM / OGN (868 MHz): gliders, motor gliders and microlights with FLARM - via the Open Glider Network and, depending on the setup, via a dedicated receiver at the airfield itself.
- Airfield radio: the system listens to the airfield frequency and detects calls such as takeoff, landing and position reports (speech recognition following official radiotelephony procedures).
A fusion logic merges the sources: if ADS-B and radio both see the same aircraft, only one entry is created regardless. Circuits with touch-and-go are kept as a single training block with a counter, not as many separate flights. The system also detects aerotow pairs (tow plane + glider) and links both entries.
What you should know about this:
- The geofence determines what counts. Only movements within the configured radius around the airfield (and below the configured altitude) are recorded. Overflights without a landing are filtered out.
- The detection rate is roughly 95-97%. Individual flights can be missing - typically when a device on board was switched off. The logbook is a very solid basis, but it does not replace a checking eye.
- Radio silence on the ground is normal. FLARM and transponders are usually switched off on parked aircraft. An aircraft generally only becomes visible at takeoff - empty displays despite a full apron are not an error.
- Anonymous FLARM identifiers (without a stored registration) are kept as such. The better the home fleet is maintained, the more of them get a name (see the Home fleet chapter).
- All times in the system are UTC.
Chapter: Dashboard
The home page shows today's flight activity at a glance:
- Movements today: takeoffs, landings, total entries, broken down into confirmed and pending.
- Sources today: which reception paths detected today's movements - a quick health check in practice: if a source is missing entirely, it is worth a look at Settings (antenna status).
- Latest flight movements: the most recent entries with registration, type, times, sources and status.
The page refreshes itself automatically every 30 seconds.
Chapter: Logbook
The complete logbook of all recorded movements (retention: 2 years, after which automatic anonymization follows).
- Filter: narrow down the time range with the "From" and "To" fields.
- Columns: registration, callsign, type, takeoff and landing time (UTC), origin/destination, crew, passengers, flight type, sources, status.
- CSV export: the "CSV export" button downloads the filtered time range as a file for Excel.
The status of an entry is either pending (recorded automatically, not yet checked) or confirmed (a person has checked or completed the details). There are two ways to confirm an entry - see the next chapter.
Chapter: Confirming and completing flights
The law requires a few details for every flight that the sensors cannot know: crew, passengers, flight type. There are two pages for this, serving the same purpose for different audiences:
Confirm (for operations managers/tower): all pending flights listed one below the other, with input fields directly in the list:
- Crew and passengers as a number.
- Flight type: circuit, cross-country flight, training, aerotow, aerotow (towed), commercial, or other. The "training" flight type also controls the training-flight discount in invoicing (if enabled).
- Departure and destination airfield: the plain name is enough (e.g. "Bad Neuenahr") - the ICAO code is looked up automatically.
- "Confirm" saves the entry and sets the status.
Pilot portal (for pilots): the same pending flights as cards with all detected details - times, circuits with individual times that can be expanded, aerotow labeling ("towing" / "on tow behind ..."). Via "Complete & confirm" the pilot enters their own details. The portal is reachable via the box's public address - pilots do not need a login.
Chapter: Home fleet
Reachable under Settings (page /admin/aircraft): the list of aircraft based at the airfield. It is the memory of the system - the better it is maintained, the better detection, matching and invoicing become:
- An aircraft detected from the home fleet automatically receives its registration, type and club assignment in its logbook entries.
- The owner name is the billing address used for invoicing (grouped by owner).
- MTOW and fee classification are needed by the matrix mode of invoicing.
- Tow hitch and self-launch (for motor gliders) help with aerotow detection.
Fields per aircraft: callsign (radio), registration, competition number (gliders), type, ICAO hex code (transponder), FLARM ID, OGN callsign, category (glider, motor glider/TMG, powered aircraft, microlight, helicopter), owner type (club, flight school, private, commercial), owner name, tow hitch, self-launch, MTOW, fee classification, notes. The category overrides automatic classification - when in doubt, set it explicitly here.
Two helpers take work off your hands:
- Auto-suggestions: aircraft that regularly take off from the airfield but are not yet in the list are suggested by the system with all known data - one click adopts them.
- Unmatched FLARM IDs today: FLARM identifiers without a known registration that have been at the airfield several times today can be assigned directly to an aircraft in the home fleet via a selection menu.
Chapter: Live map
The live map (menu item "Map") shows the current airspace around the airfield:
- Aircraft in real time with identifier, altitude and track; the color corresponds to the altitude.
- The geofence radius is drawn in - what lies inside it is recorded.
- Map layers: road map and topographic map, optionally an airspace overlay (if configured).
The map serves visualization and verification ("does the system see what I see?") - the logbook is generated independently of it.
Chapter: FLARM local (add-on feature)
The menu item "FLARM" shows the direct FLARM reception of the box's own antenna: all aircraft received in the last 24 hours with distance, altitude and observation count - including those outside the geofence. Useful for glider operations (range monitoring, who was flying today) and for antenna diagnostics.
This feature requires additional receiver hardware and an activation code; without activation, the page shows a corresponding notice. Activation is done in Settings, section OGN/FLARM.
Chapter: Logbook widget for the club website
The logbook can be embedded in your own website. The page /embed/docs provides the ready-made code to copy (an iframe) along with a preview.
- No login required: visitors see the flights from today and yesterday; pilots can add their own details directly in the widget.
- Privacy: only data that is publicly receivable anyway (registration, times) is displayed. Additional details such as crew and passengers are stored, but not displayed publicly.
- Abuse protection: saving is limited to 30 operations per minute and sender.
- The widget fetches the data live from the TowerZERO box; if it is offline, it shows an error message.
Chapter: Invoicing (landing fees)
What the feature does
TowerZERO records landings automatically. The invoicing feature turns this into a billing basis: it groups all landings by owner, calculates them using your fee schedule, and exports the result as a CSV file, a printable receipt, or a draft invoice.
Three principles you should know:
- Automatic recording, honestly disclosed. The detection rate is roughly 95-97%. Every statement is a basis for checking, not a verified invoicing document. Aircraft that cannot be matched (e.g. anonymous FLARM identifiers) are shown visibly as their own line item - these are your lost fees.
- Every touchdown counts as a landing. Circuits with touch-and-go are counted as well (the usual rule under approved fee schedules).
- All amounts are net. VAT is added on top when the invoice is issued.
Turning it on
The feature is switched off by default and does not interfere with plain logbook operation. To activate it:
- Open Settings, scroll to the Add-on features section.
- Check the box "Enable invoicing feature (landing fees)".
- The Invoicing menu item then appears at the top of the navigation (between FLARM and Settings).
Setting up the fee schedule
You maintain the fee schedule once by hand - after that it stays in place. There are two modes (selectable at the top of the invoicing page, confirmed with "Save mode"):
Simple (6 classes) - sufficient for most club airfields. One amount per landing for each class:
- Microlight
- Glider
- Motor glider (TMG)
- Helicopter
- Powered aircraft
- Standard / other (catch-all class if nothing else fits)
The class is detected automatically from the registration and aircraft type. Note on motor gliders: genuine touring motor gliders (e.g. SF 25 Falke, Super Dimona, G109) fall into the TMG class. Gliders with a sustainer engine (e.g. Discus-2cT) still count as gliders - they take off on tow and land like gliders.
Matrix (categories x MTOW) - for airfields with an approved fee schedule based on noise categories and weight classes (typical example: public-use airfields such as Bonn/Hangelar). You create your own categories as rows (e.g. "Noise category A", "Noise category B"), each with amounts for the weight tiers:
- up to 1,000 kg / up to 1,200 kg / up to 1,400 kg / up to 2,000 kg (fixed amounts)
- above 2,000 kg: a rate per commenced 1,000 kg of maximum takeoff weight
Additionally possible:
- Flat rate: if a row has an amount in the "Flat rate" column, the weight tiers are ignored - typical for the glider flat rate.
- Glider default: exactly one row can be marked as the default for gliders. All aircraft detected as gliders without their own classification land there automatically.
For the matrix to be able to calculate, every aircraft needs two master data fields in the home fleet (page /admin/aircraft):
- MTOW (kg): maximum takeoff weight per the certificate.
- Fee classification: the name of the matrix row, exactly as named in the table (e.g. "Noise category A").
For visitors, the usual proof-of-classification logic of approved fee schedules applies:
- Visitor with known MTOW but without a classification: the most expensive category of its weight class applies ("without proof").
- Visitor without MTOW: the aircraft is shown as **"cannot be classified"** with 0.00 - the system does not guess. Add the MTOW afterwards (adding the aircraft to the home fleet is enough, even for regular visitors), and the next export will calculate it correctly.
Individual rates per registration exist in both modes: a fixed amount for a specific registration overrides every class and every matrix row. Also practical as 0.00 - for example for fee-exempt official service flights.
Training-flight discount: optionally you can store a percentage (field next to the mode selection). It is deducted automatically whenever the logbook entry has the flight type "Training" set. You maintain the flight type by hand on the entry - the system does not detect training flights itself. On the receipt, the deduction appears transparently as "Training flight (-X%)".
Invoicing run: bill without forgetting anything
The system works on the principle of "not yet invoiced":
- The page shows under "Pending landings" everything that has accumulated since the last run - grouped by owner, with totals.
- "Close run + CSV" takes exactly these landings into a new, numbered run and downloads the CSV file. Every landing ends up in exactly one run - never twice, never forgotten. Late additions (landings detected later) automatically appear in the next run.
- "Export CSV preview" downloads the same statement without closing a run - for checking beforehand.
- Option "Exclude club aircraft": the aircraft of the operating club (owner type "club" in the home fleet) then do not appear on the invoice. The run still books them, so they do not pile up as "pending".
- Closed runs are listed at the bottom of the page and can be downloaded again at any time as CSV or receipt. Important: re-downloads calculate using the fee rates current at that time; the totals column of the table shows the state at the time of closing.
The CSV file is prepared for Excel (German version): semicolon- separated, amounts with a comma.
Receipts: the landing overview
The receipt is an informative statement - explicitly not an invoice document and not a request for payment. It carries a corresponding notice in the footer. It comes in two variants:
- Daily receipt: all landings of one calendar day. Select a date, "View daily receipt" - done. The daily receipt is purely informative and does not book anything.
- Run receipt: the individual record for a closed run (link "Receipt" in the runs table) - as an attachment to the invoicing.
Both show one sheet per owner with all flights, rates and totals. Printing in the browser produces a PDF (button "Print / save as PDF" - in the print dialog choose "Save as PDF").
Daily closing: sending receipts by email
Whoever closes the airfield in the evening can send the day's receipts with one click: "Daily closing: send receipts".
- The internal recipient list (e.g. operations manager, bookkeeping) receives the overall receipt with all owners.
- Owners with a stored email address receive only their own receipt. You maintain the addresses in the "Owner email addresses" table on the invoicing page. Owners without an address are simply skipped.
- Every send is logged (a display of the most recent sends appears on the page).
This requires email sending to be set up via the operator's mailbox. This can be done directly on the invoicing page: section "Set up email sending (operator mailbox)" - enter SMTP server, port, username, password, encryption (STARTTLS on port 587 or SSL on port 465), sender address and the internal recipients, save, done (takes effect immediately). With "Send test email" you can check the saved settings right away - the test email goes to any address or to the first internal recipient. You get the access data from your email provider; if in doubt, the TowerZERO service can help. As long as no sending is set up, the send button does not appear.
Handover to accounting software
Instead of manual CSV work, TowerZERO can hand off closed runs directly as draft invoices to Papierkram (button "Create drafts" in the Papierkram column of the respective run). One draft is created per owner with all line items; checking and sending happens in the accounting software - TowerZERO does not issue invoices. The handover is safe to repeat: owners already handed off are skipped on a second click. This requires a Papierkram account of the operator (API access in the configuration). Further providers (Lexware Office, Billomat) are prepared, but not yet available.
What invoicing deliberately cannot do
- Helicopter hover time (fee per commenced minute) cannot be reliably measured by the system - please add it by hand.
- Complex training-flight rule sets (discount only at certain times, minimum amounts, only certain noise categories) are not represented by the percentage field - it applies a uniform deduction.
- Emergency landings and other case-by-case exemptions: correct the affected entry in the logbook before closing the run, or create an individual rate of 0.00 for permanently exempt registrations.
- Parking fees (per night) are not recorded by the system - it counts landings, not standing time.
- Annual refunds (e.g. for gliding clubs) you calculate outside the system; the runs provide the totals for this.
Short checklist for setup
- Settings: enable the invoicing feature.
- Choose the fee mode (simple or matrix), enter amounts, save.
- Check the home fleet: owner names set? For matrix mode: MTOW and classification for each aircraft?
- Optional: individual rates (e.g. 0.00 for official flights), training-flight discount, owner email addresses.
- After a few days: check the CSV preview, close the first run.
Chapter: Settings
The Settings page bundles configuration and system status. The technical setup (receivers, frequencies, data sources) is usually handled by the TowerZERO service - in everyday use, these areas are of primary interest:
- Airfield and geofence: master data of the airfield and the detection area (radius and maximum altitude). Changes here directly affect what makes it into the logbook.
- Antenna status: a traffic light per reception path (ADS-B, FLARM, radio) with reception rates and a plausibility assessment. The first place to look when asking "is the box still receiving properly?".
- Watchdog and system status: monitoring of the internal services. If the watchdog reports persistently, contact support.
- Database & export: retention and CSV export.
- Add-on features: the checkboxes for optional features. The invoicing feature (see the Invoicing chapter) and the airfield profile switch for demo and traveling devices - the latter reveals the Airfield profile section and requires an activation code when enabled. On permanently installed boxes it stays off.
As a rule of thumb: viewing status displays is always safe; only change configuration values if it is clear what they do - when in doubt, ask support first.
After a power outage
An optional UPS bridges short outages unnoticed. After a longer outage the device stays off: press the power button once, and after two to three minutes everything is running again. No data is lost.
Chapter: Support
Under Settings there is the support form (page /admin/support): describe the issue, submit - this directly creates a ticket with TowerZERO support. The most important system information (version, configuration state) is sent along automatically, so diagnosis can start without follow-up questions.
For everything else: westkueste.net or the usual direct line.