The data hubearlyMIT
omakeel
Everything is built on the keel. omakeel is a headless Rust daemon that reads the boat's instruments and serves one live stream to every Omahoy app. It has no window; omakeel watch shows what it hears.
omakeel watch on the sample sail: a fix each second, the sentences it checked, and the AIS traffic, with BAY RUNNER flagged as a danger.What it does
- Reads NMEA 0183 from a USB or serial GPS, a TCP stream like a phone sharing its GPS, or a recording, and checks every sentence's checksum.
- Knows when a fix is stale. Position, speed and course from RMC and GGA, and speed and course are never passed off as current once the GPS stops sending them.
- Decodes AIS from a receiver like the dAISy: class A ships and class B small craft, with names, callsigns, types, sizes and destinations.
- Watches for collisions. It keeps every vessel heard in the last 10 minutes with range, bearing and closest point of approach, and flags any passing within 0.5 nm in the next 12 minutes. It runs with the laptop closed.
- Records every sail. Each line it receives, with the time it arrived, and it replays them in real time, so the apps can be built at the dock.
- Serves it all over a Unix socket as newline-delimited JSON, to omahelm, omalookout and omawind.
Install
Rust 1.89 or newer. Then start it on your receivers, each at its own baud rate. Our BU-353-style GPS puck sends at 115200; older pucks send at 4800:
$ cargo install --git https://github.com/shieldsworks/omakeel --locked $ omakeel run --source serial:/dev/ttyUSB0:115200 --source serial:/dev/ttyACM0:38400 \ --record ~/sails/$(date +%F).nmea $ omakeel watch
No boat? Replay the sample sail out of Berkeley Marina with mise replay in a checkout. In a VM with no USB, like Try Omarchy on a Mac, share the GPS from the host over TCP; the README has the socat line.
Next
- The anchor watch, for omanchor.
- A bar widget with speed and course.
- The same stream across the boat's network.
- AIS is tested on a replayed sail so far. GPS runs on a real USB receiver.
Theme
press T