Most of today was on the boat’s telemetry rig, and it turned into a real shakedown day.
The bulk went into Sightglass — a big, messy build where I tore out about as much as I added. The camera-based fuel-level reader had been quietly broken on the deployed Pi: one hiccup from the message broker and it just stopped publishing forever, no error, no recovery. Fixed that with proper reconnect logic. Then I chased a nastier problem — the camera was dumping its tank readings onto the same channel the fuel estimator uses for engine data, so two unrelated things were muxed onto one wire. I moved the tank readings to their own topic, and once I did that I could delete the whole path that fed the estimator, since the estimator now reads tank level from another source directly. Also stopped the reader from publishing stale values when the camera goes blind — a real sender always knows the level, but a fouled or dark lens shouldn’t keep insisting on the last number it saw. Late in the day I tried slimming the Docker image and gave up honestly: the vision libraries dominate, so the trim was cleanup, not a real win, and I didn’t redeploy.
Around all that I stood up the supporting stack fresh: a message broker (maracaibo-mosquitto), a SignalK server (maracaibo-signalk), and the telemetry pipeline for Maracaibo — Influx, Telegraf, Grafana. New scaffolding, secrets kept out of the repo.
Virtual fuel consumption got the same treatment: formalized the build-on-Mac, pull-on-Pi deploy, fixed a socket that died during idle, and made it emit a fuel rate only while the engine actually runs — matching how a real sensor behaves instead of faking a zero.
A Wine App got a debug browser to test the restaurant screen without physically standing at a venue, plus two crash fixes it surfaced. The Cloudy Brain took a small automated content pass.
Tonight the whole boat stack is wired end to end, publishing clean, live-only data — and the Pi is finally recovering on its own.