Skip to content

[satellites] update satellites tracked#1004

Merged
accius merged 2 commits into
accius:Stagingfrom
MichaelWheeley:satellites_tracked_05182026
May 21, 2026
Merged

[satellites] update satellites tracked#1004
accius merged 2 commits into
accius:Stagingfrom
MichaelWheeley:satellites_tracked_05182026

Conversation

@MichaelWheeley
Copy link
Copy Markdown
Collaborator

@MichaelWheeley MichaelWheeley commented May 19, 2026

What does this PR do?

  • update satellites tracked list, ref/thank @creinemann
  • added #41866 GOES-16 celestrak_weather
  • added #55506 ELEKTRO-L4 celestrak_active
  • added #67756 ELEKTRO-L5 celestrak_active
  • removed #53106(payload) = #53109(rocket body) = IO-117(Greencube), satellite decommissioned
  • for all entries adds data_source field with CelesTrak group data source

Type of change

  • Bug fix
  • New feature
  • Performance improvement
  • Refactor / code cleanup
  • Documentation
  • Translation
  • Map layer plugin

How to test

Checklist

  • App loads without console errors
  • Tested in Dark, Light, and Retro themes
  • Responsive at different screen sizes (desktop + mobile)
  • If touching server.js: caches have TTLs and size caps (we serve 2,000+ concurrent users)
  • If adding an API route: includes caching and error handling
  • If adding a panel: wired into Modern, Classic, and Dockable layouts
  • No hardcoded colors — uses CSS variables (var(--accent-cyan), etc.)
  • No .bak, .old, console.log debug lines, or test scripts included

// added #41866 GOES-16 celestrak_weather
// added #55506 ELEKTRO-L4 celestrak_active
// added #67756 ELEKTRO-L5 celestrak_active
// removed #53106(payload) = #53109(rocket body) = IO-117(Greencube), satellite decommissioned

for all entries generated data_source field showing celestrak group data source
Copy link
Copy Markdown
Owner

@accius accius left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for keeping the satellite registry current, and thanks to @creinemann for the source list.

Reviewed the diff — this is a clean, data-only update to server/routes/satellites-tracked.js:

  • Adding GOES-16 (#41866) and ELEKTRO-L4/L5 (#55506/#67756) looks correct, and dropping IO-117/GreenCube on decommissioning is the right call.
  • Converting the trailing // CelesTrak group: ... comments into a real data_source field is a nice improvement — self-documenting and queryable rather than buried in a comment.

Two small notes, neither blocking:

  1. data_source is currently informational only. The TLE fetch in satellites.js hardcodes groups = ['amateur', 'weather', 'goes'] and matches purely by NORAD ID. The celestrak_active entries (QMR-KWT-2, ELEKTRO-L3/L4/L5) aren't in those group files, so they resolve via the per-NORAD CATNR fallback. That path already works for the existing active sats, so the new ones will resolve the same way — just flagging that the field doesn't yet drive fetch behavior in case a future change wants to wire it up.
  2. GOES-16 and the new ELEKTRO entries omit mode/frequency. The merge logic in satellites.js handles missing optional fields gracefully (||/??), so this is fine, but adding HRIT/LRIT mode + downlink frequency for the ELEKTRO sats (consistent with L2/L3) would round out the metadata if you have it handy.

CI is green and the branch merges cleanly into Staging. Looks good to me.

— K0CJH

@accius accius merged commit bda89ec into accius:Staging May 21, 2026
5 checks passed
@MichaelWheeley
Copy link
Copy Markdown
Collaborator Author

@accius you said,

  1. data_source is currently informational only......

actually the 'data_source' field is utilized in the change to the satellites.js in #1007

  1. GOES-16 and the new ELEKTRO entries omit mode/frequency........

(my personal opinion only) is that the extra information is difficult to accurately maintain unless it is constantly being reviewed and updated, and could be dropped completely focusing OHC solely on location tracking and prediction

@accius
Copy link
Copy Markdown
Owner

accius commented May 21, 2026

@MichaelWheeley — fair points, thanks for the follow-up.

On data_source: you're right. #1007's state machine filters HAM_SATELLITES by data_source (celestrak_amateur / celestrak_weather, and startsWith('celestrak') for the per-NORAD path) to route group vs. individual fetches. My note was scoped to #1004 in isolation, where the field genuinely was inert — #1007 is what makes it load-bearing. The two PRs are a pair. (Related: in the #1007 review I flagged that startsWith('celestrak') needs a ?. guard, since this file's own header says data_source may be absent.)

On dropping mode/frequency: I understand the maintenance concern — hand-curated frequency tables do go stale. But I'd rather automate it than drop it, since downlink/mode is genuinely useful to operators (it's what the satellite popup shows). The SatNOGS Transmitter database is built for exactly this — crowd-maintained, machine-readable uplink/downlink/mode/baud/status keyed by NORAD ID: https://db.satnogs.org/api/transmitters/. Note this is a different dataset from the SatNOGS TLE feed you (correctly) dropped in #1007 — orbital data there is questionable, but transmitter data is SatNOGS's core strength.

The plan: a background fetcher — same state-machine pattern as #1007 — refreshed daily, joined by NORAD ID, with the curated values in satellites-tracked.js kept only as a fallback for sats SatNOGS doesn't cover (some geostationary weather birds may not have transmitter entries). That removes the manual upkeep you're worried about while keeping the data. I'll spec it as a follow-up.

Appreciate you pushing on this.

— K0CJH

@MichaelWheeley MichaelWheeley deleted the satellites_tracked_05182026 branch May 21, 2026 18:12
accius added a commit that referenced this pull request May 26, 2026
…e, optional Space-Track (#1007)

* squash merge satellite OMM data download

* fix(dxspider-proxy): stop quiet-band connection churn + fix auth detection

The socket idle timeout (60s) was the shortest of all failure timers, so
any 60s gap between spots — normal on quiet bands overnight — tore down a
healthy connection. Keepalive (120s) was too slow to prevent it and the
180s activity watchdog (the graceful node-failover) never got to run.

- socket timeout 60s -> 300s, as a last-resort TCP backstop; the 180s
  activity watchdog now owns failover as designed
- keepalive 120s -> 60s so the connection stays warm
- destroy the socket in the 'timeout' handler — Node does not auto-close
  on timeout, leaving a zombie socket that kept feeding data and
  spuriously reset the failover counter after [RECONNECT]
- mark authenticated on first spot; the DXSpider prompt has no trailing
  newline so prompt-based detection never matched, and sh/dx output lines
  ("...de Helmut<DF4IY>") false-matched the prompt regex

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(dxcluster): per-fetch AbortController so HamQTH fallback can run

/api/dxcluster/paths shared one AbortController across the proxy fetch and
the HamQTH fallback fetch. When the dxspider-proxy hangs to the 10s limit,
controller.abort() fires — and the fallback fetch then receives an
already-aborted signal, rejecting instantly with AbortError before HamQTH
is ever contacted. newSpots stays empty and the endpoint returns the
stale path cache (empty on a fresh server start).

Give each upstream its own AbortController + timeout, cleared in a finally
block. The HamQTH fallback now actually runs when the proxy is down.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* [satellites] update satellites tracked (#1004)

* update satellites tracked
// added #41866 GOES-16 celestrak_weather
// added #55506 ELEKTRO-L4 celestrak_active
// added #67756 ELEKTRO-L5 celestrak_active
// removed #53106(payload) = #53109(rocket body) = IO-117(Greencube), satellite decommissioned

for all entries generated data_source field showing celestrak group data source

* minor name change correction

* useLightning remove double space (#1005)

* Newutils cleanup (#1006)

* fix require path

* - fix state machine unit test - if invalid state is provided then state should gracefully reset
- duplicate of same removed

* feat(n3fjp): live entry-preview lines + preview color (#979)

Adds real-time "as you type" preview support to the N3FJP Logged QSOs
layer, based on a working prototype by Ben, KC1UEK.

- Server: /api/n3fjp/qso accepts status log|preview|clear; trusts
  bridge-supplied coords first, falls back to grid then HamQTH; stale
  previews self-expire after 5 min.
- Layer: previews render in their own colour with a dashed arc, bypass
  the display-window filter, and show a "(preview)" popup.
- DX target: layer emits a dedicated ohc-n3fjp-dx-target event; App.jsx
  moves the DX crosshair via handleDXChange (no WSJT-X channel reuse).
- Settings: new Preview color picker in Integrations.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(satellites) #987: hide satellite status box with the Hide UI toggle

The satellite status box is appended to the map container rather than
.leaflet-control-container, so the Hide UI style block never matched it.
Add .sat-data-window to that selector list — same mechanism every other
floating map panel already uses.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(solar) #988: selectable 6/12/24/48h history for X-Ray Flux panel

A solar flare outside the fixed 6h window was invisible in the panel and
missing from the "peak" rating. Add a timeframe dropdown to the X-Ray
Flux view; the displayed peak is recomputed for the selected window.

Server: /api/noaa/xray now pulls the 3-day SWPC feed, keeps only the
0.1-0.8nm band the panel plots, and trims to the last 50h — so the
per-client payload stays small instead of shipping the multi-MB raw feed
every 5 min. Choice persists in localStorage; default stays 6h.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(settings) #989: user-selectable callbook for callsign lookups

Clicking a callsign always opened QRZ.com. Add a "Callsign Lookup"
dropdown in Station Settings (QRZ.com / HamQTH / QRZCQ), matching the
DX Cluster Source selector. New src/utils/callbook.js builds the lookup
URL; both callsign-click paths in CallsignLink.jsx route through it.
Choice persists in localStorage; default stays QRZ.com.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* rebase to latest staging, resolve merge conflict statemachine.js

* add CelesTrak http status code 429 as rate limit block

* - correct Axios AbortSignal timeout
- logError not a valid function, it's use was masked by an outer exception handler, replaced with logWarn
- isCelestrakEnabled was not getting used, CelesTrak was always active backup for Space-Track even when disabled

* - added `'use strict';`
- added `const` to `jsonBytes`
- added `const` to `match`

* - protect `s.data_source.startsWith` with `s.data_source?.startsWith`

* - added explict messages on `try{}catch{ logWarn(...); }`

* - protected function by replacement of `typeof ... object` with `Array.isArray(...)`

* - extended `Login to Space-Track` section, now checks POST for failures and login fail

* - added remarks regarding size of `ommCache` and `ommUnusedCache`

* !Array.isArray

* - `'User-Agent':` switched from `'Mozilla/5.0'` to `OpenHamClock/${APP_VERSION}`

* - enhanced message on unknown exception

* - enhanced message on exception in CSV reading error

* - add kick start run() after state-machine constructor
- `useSatellites.js` fetch data every minute if empty data set

* satellites.js
- publish ommCache timestamp at /api/satellites/data/timestamp, client can obtain timestamp for latest data without loading the entire data set

* - revised JSON structure timestamp/data
- fetch timestamp and check for change before fetching entire data set
- fix setInterval so that if data set is empty repeat every minute

---------

Co-authored-by: accius <chris@cjhlighting.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants