V 1.5.6 fix: Min/Max-Statistik nutzt echte Tages-Min/Max statt Durchschnitt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -821,39 +821,49 @@ const WeatherDashboard = ({ data, currentData = [], rainData = [], timeRange = '
|
|||||||
return format(new Date(raw), timeFormat, { locale: de })
|
return format(new Date(raw), timeFormat, { locale: de })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bei aggregierten Daten (7d+) liegen echte Tages-Min/Max in eigenen Feldern;
|
||||||
|
// bei 24h-Rohdaten sind diese Felder nicht vorhanden → Fallback auf den Messwert selbst.
|
||||||
|
const hasAggregated = periodData[0]?.min_temperature != null
|
||||||
|
|
||||||
// Temperatur
|
// Temperatur
|
||||||
|
const minTempField = hasAggregated ? 'min_temperature' : 'temperature'
|
||||||
|
const maxTempField = hasAggregated ? 'max_temperature' : 'temperature'
|
||||||
const minTempItem = periodData.reduce((min, item) =>
|
const minTempItem = periodData.reduce((min, item) =>
|
||||||
item.temperature != null && (min === null || item.temperature < min.temperature) ? item : min, null)
|
item[minTempField] != null && (min === null || item[minTempField] < min[minTempField]) ? item : min, null)
|
||||||
const maxTempItem = periodData.reduce((max, item) =>
|
const maxTempItem = periodData.reduce((max, item) =>
|
||||||
item.temperature != null && (max === null || item.temperature > max.temperature) ? item : max, null)
|
item[maxTempField] != null && (max === null || item[maxTempField] > max[maxTempField]) ? item : max, null)
|
||||||
|
|
||||||
// Luftfeuchtigkeit
|
// Luftfeuchtigkeit
|
||||||
|
const minHumidityField = hasAggregated ? 'min_humidity' : 'humidity'
|
||||||
|
const maxHumidityField = hasAggregated ? 'max_humidity' : 'humidity'
|
||||||
const minHumidityItem = periodData.reduce((min, item) =>
|
const minHumidityItem = periodData.reduce((min, item) =>
|
||||||
item.humidity != null && (min === null || item.humidity < min.humidity) ? item : min, null)
|
item[minHumidityField] != null && (min === null || item[minHumidityField] < min[minHumidityField]) ? item : min, null)
|
||||||
const maxHumidityItem = periodData.reduce((max, item) =>
|
const maxHumidityItem = periodData.reduce((max, item) =>
|
||||||
item.humidity != null && (max === null || item.humidity > max.humidity) ? item : max, null)
|
item[maxHumidityField] != null && (max === null || item[maxHumidityField] > max[maxHumidityField]) ? item : max, null)
|
||||||
|
|
||||||
// Luftdruck
|
// Luftdruck
|
||||||
|
const minPressureField = hasAggregated ? 'min_pressure' : 'pressure'
|
||||||
|
const maxPressureField = hasAggregated ? 'max_pressure' : 'pressure'
|
||||||
const minPressureItem = periodData.reduce((min, item) =>
|
const minPressureItem = periodData.reduce((min, item) =>
|
||||||
item.pressure != null && (min === null || item.pressure < min.pressure) ? item : min, null)
|
item[minPressureField] != null && (min === null || item[minPressureField] < min[minPressureField]) ? item : min, null)
|
||||||
const maxPressureItem = periodData.reduce((max, item) =>
|
const maxPressureItem = periodData.reduce((max, item) =>
|
||||||
item.pressure != null && (max === null || item.pressure > max.pressure) ? item : max, null)
|
item[maxPressureField] != null && (max === null || item[maxPressureField] > max[maxPressureField]) ? item : max, null)
|
||||||
|
|
||||||
// Wind
|
// Wind
|
||||||
const maxWindGustItem = periodData.reduce((max, item) =>
|
const maxWindGustItem = periodData.reduce((max, item) =>
|
||||||
item.wind_gust != null && (max === null || item.wind_gust > max.wind_gust) ? item : max, null)
|
item.wind_gust != null && (max === null || item.wind_gust > max.wind_gust) ? item : max, null)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
minTemp: minTempItem?.temperature ?? null,
|
minTemp: minTempItem?.[minTempField] ?? null,
|
||||||
maxTemp: maxTempItem?.temperature ?? null,
|
maxTemp: maxTempItem?.[maxTempField] ?? null,
|
||||||
minTempTime: itemTime(minTempItem, 'min_temperature_time'),
|
minTempTime: itemTime(minTempItem, 'min_temperature_time'),
|
||||||
maxTempTime: itemTime(maxTempItem, 'max_temperature_time'),
|
maxTempTime: itemTime(maxTempItem, 'max_temperature_time'),
|
||||||
minHumidity: minHumidityItem?.humidity ?? null,
|
minHumidity: minHumidityItem?.[minHumidityField] ?? null,
|
||||||
maxHumidity: maxHumidityItem?.humidity ?? null,
|
maxHumidity: maxHumidityItem?.[maxHumidityField] ?? null,
|
||||||
minHumidityTime: itemTime(minHumidityItem, 'min_humidity_time'),
|
minHumidityTime: itemTime(minHumidityItem, 'min_humidity_time'),
|
||||||
maxHumidityTime: itemTime(maxHumidityItem, 'max_humidity_time'),
|
maxHumidityTime: itemTime(maxHumidityItem, 'max_humidity_time'),
|
||||||
minPressure: minPressureItem?.pressure ?? null,
|
minPressure: minPressureItem?.[minPressureField] ?? null,
|
||||||
maxPressure: maxPressureItem?.pressure ?? null,
|
maxPressure: maxPressureItem?.[maxPressureField] ?? null,
|
||||||
minPressureTime: itemTime(minPressureItem, 'min_pressure_time'),
|
minPressureTime: itemTime(minPressureItem, 'min_pressure_time'),
|
||||||
maxPressureTime: itemTime(maxPressureItem, 'max_pressure_time'),
|
maxPressureTime: itemTime(maxPressureItem, 'max_pressure_time'),
|
||||||
maxWindGust: maxWindGustItem?.wind_gust ?? null,
|
maxWindGust: maxWindGustItem?.wind_gust ?? null,
|
||||||
|
|||||||
Reference in New Issue
Block a user