Guides

Importing telemetry

One log file, five ways of writing one, and a preview that shows you what the platform read before anything is kept.

1 Before you start

Three things have to be true, and the screen tells you which is not:

  • A boat exists. Telemetry belongs to a boat, so create one under Boats first. With none, the import page says so and links you there.
  • That boat has coverage. A subscription, a day pass or the trial. Boats without it stay in the list, marked — no coverage, and cannot be selected. Import history stays readable either way.
  • Your role can run imports. Member, admin and owner can. Viewers are read-only and see the history but no upload form.

2 The five kinds, and the way in with no file

The picker on Import has five cards. Pick the one that matches the file you have — not the boat you sail:

CardWhat to give it
Expedition telemetryThe Expedition CSV log. Wide or indexed-pair layout — the server works out which.
Expedition eventsThe matching Expedition event file: guns, warnings and line pings. Imported separately from the log, and it needs one extra answer from you — section 4.
B&G H5000 / HerculesA .zip of your NMEA 2000 recorder’s .DAT folder, or a single .DAT. The raw bus, decoded on the server.
Vakaros (Atlas)A .vkx log or a Connect CSV export. Prefer the .vkx — section 5 says why.
NMEA 0183 logA raw sentence log — .log, .txt or .nmea, one sentence per line, from any talker. Position, speed, heading and wind. Section 7 has its clock rule.

There is one more way a day arrives, and it is not in the picker because there is nothing to pick. A boat running Race Control streams as it sails: the tablet creates one live row per boat per UTC day and grows it with every batch. You will see it in the imports table as Race Control live. You never upload it.

3 The steps, which are the same every time

Whichever kind you picked, the flow is one chain and most of it runs without you.

  1. Open Import.
  2. Under Boat, set Import to — the first covered boat is chosen for you.
  3. Click one of the five kind cards.
  4. In New import, drop the file on Drop a log file here, or click to browse, or click it and browse. Files are capped at 200 MB per import; split a longer log and import the parts.
  5. Wait. There is no upload button — choosing the file starts everything. The status line walks Computing SHA-256…, Registering the import…, Uploading… and Reading the server preview…, with a progress bar on the two that have a percentage.
  6. Read the preview — Preview — server sniff. Section 8 is what to look at.
  7. Press Commit import. The page takes you to the import’s own page, which then owns the story.

Cancel beside the commit button abandons the flow, not the file. The upload stays on the server as an uncommitted import, and you can pick it up later with resume in the imports table — no second upload.

4 Expedition, and the venue timezone

Expedition writes two files and Nordic Stars imports them as two imports: the telemetry log under Expedition telemetry, the event file under Expedition events. Order does not matter. Races derive themselves from the guns once both are in, so a telemetry-only import is a legitimate half-finished state rather than a failure.

The events file needs one thing the log does not. Expedition writes its Time column in venue-local time with no zone marker — the file simply does not say which zone it means. So after the preview appears, an events import shows a Venue timezone panel above it. Pick the venue you sailed at.

Leave it on UTC (default) at a venue that is not on UTC and the guns land hours away from the telemetry — the start marked somewhere the boat was not sailing, by exactly the venue’s offset.

The list is every IANA zone your browser knows, by its own name — Europe/Stockholm, Australia/Sydney. Pick the zone, then commit.

If you get it wrong, it is repairable and nothing needs re-uploading. Open the import from the imports table; a completed events import carries its own Venue timezone panel with a Re-anchor events button. The server re-reads the file it kept, replaces the events and re-derives the races.

5 Vakaros: which file to give it

An Atlas records natively as .vkx, and Vakaros Connect will also export a CSV. Both import. Prefer the .vkx: it carries the race timer and the start-line pings the device recorded, so a start you sailed against the Atlas comes into the debrief with its line already in place. The Connect CSV carries the sailing but not those events.

The card is keyed to those two formats, not to a list of devices: give it a file Vakaros wrote and it reads it.

The two files differ in one more way, and it costs you nothing either way. A .vkx stores the device’s recorded orientation, so heel and trim are derived from it during the import. The Connect CSV already carries heel and trim as columns of their own, so they are read straight off. Nothing to configure in either case.

6 B&G and other NMEA 2000 buses

This one is not a B&G export. It is the recording a Yacht Devices voyage recorder makes of the whole instrument bus: a folder of .DAT files. Zip the folder and drop the zip. A single .DAT works too.

Because it is the bus rather than a program’s export, it carries more than a nav program writes out — including H5000 performance values such as target boat speed, target wind angle, VMG and distance to the start line. This is the only way those values reach Nordic Stars: they are NMEA 2000 messages, and nothing carries them over NMEA 0183.

The platform decodes the sailing messages, not every message on the bus. A message it does not decode is counted in the preview, named where the name is known, and skipped. That is why the preview’s channel list is shorter than the recording.

7 NMEA 0183: the sentence log

Almost every instrument system will write NMEA 0183 out as plain text, and plenty of loggers, multiplexers and chartplotters save that stream to a file. That is what this card takes: .log, .txt or .nmea, one sentence per line. The talker prefix does not matter — $GPRMC and $IIRMC are the same sentence — so a file from an unfamiliar box is still worth trying.

What is read is position, speed and course over ground, boat speed through the water, heading, apparent and true wind, depth and sea temperature. Performance numbers are not in this format at all — target speed, target angle and VMG ride B&G’s own NMEA 2000 traffic, so section 6 is the only way in for those.

The clock rule. Timing comes from the file’s own GPS sentences: the first RMC or ZDA sets the clock and every later line inherits it, so lines logged before that first fix have no time to stand on and are dropped — and counted, in the preview, rather than dropped in silence. If your logger writes a timestamp at the head of each line, that timestamp wins for its line.

The preview counts the rest of it out loud too: how many sentences were in the file, how many were parsed, how many were a type this importer does not read, and how many failed their checksum. A log with a large skipped count is not necessarily a bad log — a chartplotter emits a great deal that has nothing to do with how the boat is sailing — but it is worth a look before you commit.

8 Reading the preview

The preview is the server’s reading of your file, shown before anything is ingested. Tiles across the top: Layout, Timestamps, Rows (est.) and Time range, plus a Delimiter when the file has columns to delimit — a binary .vkx and a sentence log do not, so they do not show the tile. On an NMEA 0183 log the count reads Sentences (est.), because that is what is being counted: several sentences describe one instant of the same boat, so the number is not comparable with a CSV’s rows.

The count is an estimate extrapolated from the part of the file that was sniffed, and the time range is the one thing worth checking hardest — if it is not the day you sailed, you have the wrong file or a clock problem.

The channel mapping table

Under the tiles, one row per column in your file: Source column, the Channel it will become, and the Unit guess. The channel cell is a chip showing the current target; pressing it opens a searchable list, and that is your override — the platform suggests, you decide.

  • To remap a column, press its chip and filter. The list is grouped: Suggested (what this preview arrived with, for a one-press undo), Your channels (your organisation’s own), then the standard registry under its families — Navigation, Wind & weather, Loads and the rest. Each row carries its unit, e.g. boat_speed · kn.
  • To drop a column, choose — skip this column — at the top of the list.
  • If nothing fits, use + New custom channel from ‹column›… at the foot of the list. It creates a channel for your organisation only and selects it for that column in one go. See Channel mapping.
  • To undo a change, press Reset at the end of the row. It returns that row to what the preview arrived with.
  • The chip at the end of each row says where the mapping came from: auto means the file format’s own dictionary recognised the column, your mapping means your organisation taught the platform this one before, and unmapped means nothing recognised it. An unmapped column is skipped unless you pick a channel for it, and that is often the right answer — a spare column is a spare column. Anything skipped is also listed in Channels → Mappings, so a column you are quietly losing data on does not stay invisible.

Under the buttons, a line tells you how many columns will be skipped and names them, so nothing is dropped silently.

Only your changes are sent, and are remembered for your next import. Touch nothing and the commit carries no mapping at all, which means the server ingests precisely what the preview showed you; change something and that decision is saved for your organisation, so the next file of the same format arrives with it already applied. A row you have changed says will be remembered, and a line beside Commit import counts them. Channel mapping explains what is kept, who can see it, and how to change your mind.

Two things the preview can stop you on

Two columns mapped to the same channel. Their samples would collide at ingest, so the preview names them and Commit import stays disabled until you skip or remap one of them. It is the only thing that blocks a commit.

Wall-clock suspect. A banner appears when the sniffer saw clock jumps or odd epochs in the timestamps. The samples still import; the file’s absolute times are flagged as untrusted, and anything that aligns by time treats them with suspicion until they are corrected. Worth knowing before you spend an evening wondering why your video will not line up.

Anything else the sniffer noticed appears as a short list of warnings. They are advisory and never block the commit.

9 Commit, and what happens next

Commit import hands the file to the ingest and moves you to the import’s page, where a chip carries its status:

StatusWhat it means
awaiting uploadThe import was registered but the file never arrived. Start it again; an abandoned import never blocks a retry.
uploadedThe file is on the server but the commit did not land. Use Continue import — it re-previews and commits with no re-upload.
processingSamples are streaming into storage and the rollups are updating. The page refreshes itself every few seconds.
completeDone. The page shows rows ingested, the time range, and the channels it found with a sample count each.
failedNothing was kept from that run. The server’s reason is printed. Fix the file or the mapping and import it again — a failed import blocks nothing, and you can delete it.

A large import can outlive the connection that asked for it. If the commit response never comes back, the page does not call it an error: it says the import keeps processing on the server and watches for the result. If it is still sitting at uploaded a few seconds later, it offers Retry commit — safe, because a server that already took the first commit refuses the second.

When it says complete, go to Debrief. Races, days and regattas are derived from what you just imported rather than filed by hand, so the regatta appears on its own. How a race derives itself has the rules.

10 Importing the same file twice

Safe, and cheap. The file’s hash is computed in your browser before a byte is uploaded, so a file this boat already has is caught before the upload starts. You get an Already imported panel with Open the existing import on it.

The pipeline is idempotent by file hash: re-importing an identical file cannot duplicate a race.

This is what makes the recorder on the boat safe to keep exporting from. Copy the whole card again, import the lot, and only the files you have not seen do anything. The same reasoning covers the tablet: a Race Control uplink that redelivers a batch it already sent is counted as duplicates, not as an error.

A file with different bytes is a different file, though — an export with one more minute on the end will import as a new log rather than extend the old one.

11 When the upload is locked

Importing needs an active subscription, day pass or trial on that boat. Two places you will meet the gate:

  • Before you start — the Import nav entry wears a padlock and takes you to Billinginstead. Uncovered boats also appear in the boat list marked — no coverage and cannot be picked.
  • Mid-flow — coverage that lapses between starting and committing turns the panel into a card explaining that this boat’s coverage has lapsed, with See billing on it. Nothing you uploaded is lost; renew and continue the import.

Your import history is never locked. You can read what you already imported whatever the coverage says.

12 Deleting an import

Each import’s page has a danger zone. Deleting removes the import, the uploaded file and every sample it ingested, and the affected rollup windows rebuild from what is left. An import that is still processing cannot be deleted from under itself — wait for it to finish.

Deleting an import is not how you remove a race you do not want in the debrief. That is a separate operation on the race itself, and it works differently, because races are derived and a plain delete would simply bring them back at the next import.

Deletion is never billing-locked. Removing your own data does not require a paid boat.