V 1.7.0 feat: Sonnenauf-/untergang und Mondphase berechnet
Die Header-Zeile zeigte bisher feste Platzhalter ("06:45", "18:30",
"abnehmend 50%"). Jetzt werden die Werte tatsaechlich gerechnet, ohne
neue Abhaengigkeit:
- utils/astro.js: getSunTimes() nach dem NOAA-Sonnenstandsalgorithmus
inkl. Hoehenkorrektur, getMoonPhase() nach gekuerzten Meeus-Reihen.
- Standort steht als Konstante STATION in App.jsx und speist sowohl
Anzeige als auch Berechnung; Koordinaten auf die echten Stationswerte
korrigiert (48° 52′ 27″ N, 9° 35′ 46″ E, 547 m NN).
Geprueft gegen unabhaengige Referenzimplementierungen: Sonnenzeiten
<= 50 s Abweichung gegen den vollstaendigen NOAA-Algorithmus, Neu- und
Vollmondzeitpunkte <= 39 min gegen Meeus Kap. 49.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+31
-6
@@ -1,7 +1,28 @@
|
||||
import { useState, useEffect, useRef } from 'react'
|
||||
import WeatherDashboard from './components/WeatherDashboard'
|
||||
import { getSunTimes, getMoonPhase, formatTime, formatMoonPhase } from './utils/astro'
|
||||
import './App.css'
|
||||
|
||||
// Grad/Minuten/Sekunden in Dezimalgrad
|
||||
const dms = (deg, min, sec) => deg + min / 60 + sec / 3600
|
||||
|
||||
// Dezimalgrad zurueck nach Grad/Minuten/Sekunden fuer die Anzeige
|
||||
function formatDms(value) {
|
||||
let deg = Math.floor(value)
|
||||
let min = Math.floor((value - deg) * 60)
|
||||
let sec = Math.round(((value - deg) * 60 - min) * 60)
|
||||
if (sec === 60) { sec = 0; min += 1 } // Rundungsuebertrag
|
||||
if (min === 60) { min = 0; deg += 1 }
|
||||
return `${deg}° ${min}′ ${sec}″`
|
||||
}
|
||||
|
||||
// Standort der Wetterstation — Basis fuer Header-Anzeige und Astro-Berechnung
|
||||
const STATION = {
|
||||
lat: dms(48, 52, 27), // noerdliche Breite
|
||||
lon: dms(9, 35, 46), // oestliche Laenge
|
||||
elevation: 547, // Meter ueber NN
|
||||
}
|
||||
|
||||
// API-Basis-URL: in Dev direkt auf Backend, in Prod ueber Nginx-Proxy
|
||||
const API_BASE = import.meta.env.DEV ? 'http://localhost:8000' : '/api'
|
||||
|
||||
@@ -193,11 +214,13 @@ function App() {
|
||||
minute: '2-digit'
|
||||
})
|
||||
|
||||
// TODO: Sonnenauf-/untergang und Mondphase berechnen
|
||||
// Aktuell Platzhalter - benoetigt Bibliothek wie 'suncalc'
|
||||
const sunrise = "06:45"
|
||||
const sunset = "18:30"
|
||||
const moonPhase = "abnehmend 50%"
|
||||
// Sonnenauf-/untergang fuer heute am Stationsstandort
|
||||
const sunTimes = getSunTimes(now, STATION.lat, STATION.lon, STATION.elevation)
|
||||
const sunrise = formatTime(sunTimes.sunrise)
|
||||
const sunset = formatTime(sunTimes.sunset)
|
||||
|
||||
// Mondphase zum aktuellen Zeitpunkt
|
||||
const moonPhase = formatMoonPhase(getMoonPhase(now))
|
||||
|
||||
return (
|
||||
<div className="app">
|
||||
@@ -205,7 +228,9 @@ function App() {
|
||||
<h1>Aktuelle Wetterdaten</h1>
|
||||
<div className="header-datetime">{dateStr} - {timeStr} Uhr</div>
|
||||
<div className="header-spacer"></div>
|
||||
<div className="header-coordinates">48.6 N - 9.6 E - 574 m NN</div>
|
||||
<div className="header-coordinates">
|
||||
{formatDms(STATION.lat)} N - {formatDms(STATION.lon)} E - {STATION.elevation} m NN
|
||||
</div>
|
||||
<div className="header-astro">
|
||||
Sonnen-Aufgang: {sunrise} - Untergang: {sunset} Mond-Phase: {moonPhase}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user