# CHANGELOG — Astronomische Beobachtungsliste

---

## v32.0.0 · 2026-04-30  *(jpl.js, compute.js, beobachtungsliste_v32.html)*
### Neu — SIMBAD Detailinfo
- **ⓘ-Icon** nach jedem Objektnamen — Klick öffnet SIMBAD-Detailmodal
- Abfrage via SIMBAD TAP API (`simbad.cds.unistra.fr/simbad/sim-tap/sync`) als POST
- **Angezeigt**: Hauptbezeichnung, Objekt-Typ (deutsch), Koordinaten J2000, Helligkeiten B/V/R, Parallaxe + Entfernung, Radialgeschwindigkeit, Spektraltyp, Morphologie, bis zu 12 Alternativnamen
- Link zum vollständigen SIMBAD-Eintrag
- Proxy: lokal (`simbad_proxy.py` Port 11113) mit Fallback auf heartsome.de
- **`simbad_proxy.py`**: lokaler Python-CORS-Proxy für SIMBAD

### Behoben (VSX)
- Nächstes Maximum: Jahr 8597 durch falschen HJD-Offset behoben
  - `jdRef + 2400000.5` war falsch — `jdRef` ist bereits volles JD
  - VSX-Epochen als reduziertes HJD (< 2400000) werden jetzt automatisch erkannt
  - Plausibilitätsprüfung: Datum außerhalb ±10 Jahre → kein Maximum angezeigt

### Behoben (SIMBAD ADQL)
- `LIMIT` → `TOP` (SIMBAD verwendet SQL-92-Syntax)
- `JOIN ident ON oid=oidref` → `JOIN ident ON basic.oid = ident.oidref`

---

## v31.1.0 · 2026-04-30  *(alpaca-client.js v3.7)*
### Neu — Aktivitäts-Indikatoren
- **Tab-Dots**: pulsierender gelber Punkt auf aktivem Tab (Kamera fotografiert, Fokus fährt, Filter wechselt, Teleskop slewed)
- **Activity-Banner**: farbiger Streifen unter den Tabs mit laufender Aktion
  - 🔵 Slewing: `🔭 Slewing → NGC 7293` + Stop-Button
  - 🟢 Belichtung: `📷 Belichtung 30s · 47%` + Stop-Button
  - 🟣 Fokus: `🔧 Fokussiert → 15420` + Stop-Button
  - 🟡 Filter: `🎨 Filter wechselt …`
- Banner und Dots sichtbar auf **allen Tabs** — auch wenn anderer Tab aktiv
- `_setTabDot(tabId, state)` und `_setActivityBanner(type, text, abortFn)`
- `_abortAktiveAktion()` für Stop-Button

### Behoben (Kamera)
- `startExposure()`: `setBinning()` und `setGain()` optional (try/catch) — Treiber die Gain nicht unterstützen (z.B. OmniSim) blockieren nicht mehr die Belichtung
- Gain-Feld wird ausgegraut wenn Treiber Gain nicht unterstützt
- `_camWasExposing` Zustandsmerker: Banner wird genau einmal gelöscht wenn Belichtung endet
- `abortExposure()` löscht Tab-Dot und Banner korrekt
- Optionale Endpoints (`gain`, `offset`, `readoutmode` etc.) erscheinen nicht mehr als Fehler im Status

---

## v31.0.0 · 2026-04-29  *(beobachtungsliste_v31.html, alpaca-client.js, equipment-config.js)*
### Neu — Erweitertes Alpaca Geräte-Panel (Tab-basiert)
- **5-Tab-Interface**: Teleskop · Kamera · Fokus · Filter · Wetter
- **Tab Teleskop**: Montierungs-Info (Name, Typ, Nutzlast, PE, GoTo-fähig)
- **Tab Kamera**: Status, Belichtung starten (Dauer/Binning/Gain), Kühler, Fortschrittsbalken
- **Tab Fokus**: Position, absolute/relative Steuerung (10–1000 Schritte), TempComp
- **Tab Filterrad**: Filter-Buttons (aktiver hervorgehoben), Fokus-Offsets
- **Tab Wetter**: 9 Sensoren als Kacheln
- **Steuergerät-Dropdown**: StellarMate Pro, StellarMate OS, ASIAIR Plus/Pro, Windows ASCOM, OmniSim
- **Montierungs-Dropdown**: 30 Montierungen (ZWO, Sky-Watcher, iOptron, Celestron, 10Micron, Losmandy, Rainbow, Planewave, ASA, Smart Scopes)
- **`alpaca_cors_proxy.py v2`**: Auto-Discovery, kein Polling-Rauschen, Port-Konflikt-Erkennung
- **`alpaca_proxy_starten.bat`**: Doppelklick-Starter

### StellarMate Pro / INDI-Integration
- `indi_alpaca_server` bereits in `indi-bin` enthalten
- Setup: `indiserver ... indi_alpaca_server &` → `indi_setprop "INDI Alpaca Server.CONNECTION.CONNECT=On"` → `indi_setprop "INDI Alpaca Server.SERVER_CONTROL.START=On"`
- Exponiert INDI-Geräte als Alpaca auf Port 11111
- Python CORS-Proxy auf Port 11112 für Browser-Zugriff
- Steuergerät-Dropdown trägt IP/Port automatisch ein + CORS-Hinweis

### Wann wird der CORS-Proxy benötigt?
| Situation | Proxy nötig? |
|---|---|
| OmniSim (Test-Simulator) | **Ja** — kein CORS-Header |
| ASCOM Remote auf Windows | **Ja** — kein CORS-Header |
| Seestar S50/S30 (neuere Firmware) | Meist **nein** |
| StellarMate (indi_alpaca_server) | **Ja** — kein CORS-Header |
| App als `file://` geöffnet | **Kein Netzwerk möglich** |

---

## v30.0.0 · 2026-04-29  *(jpl.js, compute.js)*
### Neu — Veränderliche Sterne (AAVSO VSX)
- **★ VSX-Toolbar**: Radius (3–20°), Max. Magnitude (10–14), Typ-Filter
- **17 Typ-Badges** farbkodiert (Mira violett, Cepheiden blau, RR Lyrae cyan, Bedeckungsveränderliche orange, Novae rot)
- **Nächstes Maximum** aus HJD-Epoche + Periode — rot ≤3d, gelb ≤14d, grün >14d
- **VSX↗-Link** zur AAVSO-Detailseite, GoTo-Integration
- API: `vsx.aavso.org/index.php?view=api.list` über heartsome.de-Proxy

### Behoben (VSX-Debugging)
- `RA2000` ist Dezimalgrad (0–360), nicht Stunden
- Feldname `Declination2000` (nicht `Decl2000`)
- `%2B` URL-Encoding für positive Deklinationen
- `MaxMag`/`MinMag` Parsing: `"9.0 V"` → `9.0`
- `manualUrl` Temporal-Dead-Zone-Fehler

---

## v29.0.0 · 2026-04-29  *(equipment-config.js, fov-calculator.js, compute.js)*
### Neu — FOV-Rechner
- **📐-Button im Header** öffnet FOV-Rechner-Modal
- **`equipment-config.js`**: 80+ Optiken, 40+ Sensoren, Berechnungsfunktionen
- **`fov-calculator.js`**: Bildfeld, Abbildungsmaßstab, f/-Verhältnis, max. Belichtungszeit
- **FOV-Passung je Tabellenzeile**: `✓ passt` · `→ klein` · `⚠ eng` · `✗ groß`
- Smart-Scope-Erkennung: Seestar S50 → Sensor IMX462 automatisch gesperrt

---

## v28.0.0 · 2026-04-29  *(builtin-catalogs.js, catalog.js, ui.js)*
### Neu — Weitere eingebettete Kataloge
- **`builtin-catalogs.js`**: Messier (110) + Caldwell (109) + **Herschel 400 (318 Objekte)**
- Katalog-Dropdown mit Trennlinie `── Eigene Kataloge ──`
- Eingebettete Kataloge gegen Löschen geschützt
- Impressum: dynamische Versionstabelle, Modul-Grid, Changelog-Link

---

## alpaca-client.js v3.6 · 2026-04-28
### Neu
- `AlpacaLog` — konfigurierbares Logging (Level 0–5)
- Polling-Requests separat steuerbar (`AlpacaLog.showPolling = true`)
- Version-Banner beim Laden (Cache-Erkennung)

### Log-Level
| Level | Zeigt |
|---|---|
| 0 | Komplett still |
| 1 | Nur Fehler |
| **2** | **Fehler + Warnungen ← Standard** |
| 3 | + Verbindungs-Events (GoTo, Park, Sync) |
| 4 | + alle HTTP-Requests (ohne Polling) |
| 5 | + Polling-Requests (RA/Dec alle 1.5s) |

### Behoben
- `this.focuser?.status?.position` — doppelter `?.`-Operator (Crash-Ursache)
- `formatRa()` / `formatDec()` null-safe
- `canmoveaxis` mit Pflichtparameter `Axis=0/1`
- `getRaDec()` / `getMotionStatus()` / `loadCapabilities()` null-safe

---

## alpaca-client.js v3.5 · 2026-04-28
### Behoben
- `json?.ErrorNumber` null-safe, `json.errornumber` Fallback
- `_put()` akzeptiert leere Antworten
- `res?.status` null-safe

---

## v27.1.0 · 2026-04-28  *(compute.js, alpaca-client.js)*
### Neu — GoTo per Zeilen-Klick
- Klick auf Tabellenzeile → GoTo mit dreistufigem Status-Feedback
- Schwebendes Badge (Phase 1–3), Zeilen-Highlighting
- `body.alpaca-bereit` → Fadenkreuz-Cursor
- `_slewDistArcsec()` / `_slewFortschritt()` Hilfsrechner

---

## v27.0.0 · 2026-04-28  *(alle Module)*
### Architektur — Modularisierung
| Datei | Inhalt |
|---|---|
| `version.js` | APP_VERSION, APP_DATE |
| `astro-math.js` | RA/Dec, JD, LST, Höhe, Dämmerung |
| `moon.js` | Mondposition (Meeus), Phase |
| `ui.js` | Modals, Rotlicht, Collapse, Notizen |
| `export.js` | AsiAir/NINA/SkySafari/Voyager CSV |
| `chart.js` | Höhenkurven-Canvas |
| `jpl.js` | JPL Horizons, NEA, Supernovae, VSX, SIMBAD |
| `builtin-catalogs.js` | Messier, Caldwell, Herschel 400 |
| `catalog.js` | IndexedDB, Import, Mapping, Parser |
| `location.js` | Orte, Nominatim |
| `equipment-config.js` | Optiken, Sensoren, Montierungen, Controller |
| `fov-calculator.js` | FOV-Modal-UI |
| `alpaca-client.js` | ASCOM Alpaca alle 8 Geräteklassen |
| `compute.js` | berechne(), renderTable() |

---

## v26.0.0 · 2026-04-28
### Neu
- `AlpacaDevice` Basisklasse, alle 8 Geräteklassen
- Auto-Discovery nach Teleskop-Verbindung

### Behoben
- `AlpacaUI._init()` null-safe
- `_setBtnState()` null-safe

---

## v25.0.0 · 2026-04-28
### Behoben
- `new AlpacaUI()` in try/catch — verhindert App-Blockierung

---

## v24.0.0 · 2026-04-27
### Neu
- Lesbare deutsche Fehlermeldungen im Alpaca-Modul
- 8-Sekunden-Timeout, Mehrzeilige Fehlermeldungen

---

## v23.0.0 · 2026-04-27
### Geändert
- Teleskop-Steuerung als Modal (🔭-Button im Header)
- Jog-Kreuz mit Geschwindigkeitsauswahl

---

## v22.0.0 · 2026-04-27
### Neu — ASCOM Alpaca Teleskop-Steuerung
- GoTo 🔭 und Sync ↻, Discovery, Status-Widget, Park, Tracking, Jog

---

## v21.0.0 · 2026-04-27
### Behoben
- NEA: `neaAbschnittHtml` wiederhergestellt
- Spaltenköpfe JPL/SN/NEA korrekt

---

## v20.0.0 · 2026-04-27
### Behoben
- Collapse-State `sec-sichtbar` korrekt wiederhergestellt

---

## v19.0.0 · 2026-04-27
### Behoben
- Erster gespeicherter Ort beim Start aktiv geladen
- `berechne()` zeigt hilfreiche Meldung bei fehlendem Standort

---

## v18.0.0 · 2026-04-27
### Neu — Collapse
- Alle Tabellenabschnitte ein-/ausklappbar, Zustand persistent (localStorage)

---

## v17.0.0 · 2026-04-27
### Behoben
- NEA: RA/Dec per Horizons-API zum Vorbeiflugdatum

---

## v15.0.0 · 2026-04-27 — NEA (Near Earth Approaches)
## v14.0.0 · 2026-04-27 — Supernovae (Rochester Astronomy)
## v13.0.0 · 2026-04-27 — JPL Horizons (Kometen & Asteroiden)
## v12.0.0 · 2026-04-26 — JSON-Import Fehlerbehandlung
## v11.0.0 · 2026-04-26 — Parser-Selbsttest (38 Tests)
## v10.0.0 · 2026-04-26 — Hilfe-Seite vollständig aktualisiert
## v9.0.0 · 2026-04-26 — Mondberechnung (Jean Meeus Kap. 47)
## v8.0.0 · 2026-04-26 — Rotlicht-Modus (Night Vision)
## v7.0.0 · 2026-04-26 — Export, Höhenkurven, Slew-Reihenfolge, Notizen
## v6.0.0 · 2026-04-25 — Hilfe-Modal, Impressum
## v5.0.0 · 2026-04-25 — IndexedDB, Import-Fortschritt, Lazy Loading
## v4.0.0 · 2026-04-25 — Mehrere Kataloge, Feld-Mapping, gespeicherte Orte
