diff --git a/intercept.py b/intercept.py
index dca6561..27519dd 100755
--- a/intercept.py
+++ b/intercept.py
@@ -107,9 +107,15 @@ TLE_SATELLITES = {
'NOAA-19': ('NOAA 19',
'1 33591U 09005A 24001.00000000 .00000-0 00000-0 00000-0 0 0000',
'2 33591 99.1900 0.0000 0014000 0.0000 0.0000 14.12000000000000'),
+ 'NOAA-20': ('NOAA 20 (JPSS-1)',
+ '1 43013U 17073A 24001.00000000 .00000-0 00000-0 00000-0 0 0000',
+ '2 43013 98.7400 0.0000 0001000 0.0000 0.0000 14.19000000000000'),
'METEOR-M2': ('METEOR-M 2',
'1 40069U 14037A 24001.00000000 .00000-0 00000-0 00000-0 0 0000',
'2 40069 98.5400 0.0000 0005000 0.0000 0.0000 14.21000000000000'),
+ 'METEOR-M2-3': ('METEOR-M2 3',
+ '1 57166U 23091A 24001.00000000 .00000-0 00000-0 00000-0 0 0000',
+ '2 57166 98.7700 0.0000 0002000 0.0000 0.0000 14.23000000000000'),
}
# Known beacon prefixes for detection
@@ -12471,6 +12477,59 @@ def satellite_dashboard():
color: var(--accent-cyan);
}
+ /* Satellite selector */
+ .satellite-selector {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ background: rgba(0,0,0,0.3);
+ padding: 8px 16px;
+ border-radius: 6px;
+ border: 1px solid rgba(0,212,255,0.3);
+ }
+
+ .satellite-selector label {
+ font-family: 'Orbitron', monospace;
+ font-size: 11px;
+ font-weight: 500;
+ letter-spacing: 2px;
+ color: var(--text-secondary);
+ }
+
+ .satellite-selector select {
+ background: rgba(0,212,255,0.1);
+ border: 1px solid var(--accent-cyan);
+ border-radius: 4px;
+ padding: 8px 30px 8px 12px;
+ color: var(--accent-cyan);
+ font-family: 'Orbitron', monospace;
+ font-size: 13px;
+ font-weight: 600;
+ letter-spacing: 1px;
+ cursor: pointer;
+ appearance: none;
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2300d4ff' d='M6 8L2 4h8z'/%3E%3C/svg%3E");
+ background-repeat: no-repeat;
+ background-position: right 10px center;
+ min-width: 180px;
+ }
+
+ .satellite-selector select:hover {
+ background-color: rgba(0,212,255,0.2);
+ box-shadow: 0 0 15px rgba(0,212,255,0.3);
+ }
+
+ .satellite-selector select:focus {
+ outline: none;
+ box-shadow: 0 0 20px rgba(0,212,255,0.4);
+ }
+
+ .satellite-selector select option {
+ background: var(--bg-panel);
+ color: var(--text-primary);
+ padding: 10px;
+ }
+
/* Main dashboard grid */
.dashboard {
position: relative;
@@ -12966,10 +13025,22 @@ def satellite_dashboard():
SATELLITE COMMAND
// INTERCEPT
+
+
+
+
-
-
TRACKING ACTIVE
+
+
TRACKING ACTIVE
--:--:-- UTC
@@ -13144,14 +13215,34 @@ def satellite_dashboard():
let trackLine = null;
let observerMarker = null;
let orbitTrack = null;
+ let selectedSatellite = 25544; // Default to ISS
- const satellites = [
- { name: 'ISS (ZARYA)', norad: 25544 },
- { name: 'NOAA 15', norad: 25338 },
- { name: 'NOAA 18', norad: 28654 },
- { name: 'NOAA 19', norad: 33591 },
- { name: 'METEOR-M2', norad: 40069 }
- ];
+ const satellites = {
+ 25544: { name: 'ISS (ZARYA)', color: '#00ffff' },
+ 25338: { name: 'NOAA 15', color: '#00ff00' },
+ 28654: { name: 'NOAA 18', color: '#ff6600' },
+ 33591: { name: 'NOAA 19', color: '#ff3366' },
+ 40069: { name: 'METEOR-M2', color: '#9370DB' },
+ 43013: { name: 'NOAA 20', color: '#00ffaa' },
+ 54234: { name: 'METEOR-M2-3', color: '#ff00ff' }
+ };
+
+ // Handle satellite selection change
+ function onSatelliteChange() {
+ const select = document.getElementById('satSelect');
+ selectedSatellite = parseInt(select.value);
+ const satName = satellites[selectedSatellite]?.name || 'Unknown';
+
+ // Update tracking status
+ document.getElementById('trackingStatus').textContent = 'ACQUIRING ' + satName;
+ document.getElementById('trackingDot').style.background = 'var(--accent-orange)';
+
+ // Recalculate passes for new satellite
+ calculatePasses();
+
+ // Update real-time position immediately
+ updateRealTimePositions();
+ }
// Initialize dashboard
document.addEventListener('DOMContentLoaded', () => {
@@ -13202,6 +13293,7 @@ def satellite_dashboard():
async function calculatePasses() {
const lat = parseFloat(document.getElementById('obsLat').value);
const lon = parseFloat(document.getElementById('obsLon').value);
+ const satName = satellites[selectedSatellite]?.name || 'Unknown';
try {
const response = await fetch('/satellite/predict', {
@@ -13210,9 +13302,9 @@ def satellite_dashboard():
body: JSON.stringify({
latitude: lat,
longitude: lon,
- hours: 24,
- minEl: 10,
- satellites: satellites.map(s => s.norad)
+ hours: 48,
+ minEl: 5,
+ satellites: [selectedSatellite]
})
});
@@ -13221,11 +13313,22 @@ def satellite_dashboard():
passes = data.passes;
renderPassList();
updateStats();
- if (passes.length > 0) selectPass(0);
+ if (passes.length > 0) {
+ selectPass(0);
+ }
updateObserverMarker(lat, lon);
+
+ // Update tracking status
+ document.getElementById('trackingStatus').textContent = 'TRACKING ' + satName;
+ document.getElementById('trackingDot').style.background = 'var(--accent-green)';
+ } else {
+ document.getElementById('trackingStatus').textContent = 'ERROR: ' + (data.message || 'Unknown');
+ document.getElementById('trackingDot').style.background = 'var(--accent-red)';
}
} catch (err) {
console.error('Pass calculation error:', err);
+ document.getElementById('trackingStatus').textContent = 'CONNECTION ERROR';
+ document.getElementById('trackingDot').style.background = 'var(--accent-red)';
}
}
@@ -13612,7 +13715,9 @@ def predict_passes():
25338: 'NOAA-15',
28654: 'NOAA-18',
33591: 'NOAA-19',
- 40069: 'METEOR-M2'
+ 43013: 'NOAA-20',
+ 40069: 'METEOR-M2',
+ 57166: 'METEOR-M2-3'
}
sat_input = data.get('satellites', ['ISS', 'NOAA-15', 'NOAA-18', 'NOAA-19'])