Answers to the "Please send back" list
Prepared 3 Nov 2026. Everything below was fetched or run in this session. Where I could not confirm something it says UNKNOWN. I contacted nobody and applied for nothing.
Short version
| Item | Answer |
|---|---|
| C weather pick | Open-Meteo paid plan for wind and sea level everywhere. NOAA buoys and CO-OPS override it in the US when within 10 km. |
| C monthly cost | About $29 to $99 a month at today's volume and at 10x. The plan fee is flat, not per scan. Confirm the current price with Open-Meteo. |
| Expedition channel list | No full official list found. Only a handful of channels are confirmed. Checksum rule is solved. Ask Nick White for the list. |
| Expedition events | No documented export. Live sail name probably is broadcast. Details in section 3. |
| Event calendar | Our own table, seeded by hand, with a J/70 feed import. No one API covers all classes. |
| Apple multicast | Not submitted. Needs your OK, and Apple sign-in. Wait is days to weeks. |
1. Weather source for C
Today's volume
I queried the production database read-only (railway ssh, table scan_analyses, which holds one analysis snapshot per scan):
| Month | Scans with a stored analysis |
|---|---|
| Aug 2026 | 867 |
| Sep 2026 | 537 |
| Oct 2026 | 516 |
| Nov 2026 (to 3 Nov) | 16 |
First row in the table is 28 Jul 2026. A scan with no stored snapshot is not counted. I plan on about 500 a month today and 5,000 at 10x.
Sources compared
| Source | What it gives | Limits found | Price |
|---|---|---|---|
| Open-Meteo Historical | ERA5 (25 km, 5-day delay), ERA5-Land (11 km), ECMWF IFS (9 km, hourly, no delay, 2017 on). Gusts exist in ERA5-Land and IFS 9 km, not plain ERA5. | Needs Professional plan per their FAQ. | See below |
| Open-Meteo Historical Forecast | Stored forecasts, same format as live. UK Met Office UKV 2 km and ICON-D2 2 km (from 2022), AROME 1.5 km (from 2022), HRRR 3 km (from 2018), ECMWF IFS 9 km (from 2017). | BOM ACCESS-G (15 km) has had no updates since 26 Jun 2025, so Australia has no good high-resolution model here. | See below |
| Open-Meteo Marine | sea_level_height_msl (includes tide) and ocean current speed and direction at about 8 km, from 1940. |
Their page says tides and currents have limited coastal accuracy and are "not suitable for coastal navigation". Treat as estimate. |
Marine is in all plans |
| Meteoblue History API | ERA5T from 1940, about 8 days behind. | The 8-day delay means it cannot cover recent scans. I could not read its prices. A search snippet showed a €400 a month Premium plan; I could not confirm it. | UNKNOWN |
| NOAA NDBC | Real buoy and station readings, free. Realtime files hold the last 45 days only. | Asks for minimal retrieval, no numeric limit. I did not verify the long-term history archive. | Free |
| NOAA CO-OPS | Wind with gusts, water level, tide predictions, current observations and predictions. Free API. | Throttles heavy users, no numeric limit given. Current stations are limited and subordinate stations give only max and slack predictions. | Free |
| UK NTSLF / BODC tide gauges | Real UK sea level. | Quality-controlled data is free but needs a licence agreement. I found no public API or commercial terms. | UNKNOWN |
| Europe wind buoys (Copernicus), BOM Australia | Not confirmed. Copernicus search turned up drifting buoys only. BOM's copyright page returned an error (403). | Needs a separate look. | UNKNOWN |
The pick
- Open-Meteo paid plan for wind, gusts, direction and sea level, worldwide. Reasons: no delay on the IFS and Historical Forecast data, so a scan taken today works; one API for the past and the forecast needed in J; regional models down to 1.5 to 2 km in the UK and Europe.
- NOAA NDBC and CO-OPS as real-reading overrides in the US, only when a station is within 10 km and closer than the model grid point. Tag these
estimatewith the station name and distance, as you specified. - Tide height and current outside the US: use the Open-Meteo marine values, labelled "≈" and "model". Real UK and Australian gauges need licence work first (UNKNOWN).
- Australasia wind: weak spot. The only BOM model in Open-Meteo's historical set is 15 km and stale. Use the global IFS 9 km there until we find a real source.
Price
- Open-Meteo's pricing page shows plan names and call budgets only: Standard 1M calls a month, Professional 5M. It lists no dollar prices.
- Their own blog (12 Jun 2023) gives Standard $29 a month, Professional $99 a month. That is three years old; treat it as a guide.
- Their FAQ says Historical needs Professional. Whether the Historical Forecast API is covered by Standard is UNKNOWN. Someone should email info@open-meteo.com (you suggested this). I did not.
- The free tier is explicitly non-commercial (subscriptions or ads count as commercial). Data is CC BY 4.0, so we must credit them.
Monthly cost estimate
Assume at most 3 calls per scan (wind, marine, one extra), no cache hits.
| Volume | Scans a month | Calls a month | Plan needed | Cost |
|---|---|---|---|---|
| Today | about 500 | about 1,500 | Standard or Professional (limit 1M or 5M) | $29 to $99 |
| 10x | about 5,000 | about 15,000 | same | $29 to $99 |
Even if every call counted ten times against the budget, 150,000 is far below 1M. Caching by 0.1° cell and hour only trims this further. NOAA adds $0. J's forecast lookups add calls but stay small at this scale.
Error test plan
- Build the reference set: scans that already have real wind from instruments, a log, or the Kimi photo reader. I have not counted how many exist (UNKNOWN); the first step is counting them.
- For each, run C as if the real number were missing. Use the data as it would have been at scan time.
- Record: speed error in knots, direction error as the smaller angle (0 to 180°), gust error.
- Report the median and 90th percentile, split three ways: buoy vs model; by venue; by wind band. Show the number of scans in every cell. Under 20 scans, print "too few" rather than a number.
- Head-to-head: where a scan has both a buoy and the model, compare each against the real reading.
- Rule for direction: if a venue's median direction error exceeds 20°, or more than a quarter of its scans are over 20° out (starting thresholds, for you to tune), show speed only there.
2. Expedition live UDP format
Official channel list: not found in any source I read.
What the sources actually say:
| Source | Quote or fact |
|---|---|
| Expedition manual (Developer information) | "Each sentence starts with a # and ends with *XX\r\n, where the XX is a checksum." Streaming data: #boat id,var1,val1,var2,val2,...*XX. External channels use E,..., system channels X,.... https://www.expeditionmarine.com/downloads/documents/Expedition.pdf |
| Forum thread 2407 | Moderator Nick: "Bsp is channel 1." A user's GPS template shows 48 = Lat, 49 = Lon, 41 = PDOP, 39 = GpQual, 43 = GpsNum, 44 = GpsAge, 45 = Altitude, 46 = GeoSep, 47 = GpsMode, 146 = GPSTime. Fix for missing data: tick the channel in Expedition's Rx list. https://expedition.boardhost.com/viewtopic.php?id=2407 |
| RaceData2 guide | Default port 6011. Expedition Tx Filter chooses channels. Address ending .255 broadcasts. It does not list channel numbers. https://pub-4981bcabf59e448cb7f0ba321b814d37.r2.dev/RaceData2_User_Guide.pdf |
The other numbers in the forum examples (2, 3, 13, 15, 17, 18, 50, 51) are unlabelled. I will not guess what they mean. The handoff's TWS, TWA, heel and others are therefore UNKNOWN by number.
A way around the missing list. The manual says a third party can send #S,GETCHANNELNAME,channel*xx and Expedition replies #S,CHANNELNAME,channel,name,shortname*xx. That could give the exact names at runtime. It means sending a command, which is more than the "read-only first" plan. Please decide.
Checksum rule. The manual does not state the algorithm. I tested a guess on the four examples I had (two from the forum, #G,12.34*62 and #G,-1.0*4A from the manual). XOR of every character from the # up to, not including, the *, shown as two uppercase hex digits matched all four. Leaving out the # matched none. This is my check, not an Expedition statement. Confirm with Nick White.
The manual also says Expedition's port can be 1024 to 65535 and broadcast should use the real subnet address (for example 192.168.0.255) rather than 255.255.255.255, because some routers block the latter.
3. Event list export and sail changes over UDP (G)
| Question | Finding |
|---|---|
| Does Expedition store events? | Yes. The manual says events, sails and tests are in a database, default name Expedition.db, and the file "can be copied to other computers or backed up". |
| Is there a documented export of the Event list? | None found. The manual lists "Event list" as "Expedition's event database" and says nothing about export. |
| File format? | The manual elsewhere mentions editing the database as *.mdb in Microsoft Access, while the default name is Expedition.db. These conflict. A forum search summary mentions opening it with DB Browser for SQLite from C:\ProgramData\Expedition\database. I did not read that post in full. Table and column names: UNKNOWN. |
| Can anything write events in? | Forum thread 2609: Nick says the DLL cannot set events. A user wrote EVENT rows straight into the database instead. https://expedition.boardhost.com/viewtopic.php?id=2609 |
| Does Expedition broadcast sail changes live? | Partly yes. The manual says #S,c,sailname*xx "Sends the sail name if set to be in Send (Tx) filter", where c is A current sail, M sail to mark, N sail for next leg, E sail set by events etc. So the live sail name can go out on the same feed. Not confirmed: whether a sail change appears as an event, and whether sail names come through in a usable form. Test on a real boat. |
| Sending events to Expedition | Documented: #E,comment*xx. Supports phase events and #E,PHASESAILSUP,Mainsail,NumReefs,Headsail,Staysail,Spinnaker,Comments*xx. |
Needed from Nick White: event table name and columns, how the sail id maps to a name, and how users export events.
4. Regatta calendar sources (J)
| Source | Finding |
|---|---|
| J/70 class | j70class.com/calendar offers webcal and XML export links (iCal format inferred, not stated). Events read like "2026 J/70 Mixed-Plus US National Championship @ St. Petersburg Yacht Club", with date ranges and no coordinates. |
| Cape 31 class | cape31class.com/calendar is a plain-text list by circuit (Med, UK, South Africa) with 2027 provisional dates. No export link. Global events are on cms.cape31class.com. Two sources disagreed on dates for the Gold Cup (12 to 17 vs 14 to 17 Oct) and Bonifacio (5 to 7 vs 4 to 6 June). |
| Melges 24 | melges24.com/calendar has an "Add Event to Calendar" link per event. No feed seen. |
| Etchells, Dragon | No class calendar found. |
| Manage2Sail, Regatta Network | Public event listings exist. No API or iCal mentioned on the pages I fetched. Not confirmed either way. |
| Sailwave, Racing Rules | Not checked. |
Recommendation. Do not wait for an API.
1. Keep our own events table: class, name, dates, venue, latitude and longitude, source link, "confirmed" flag.
2. Seed it by hand for the target classes. That is a small list per class per year.
3. Import the J/70 feed automatically. Add small readers for other classes only if the hand list becomes a chore.
4. Match a scan by date and distance from the venue, with one day of slack because sources disagree. The one-tap "Racing at...?" confirm then covers errors.
5. Someone (not me) can ask Manage2Sail and Regatta Network whether they offer a feed.
5. Apple multicast entitlement and Android
- Apple: the entitlement is
com.apple.developer.networking.multicast. Apple's page for it says it needs Apple's permission, requested through the "Multicast Networking Entitlement Request" form. The form is behind Apple sign-in; I could not open it. I could not read the entitlement doc page body. - Who submits: UNKNOWN from sources. Apple does not say it has to be the Account Holder. The app belongs to the Sail Team LLC team (N5H73D2WDR, Account Holder Alex Higby per the repo notes), so Alex's login is the safe route. One forum report says the form asked for an App Store URL; our app is already in the store.
- Wait: no official figure. Developer reports in Apple's forums: about 5 business days, 3 days, "2 weeks and still waiting". Plan for 1 to 3 weeks.
- Status: not submitted. This needs Alex to submit or approve me doing it.
- Android:
WifiManager.MulticastLock. Android's docs say the Wi-Fi stack normally filters packets not addressed to the device. A lock lets them through but "can cause a noticeable battery drain", so take it only while listening. It releases when the app exits or crashes. The permission name (CHANGE_WIFI_MULTICAST_STATE) was not on the page I fetched; confirm when building. - Whether plain broadcast (x.x.x.255) needs the entitlement on iOS: assumed yes per your note, not verified. Test on a device.
6. Time estimates (working days, one developer)
What I saw in the repo that drives these:
- Server: Express with SQLite (better-sqlite3). instrumentData.js accepts 15 numeric fields but has no source tags per value. No weather lookups exist (one file mentions the word). Logs, replay, Sail Team 6 inventory, sail life and Boom Cam routes exist (routes/logs.js is 563 lines).
- Web: desktop/ with feature flags, plus server-side per-user flags in userFeatures.js. This fits "off except Alex".
- Phone: Expo 54, React Native 0.81, expo-camera, expo-location, expo-network, expo-device. No UDP, motion-sensor, NFC or sun-position package is in package.json (I checked). A needs a new native module and a new native build.
| Feature | Days | Depends on |
|---|---|---|
| Source-tag foundation (shared) | 4 to 6 | Changing how scan values are stored without altering current results. Needed before A to D. |
| A. Expedition and NMEA link | 15 to 25 | Native UDP module on both platforms, parsers, buffer, offline queue, permission text. Apple entitlement wait is calendar time on top. Real boat test. |
| B. Shutter capture | 4 to 7 | Adding motion sensors; lens data is the unknown (B2 deep dive). |
| C. Wind and tide | 8 to 14 (server and web) plus 3 to 4 for the error test | Plan choice, caching, the reference scan count. |
| D. TWA, point of sail, tack | 3 to 5 | C and B finished; existing mast finder supplies the cross-check. |
| E. Course map | 6 to 10 | Map library choice, pins and timeline on web. Phone later. |
| G. Sail hours and UV | 12 to 20 | Expedition event import depends on Nick White's answer (could add 5 days if the file is hard). Hours logic, Sail Team 6 list, UV. |
| G2. Hours per sailmaker | 4 to 7 | Data only. Consent flag and maker field on each sail. |
| H. Photo coach | 5 to 8 | Sun position maths, live camera brightness. Phone only. |
| J. Event guide, collection first | 5 to 8 | Calendar table, opt-in, data model. |
| J. Targets and briefing (later) | 15 to 25 | Enough data (5 boats, 30 scans per group), your trim rulebook. |
Ranges are my judgment from the code I read, not measured. They do not include privacy-policy and App Store label work, or review time on your side.
Open questions for you
- May I ask Open-Meteo for current prices and Historical Forecast coverage? (Not done.)
- May Alex submit the Apple entitlement request, or should I prepare the text for him?
- Who asks Nick White: the channel list, the event table, sail changes over UDP?
- Send
#S,GETCHANNELNAMEqueries to Expedition, or stay strictly read-only?