# Observatory Simulation ๐Ÿ”ญ Eine realistische Observatoriums-Simulation mit NFC-Tag-basierter Kuppelsteuerung, WebSocket-Architektur und smooth Teleskop-Tracking. ## Features - ๐Ÿ”ญ **Teleskop-Rotation**: Automatische 1 U/min CW-Rotation mit manueller Steuerung - ๐Ÿ  **Intelligente Kuppel**: NFC-Tag-basierte Positionierung mit smooth Bewegung - ๐ŸŒ **WebSocket-Architektur**: Multi-Task-System mit Real-time-Kommunikation - ๐Ÿ“ฑ **Responsive UI**: Modern dark theme mit Touch-Steuerung - ๐ŸŽฏ **360ยฐ-Bug-frei**: Korrekte Winkeldifferenz-Berechnungen - ๐Ÿท๏ธ **36 NFC-Tags**: Alle 10ยฐ fรผr realistische Positionserkennung ## Docker Deployment ๐Ÿณ ### Quick Start ```bash # Repository klonen git clone cd KuppelSimulation/JS # Mit Docker Compose starten docker compose up -d # Simulation รถffnen open http://localhost:3005 ``` ### Manuelle Docker Commands ```bash # Docker Image bauen docker build -t observatory-simulation . # Container starten docker run -d \\ --name observatory-sim \\ -p 3005:3005 \\ observatory-simulation # Container Logs anzeigen docker logs observatory-sim # Container stoppen docker stop observatory-sim ``` ### Production Setup mit Nginx ```bash # Production Profile aktivieren docker compose --profile production up -d # Zugriff รผber Port 80/443 open http://observatory.local ``` ## Development Setup ๐Ÿ’ป ### Lokale Entwicklung ```bash # Dependencies installieren npm install # Development Server starten npm start # ร–ffne http://localhost:3005 ``` ### Verfรผgbare Befehle ```bash npm start # Server starten npm run dev # Development mode mit auto-reload npm test # Tests ausfรผhren npm run lint # Code linting npm run build # Production build ``` ## System-Architektur ๐Ÿ—๏ธ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” WebSocket โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Telescope โ”‚ โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ โ”‚ Server โ”‚ โ”‚ (Rotation) โ”‚ โ”‚ (Socket.io) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” WebSocket โ”‚ WebSocket โ”‚ Dome โ”‚ โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ (NFC Tracking) โ”‚ โ”‚ โ”‚ Visualization โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ (Canvas) โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Web Browser โ”‚ โ”‚ (User Interface)โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## Steuerung ๐ŸŽฎ ### Teleskop - **Automatisch**: 6ยฐ/sec CW-Rotation (1 U/min) - **+15ยฐ Button**: Schnelle CW-Bewegung - **+45ยฐ Button**: GroรŸe CW-Bewegung - **-15ยฐ Button**: Schnelle CCW-Bewegung - **-45ยฐ Button**: GroรŸe CCW-Bewegung ### Kuppel (automatisch) - **NFC-Tag-Navigation**: 36 Tags alle 10ยฐ - **Intelligente Trigger**: Bei 6ยฐ Teleskop-Abweichung - **Smooth Bewegung**: 0.5ยฐ/Frame (15ยฐ/sec) - **CW-Puffer**: Fรผr groรŸe Sprรผnge ## Technische Details โš™๏ธ ### Docker Features - **Multi-Stage Build**: Optimierte Image-GrรถรŸe - **Non-Root User**: Sicherheit durch `observatory` User - **Health Checks**: Automatische Container-รœberwachung - **Alpine Linux**: Minimale Basis fรผr kleine Images - **Volume Support**: Persistente Daten mรถglich ### WebSocket Events ```javascript // Teleskop โ†’ Server 'telescope-position': { angle: 123.5 } // Kuppel โ†’ Server 'dome-position': { angle: 145.0, slotWidth: 20 } // Server โ†’ Clients (Broadcast) 'telescope-position': { angle: 123.5 } 'dome-position': { angle: 145.0, slotWidth: 20 } ``` ### NFC-Tag-System ```javascript // Tag-Berechnung tagIndex = Math.floor(angle / 10) // 0-35 tagAngle = tagIndex * 10 + 5 // Mitte des Tags // Beispiel angle: 123ยฐ โ†’ tagIndex: 12 โ†’ tagAngle: 125ยฐ ``` ## Environment Variables ๐Ÿ”ง ```bash NODE_ENV=production # Produktions-Modus PORT=3005 # Server Port LOG_LEVEL=info # Logging Level ``` ## Monitoring & Debugging ๐Ÿ“Š ### Container Logs ```bash # Real-time Logs docker logs -f observatory-sim # Letzte 100 Zeilen docker logs --tail 100 observatory-sim ``` ### Browser Console - Teleskop-Positionen: `[Telescope] Broadcasting position: Xยฐ` - Kuppel-Tracking: `[Dome] MOVING: Xยฐ โ†’ Yยฐ, Dir=CW/CCW` - WebSocket: `[Visualization] Received dome position: Xยฐ` ### Health Check ```bash # Container Status prรผfen docker ps # Health Status docker inspect --format='{{.State.Health.Status}}' observatory-sim ``` ## Production Considerations ๐Ÿญ ### Performance - **Image-GrรถรŸe**: ~50MB (Alpine + Node.js) - **Memory**: ~64MB Runtime - **CPU**: Minimal (Event-driven) - **Skalierung**: Horizontal รผber Load Balancer ### Sicherheit - Non-Root Container User - Minimale Attack Surface (Alpine) - Keine sensitive Daten im Image - Network Isolation รผber Docker Networks ### Backup ```bash # Container-Export docker export observatory-sim > observatory-backup.tar # Volume-Backup (falls verwendet) docker run --rm -v observatory-data:/data -v $(pwd):/backup alpine tar czf /backup/data-backup.tar.gz /data ``` ## Troubleshooting ๐Ÿ”ง ### Hรคufige Probleme **Port 3005 bereits belegt:** ```bash # Port-Usage prรผfen lsof -i :3005 netstat -tulpn | grep 3005 # Anderen Port verwenden docker run -p 3006:3005 observatory-simulation ``` **Container startet nicht:** ```bash # Detaillierte Logs docker logs observatory-sim # Container-Inspektion docker inspect observatory-sim ``` **WebSocket-Verbindung fehlschlรคgt:** - Firewall-Einstellungen prรผfen - Browser-Console fรผr JS-Fehler checken - Network-Tab in DevTools analysieren --- ## License MIT License - Observatory Simulation Project