Expand description
An Eggtimer’s flight data, as the flight computer’s own download writes it: the Eggtimer Classic’s and TRS’s over a serial cable, the Quantum’s and Proton’s from their WiFi page.
The file is comma-separated text: one header row naming the columns, then one row per sample, every column on the row’s time. There is no preamble and the header states no units:
T,Alt,Veloc,FAlt,FVeloc,LDA,LowV,Apogee,N-O,Drogue,Main
0,0,0,0,0,0,0,0,0,0,0
0.05,4,80,0.8,16,0,0,0,0,0,0
0.1,9,100,2.44,32.8,0,0,0,0,0,0Layouts. The first column is the time, T, and the second the barometric altitude, Alt.
Then come the logger’s figures, which differ by model and firmware: a raw velocity, a filtered
altitude and velocity (FAlt, Filt_Alt or KAlt, then FVeloc or KVeloc), and on the
Proton the accelerometer’s figures. Last come the event markers, from LDA on. The Classic’s
manual shows T,Alt,Veloc,KAlt,KVeloc,LDA,BurnT,LowV,Apogee,N-O,CHA,CHB (Eggtimer Flight
Computer User’s Manual, firmware 1.52, board RevD, p37), the TRS’s
T,Alt,Veloc,FAlt,FVeloc,LDA,LowV,Apogee,N-O,Drogue,Main (Eggtimer TRS Flight Computer User’s
Manual, firmware 2.07, p37), and an older guide T, Alt, VRaw, VFilt (Using Excel to
Graph Eggtimer Flight Data, p3). The project’s sample logs add a layout without the raw
velocity (T,Alt,FAlt,FVeloc,…) and the Proton’s 22 columns, whose accelerometer columns are
named AccelG, AccelFPSS, VAccel, AltAccel and filtered FAccel… where its manual writes
Accel, AccelFPSS, VelocAcc and AltAcc (Eggtimer Proton User’s Guide, software 2.01C,
p45). The Proton lets its owner name each deployment channel, up to 8 characters, and writes
that name in the header (Proton p26; Eggtimer Proton Release Notes, version 2.01C, p2), so a
marker column may carry any name.
A file is this layout if its first line that isn’t blank is comma-separated, names T then
Alt, and names at least one more column this reader knows (the table below). That keeps out a
PerfectFlite export (Time,Altitude,…) and an RRC3’s (Time,Altitude,Pressure,…).
Units. The header states none. Each column, what it is read as, and where that comes from:
| Column | Read as | From |
|---|---|---|
T | the clock: seconds, or milliseconds when the step says so (below) | the Classic’s and TRS’s manuals (p37) and the Excel guide (p3): milliseconds; the Quantum’s (Eggtimer Quantum User’s Guide, software 1.09G, p38) and Proton’s (p45): seconds |
Alt | Quantity::AltitudeAboveGround, ft | the Classic and TRS manuals (p37) state feet; the Quantum and Proton manuals state no unit for the download, but give every height in feet (Quantum p24: launch detect “50’-500’”), and no Eggtimer manual offers meters |
FAlt, Filt_Alt, KAlt | Quantity::AltitudeAboveGround, ft: the logger’s filtered Alt | Quantum p38, Proton p45; Classic p37 (“the two K fields are filtered data”) |
Veloc, VRaw | Quantity::Speed, ft/s: the change in Alt over the step | Classic and TRS p37 (“velocity in ft/sec”); Quantum p38, Proton p45; checked against Alt (below) |
FVeloc, KVeloc, VFilt | Quantity::Speed, ft/s: the change in the filtered altitude over the step | Quantum p38, Proton p46; the Excel guide (p3, p7: “Velocity in ft/sec”); checked against the filtered altitude (below) |
Accel | Quantity::Acceleration, g × 9.806 65 m/s² (standard gravity) | Proton p45 (“in G’s”) |
AccelG, FAccelG | Quantity::Acceleration, g × 9.806 65 m/s² | the name; Proton p45 |
AccelFPSS, FAccelFPSS | Quantity::Acceleration, ft/s² | Proton p45 (“ft/sec^2”); the name |
VAccel, VelocAcc, FAccelVel | Quantity::Speed, ft/s, from the accelerometer | Proton p45 (“the velocity derived from the accelerometer in ft/sec”) |
AltAccel, AltAcc, FAccelAlt | Quantity::InertialAltitude, ft | Proton p45 (“the DISTANCE TRAVELED derived from the accelerometer in ft.”) |
LDA, LowV, Apogee, N-O, Drogue, Main, AUX, BurnT, CHA, CHB, CH1…, MaxV, MaxA, Boost#1…, BO#1…, and any column after LDA | Quantity::Unrecognized, as written: an event marker (below) | Quantum p38–39, Proton p46 |
No Eggtimer manual offers a unit other than feet: the Classic’s, TRS’s, Quantum’s and Proton’s manuals and release notes name no meter or metric setting. Each column whose name doesn’t state its unit gets a note on the record saying how it was read, once per name.
Speeds checked. A speed is read in feet per second only if the rows bear out that it is its
altitude’s change over the step: Veloc and VRaw of Alt, FVeloc, KVeloc and VFilt of
the first filtered altitude, within 1 % or 1 ft/s, on at least 90 % of the rows after the first.
A speed that falls short is kept as written, Quantity::Unrecognized, with a note; a file of
one row, or a filtered speed with no filtered altitude, has nothing to check, and is read as the
manual says. As of 2026-10-12, over the 43 Eggtimer files among the project’s sample logs, the
least share is 95.9 %, and with the clock read in the wrong unit, a factor of 1,000 off, at
most 9.5 %: the check also guards the time’s unit (below).
The accelerometer. As of 2026-10-12, in the 4 of those files with an accelerometer,
AccelFPSS is about 32 times AccelG (32.17 ft/s² is one g), VAccel tracks the sum of
AccelFPSS over the steps, and AccelG’s median before the start of flight (T below 0) is
0 to 0.2 g. Standing on the pad, an accelerometer that keeps gravity reads 1 g, so the Proton’s
acceleration has gravity taken out. Its manual doesn’t say so; its release notes have it
calibrate the accelerometer as it is armed, standing up (2.01C, p8). A note on the record says
whether this file’s acceleration holds gravity, from its own pad reading: taken out below
0.5 g, held within 0.5 g of 1 g, not known otherwise or with no rows before the start of
flight. The values are kept as written either way. The F-prefixed accelerometer columns are
read as their unfiltered namesakes, as FAlt is Alt filtered: no manual describes them.
The time’s unit. The Classic’s and TRS’s downloads, and the older guide’s, write T in
milliseconds; the Quantum’s and Proton’s in seconds; and the sample logs hold eleven-column
files in both. The logger takes 4 to 33 samples a second going up and 1 to 10 coming down
(Classic p19–20; Quantum p25), so a step between rows is 0.03 to 1 in seconds and 30 to 1,000
in milliseconds. The reader takes the median step between rows: above 5, a factor of 5 clear of
either range, T is in milliseconds; otherwise in seconds. A file of one row has no step, and
is read in seconds. A note on the record says which, and why.
Event markers. The manuals put the markers last, from LDA on: each is 0 at every sample
but the one that triggers its event, where the Quantum’s and Proton’s manuals say it holds “the
RAW altitude data”, in feet (Quantum p38; Proton p46). MaxV and MaxA hold the top speed and
acceleration instead, ft/s and ft/s² (Eggtimer Proton Release Notes, version 1.02N, p13: “now
referenced to the actual value”); in the sample logs they are the whole part of VAccel and
AccelFPSS on their row. A marker may also be held from its event to the end of the file, as 3
marker columns among the 43 sample files are (as of 2026-10-12). Each marker column is kept as a
channel as written, Quantity::Unrecognized: its 0 means “no event”, not 0 ft, so converting
it as a height would mislead. One note on the record lists them. Each run of non-zero samples is
an Event named as the column (a name past 80 characters cut short, as a note quotes it), at
the run’s first sample, up to MAX_EVENTS_PER_MARKER a column; past that, the rises are
counted in a note. An event that happened at a raw altitude of exactly 0 ft can’t be told from
no event, and is lost. A column after LDA whose name this reader doesn’t know, such as a
Proton channel’s own name, is read as a marker, with a note.
The primary track. FlightLog::altitude_m is Alt, the barometer’s raw altitude above
the logger’s zero. The vertical speed is Veloc (or VRaw), the barometer’s; without it, or
with it kept as written because its check failed, the filtered FVeloc (or KVeloc, VFilt),
also the barometer’s, with a note. VAccel is the
accelerometer’s, a channel only. The file names no model, serial number or flight, so the logger
reads Eggtimer.
Cells. Lines end in CR, LF, CR LF or CR CR LF (a blank line after every row, which is
skipped). A row whose every cell is empty, as some downloads end with hundreds of, is skipped
and counted in a note. An empty cell, or a row shorter than the header, leaves a gap, NaN,
counted per column in a note. A cell that isn’t a number, a row longer than the header, an empty
time, and a time that doesn’t increase are refused, naming the line. A column this reader
doesn’t know, before LDA, is kept as written, Quantity::Unrecognized, with a note.
Where this comes from. The layouts and units are the manuals’ above; the time-unit rule, the
blank-row rule and the column names they don’t show are the sample logs’. Debrief’s reader
(lib/parsers/eggtimer.ts, MIT, the project owner’s own) also tells milliseconds from seconds
by the median step, over the first 60 rows with its line at 3. Where this reader departs from
it: it keeps every column and reads the markers as events, where Debrief maps the time, the
altitude and one velocity; it takes the raw Veloc as the vertical speed where Debrief prefers
the filtered one; it reads the layouts without Veloc, which Debrief doesn’t recognize; and it
refuses what Debrief passes over, naming the line. Debrief’s note that the logger can be set to
metric units cites no source, and none of the manuals above offers such a setting.
Constants§
- MAX_
EVENTS_ PER_ MARKER - The most events one marker column gives; past it, the column’s rises are counted in a note instead. A marker marks one event of the flight (Quantum p38, Proton p46): as of 2026-10-12, no marker column among the 43 Eggtimer files in the project’s sample logs rises more than once. The cap keeps a file whose marker flips on every row from filling the record with events.
Functions§
- read
- Reads an Eggtimer’s flight data from its text.