Dock Weather Dashboard

Screenshot of bench data. Temperature, wind direction, speed, and other relevant measurements are displayed over about 4 hours in early May. There are 3 line graphs, a windrose, and 3 gauges.
Screenshot of bench data.

DC Sail has a small Accurite weather station, highly necessary for waterfront operations, but limited visibility of the data and no historical view. This platform collects 433mhz chrips from the base stations, records them in a time series database, and shows the last 6 hours of conditions on the dock.

Repository on GitHub tlmcnulty/sail-wx

In Action

Midway through a squall. Wind climbing, gusting to 12kn. Lightning strikes climbing and closing.
Midway through a squall. Wind climbing, gusting to 12kn. Lightning strikes climbing and closing.
24 hours of look back on July 20th, 2025. A maximum of 18.9kn of wind but an average of 4.09.
24 hours of look back on July 20th, 2025. A maximum of 18.9kn of wind but an average of 4.09.

This package is nice but the antenna recieves WAY too much radio frequency interference when in its little mount. On site the antenna is moved near a window.

The back of a monitor. A small silver square is set against the monitor's vented black plastic case. An antenna is mounted on the right top corner and sticks up against a grey wall.

This project includes software defined radio, system programming, application programming, CAD, manufacture, and the dashboard. The models are available on printables.

The dongle is securely held against the same mount the Intel NUC6i3SYK is attached to.

A close of up of the rear of the computer where a plastic cage secures a USB device against damage/removal.

Message chirps from the devices look like this:


{"time" : "2025-05-03 08:45:24", "model" : "Acurite-5n1", "message_type" : 56, "id" : 4083, "channel" : "B", "sequence_num" : 2, "battery_ok" : 1, "wind_avg_km_h" : 15.900, "temperature_F" : 72.000, "humidity" : 84, "mic" : "CHECKSUM"}
{"time" : "2025-05-03 08:45:27", "model" : "Acurite-6045M", "id" : 21, "channel" : "B", "battery_ok" : 1, "temperature_F" : 71.400, "humidity" : 46, "strike_count" : 13, "storm_dist" : 17, "active" : 0, "rfi" : 0, "exception" : 0, "raw_msg" : "80156f2e111206d12c"}

I've often used the timestamp within a measurement directly for its storage in the time series, but unless time difference and accuracy constraints require that the insertion operation may work better if the current system time is used. For something like this the amount of time between measurement and insertion is acceptable, but this may not be the case in all scenarios.

In noisier environments it's necessary to filter based on model, but we have no other 433mhz devices on the dock.

The system doesn't need custom boot logos, but I gave it them anyway. rtl_433 shouldn't be run with elevated permissions, so a user level systemd unit is defined and wanted by default.target.

The windrose plugin is a freely available Grafana plugin. Big ups Operato. https://grafana.com/grafana/plugins/operato-windrose-panel

Conclusion and Feedback

Feedback has been positive. Obviously this was at least in part driven by my own need/interest as a user but I certainly don't spend as much time on the dock as others might. There are camps that run full-time in season. It's also a less daunting prospect for someone with my background; a lot of the connective tissue here was simply pulled from other projects. The thing that took the most time was user experience/polish and planning for deployment in an airgapped environment for use by personnel with no training or troubleshooting capacity. Turning it on and off again is about the only thing you can expect from someone.

Knowledge of the weather, current conditions, and basic forecasting are vital to safe operations around the water. Sailors know this, and as I'd hoped I've been told this display has been helpful for both youth camps and school racing teams. The windrose is an at-a-glance reference for mark setting. All in, pretty good tool.