diff --git a/intercept.py b/intercept.py
index 873af73..0ed85fa 100755
--- a/intercept.py
+++ b/intercept.py
@@ -13342,17 +13342,17 @@ def satellite_dashboard():
container.innerHTML = passes.slice(0, 10).map((pass, idx) => {
const quality = pass.maxEl >= 60 ? 'excellent' : pass.maxEl >= 30 ? 'good' : 'fair';
const qualityText = pass.maxEl >= 60 ? 'EXCELLENT' : pass.maxEl >= 30 ? 'GOOD' : 'FAIR';
- const time = new Date(pass.start).toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});
+ const time = pass.startTime.split(' ')[1] || pass.startTime; // Extract time portion
return `
${time}
- ${pass.maxEl.toFixed(0)}° max · ${pass.duration.toFixed(0)} min
+ ${pass.maxEl.toFixed(0)}° max · ${pass.duration} min
`;
@@ -13551,14 +13551,11 @@ def satellite_dashboard():
}
function updateStats() {
- document.getElementById('statTracked').textContent = satellites.length;
+ document.getElementById('statTracked').textContent = Object.keys(satellites).length;
document.getElementById('statPasses').textContent = passes.length;
const maxEl = passes.reduce((max, p) => Math.max(max, p.maxEl || 0), 0);
document.getElementById('statMaxEl').textContent = maxEl.toFixed(0) + '°';
-
- // Visible count would need real-time position data
- document.getElementById('statVisible').textContent = '0';
}
function updateTelemetry(pass) {
@@ -13582,21 +13579,8 @@ def satellite_dashboard():
}
function updateCountdown() {
- if (!passes || passes.length === 0) return;
-
- const now = new Date();
- let nextPass = null;
-
- for (const pass of passes) {
- const start = new Date(pass.start);
- if (start > now) {
- nextPass = pass;
- break;
- }
- }
-
- if (!nextPass) {
- document.getElementById('countdownSat').textContent = 'NO UPCOMING';
+ if (!passes || passes.length === 0) {
+ document.getElementById('countdownSat').textContent = 'NO PASSES FOUND';
document.getElementById('countDays').textContent = '--';
document.getElementById('countHours').textContent = '--';
document.getElementById('countMins').textContent = '--';
@@ -13604,9 +13588,37 @@ def satellite_dashboard():
return;
}
- document.getElementById('countdownSat').textContent = nextPass.name;
+ const now = new Date();
+ let nextPass = null;
+
+ for (const pass of passes) {
+ // Parse the startTimeISO field
+ const start = new Date(pass.startTimeISO);
+ if (start > now) {
+ nextPass = pass;
+ break;
+ }
+ }
+
+ if (!nextPass) {
+ // All passes are in the past, show the first one anyway
+ nextPass = passes[0];
+ }
+
+ document.getElementById('countdownSat').textContent = nextPass.satellite;
+
+ const passTime = new Date(nextPass.startTimeISO);
+ const diff = passTime - now;
+
+ if (diff <= 0) {
+ // Pass is happening now or passed
+ document.getElementById('countDays').textContent = '00';
+ document.getElementById('countHours').textContent = '00';
+ document.getElementById('countMins').textContent = '00';
+ document.getElementById('countSecs').textContent = '00';
+ return;
+ }
- const diff = new Date(nextPass.start) - now;
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const mins = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
@@ -13878,7 +13890,16 @@ def predict_passes():
satellites.append(sat)
passes = []
- colors = {'ISS': '#00ffff', 'NOAA-15': '#00ff00', 'NOAA-18': '#ff6600', 'NOAA-19': '#ff3366', 'METEOR-M2': '#9370DB'}
+ colors = {
+ 'ISS': '#00ffff',
+ 'NOAA-15': '#00ff00',
+ 'NOAA-18': '#ff6600',
+ 'NOAA-19': '#ff3366',
+ 'NOAA-20': '#00ffaa',
+ 'METEOR-M2': '#9370DB',
+ 'METEOR-M2-3': '#ff00ff'
+ }
+ name_to_norad = {v: k for k, v in norad_to_name.items()}
ts = load.timescale()
observer = wgs84.latlon(lat, lon)
@@ -13950,7 +13971,7 @@ def predict_passes():
if el > max_elevation:
max_elevation = el
- trajectory.append({'elevation': max(0, el), 'azimuth': azimuth})
+ trajectory.append({'el': max(0, el), 'az': azimuth})
# Only include pass if max elevation meets minimum requirement
if max_elevation >= min_el:
@@ -13976,17 +13997,16 @@ def predict_passes():
passes.append({
'satellite': sat_name,
+ 'norad': name_to_norad.get(sat_name, 0),
'startTime': rise_time.utc_datetime().strftime('%Y-%m-%d %H:%M UTC'),
+ 'startTimeISO': rise_time.utc_datetime().isoformat(),
'maxEl': round(max_elevation, 1),
'duration': duration_minutes,
'trajectory': trajectory,
'groundTrack': ground_track,
- 'currentPosition': {
+ 'currentPos': {
'lat': current_subpoint.latitude.degrees,
- 'lon': current_subpoint.longitude.degrees,
- 'altitude': current_geo.distance().km - 6371, # Approx altitude
- 'elevation': current_alt.degrees,
- 'azimuth': current_az.degrees
+ 'lon': current_subpoint.longitude.degrees
},
'color': colors.get(sat_name, '#00ff00')
})