Calculate label + icon ourself

This commit is contained in:
2026-06-24 01:09:13 -04:00
parent 70372a23cf
commit b525dd27c8
3 changed files with 39 additions and 5 deletions

View File

@@ -142,10 +142,10 @@ onMounted(async () => {
<div class="divider" />
<div class="stat-grid">
<div class="stat"><span class="stat-label">Precipitation</span><span class="stat-value">{{ !data.precipitation && data.raining == 'True' ? 'Spitting' : data.precipitation?.toFixed(1) + 'mm'}}</span></div>
<div class="stat"><span class="stat-label">Humidity</span><span class="stat-value">{{ data.humidity?.toFixed(0) }}%</span></div>
<div class="stat"><span class="stat-label">Wind</span><span class="stat-value">{{ data.wind_gusts }} Kph <span class="fg-muted">({{ dir(data.wind_direction) }})</span></span></div>
<div class="stat"><span class="stat-label">Clouds</span><span class="stat-value">{{ data.clouds?.toFixed(0) }}%</span></div>
<div class="stat"><span class="stat-label">Precipitation</span><span class="stat-value">{{ !data.precipitation && data.raining == 'True' ? 'Spitting' : (data.precipitation || 0).toFixed(1) + 'mm'}}</span></div>
<div class="stat"><span class="stat-label">Humidity</span><span class="stat-value">{{ (data.humidity || 0).toFixed(0) }}%</span></div>
<div class="stat"><span class="stat-label">Wind</span><span class="stat-value">{{ data.wind_gusts || 0 }} Kph <span class="fg-muted">({{ dir(data.wind_direction || 0) }})</span></span></div>
<div class="stat"><span class="stat-label">Clouds</span><span class="stat-value">{{ (data.clouds || 0).toFixed(0) }}%</span></div>
<div class="stat"><span class="stat-label">Air Quality</span><span class="stat-value">{{ data.air_quality }} <span class="fg-muted">({{data.air_quality_label}})</span></span></div>
<div class="stat"><span class="stat-label">UV index</span><span class="stat-value">{{ data.uv_index }}</span></div>
</div>

View File

@@ -50,3 +50,35 @@ export async function downloadIcons() {
}))
console.log('✅ Weather icons ready')
}
export function getWeatherCondition(data) {
// Determine primary condition
if (data.lightning_rate > 0 && data.raining === "True") {
return { label: "Thunderstorm", code: 211, icon: "11d" };
}
if (data.raining === "True") {
if (data.precipitation > 7.6) return { label: "Heavy Rain", code: 502, icon: "10d" };
if (data.precipitation > 2.5) return { label: "Moderate Rain", code: 501, icon: "10d" };
return { label: "Light Rain", code: 500, icon: "09d" };
}
if (data.lightning_rate > 500) {
return { label: "Thunderstorm", code: 211, icon: "11d" };
}
if (data.visibility < 10) {
return { label: "Mist", code: 701, icon: "50d" };
}
// Cloud-based conditions
const isDay = data.daytime;
const dayNight = isDay ? "d" : "n";
if (data.clouds > 85) return { label: "Overcast Clouds", code: 804, icon: `04${dayNight}` };
if (data.clouds > 50) return { label: "Broken Clouds", code: 803, icon: `04${dayNight}` };
if (data.clouds > 25) return { label: "Scattered Clouds",code: 802, icon: `03${dayNight}` };
if (data.clouds > 10) return { label: "Few Clouds", code: 801, icon: `02${dayNight}` };
return { label: "Clear Sky", code: 800, icon: `01${dayNight}` };
}

View File

@@ -10,6 +10,7 @@ import {apiReference} from '@scalar/express-api-reference';
import {spec} from './spec.mjs';
import {existsSync} from 'fs';
import {getAirTraffic, getAirTrafficHistory, getShapes} from './airtraffic.mjs';
import {getWeatherCondition} from './openweather.mjs';
const app = express();
const DIR = dirname(fileURLToPath(import.meta.url));
@@ -39,8 +40,9 @@ function filterArr(arr, fields) {
app.get('/api/current', async (req, res) => {
const {fields} = req.query;
const [sensors, coords] = await Promise.all([queryCurrent(), getCoords()]);
const condition = getWeatherCondition(sensors);
const space = getCelestialCurrent(coords.latitude, coords.longitude);
res.json(filterFields({...sensors, ...space}, fields));
res.json(filterFields({...condition, ...sensors, ...space}, fields));
});
// ── Position ──────────────────────────────────────────────────────────────────