Aggiunto collegamento al server

This commit is contained in:
Giuseppe Raffa
2026-03-11 15:25:03 +01:00
parent c37f30e4ea
commit 41f33ce181
51 changed files with 3088 additions and 4414 deletions

View File

@@ -83,15 +83,28 @@ function formatWithUnit(value, unitKey, category = 'forecast') {
return `${value}${unit}`;
}
async function getForecast(location) {
async function getForecast(location, options = { mode: 'both' }) {
const mode = options.mode || 'both';
const params = [];
const currentParams = FORECAST_PARAMS.current.join(",");
const hourlyParams = FORECAST_PARAMS.hourly.join(",");
if (mode === 'both' || mode === 'current') {
params.push('current=' + currentParams);
}
if (mode === 'both' || mode === 'hourly') {
params.push('hourly=' + hourlyParams);
}
if (!location?.latitude || !location?.longitude) {
console.warn('[OpenMeteo] Coordinate non valide per forecast');
return null;
}
const currentParams = FORECAST_PARAMS.current.join(",");
const hourlyParams = FORECAST_PARAMS.hourly.join(",");
const api = `https://api.open-meteo.com/v1/forecast?latitude=${location.latitude}&longitude=${location.longitude}&hourly=${hourlyParams}&current=${currentParams}`;
const api = `https://api.open-meteo.com/v1/forecast?latitude=${location.latitude}&longitude=${location.longitude}&${params.join('&')}`;
try {
const response = await axios.get(api, {
@@ -102,11 +115,6 @@ async function getForecast(location) {
const { data } = response;
if (!data?.current) {
console.warn('[OpenMeteo Forecast] Risposta senza dati current');
return null;
}
// Aggiorna unità globali da API response
if (data.current_units) {
globalUnits.forecast = {
@@ -122,23 +130,36 @@ async function getForecast(location) {
}
return {
temperature: data.current.temperature_2m ?? null,
humidity: data.current.relative_humidity_2m ?? null,
pressure: data.current.pressure_msl ?? null,
windSpeed: data.current.wind_speed_10m ?? null,
windDirection: data.current.wind_direction_10m ?? null,
windGusts: data.current.wind_gusts_10m ?? null,
rain: data.current.rain ?? null,
precipitation: data.current.precipitation ?? null,
// Unità di misura
timestamp: Date.now(),
temperature: data.current?.temperature_2m ?? null,
humidity: data.current?.relative_humidity_2m ?? null,
pressure: data.current?.pressure_msl ?? null,
// Refactored to match sensorsReferences.json hierarchy
wind: {
speed: data.current?.wind_speed_10m ?? null,
direction: data.current?.wind_direction_10m ?? null,
gusts: data.current?.wind_gusts_10m ?? null,
},
rain: data.current?.rain ?? null,
precipitation: data.current?.precipitation ?? null, // Keeping simple properties flat
// Unita di misura
units: globalUnits.forecast,
// Dati orari per grafici
hourly: {
// Parametri orari
hourly: data.hourly ? {
time: data.hourly?.time,
temperature: data.hourly?.temperature_2m,
pressure: data.hourly?.pressure_msl,
precipitationProbability: data.hourly?.precipitation_probability,
precipitation: data.hourly?.precipitation,
rain: data.hourly?.rain,
cloudCover: data.hourly?.cloud_cover,
windDirection: data.hourly?.wind_direction_10m,
humidity: data.hourly?.relative_humidity_2m,
windSpeed: data.hourly?.wind_speed_10m
},
} : null,
hourlyUnits: data.hourly_units || null
};
} catch (error) {
@@ -147,15 +168,28 @@ async function getForecast(location) {
}
}
async function getSeaConditions(location) {
async function getSeaConditions(location, options = { mode: 'both' }) {
const mode = options.mode || 'both';
const params = [];
const currentParams = MARINE_PARAMS.current.join(",");
const hourlyParams = MARINE_PARAMS.hourly.join(",");
if (mode === 'both' || mode === 'current') {
params.push('current=' + currentParams);
}
if (mode === 'both' || mode === 'hourly') {
params.push('hourly=' + hourlyParams);
}
if (!location?.latitude || !location?.longitude) {
console.warn('[OpenMeteo] Coordinate non valide per onde');
return null;
}
const currentParams = MARINE_PARAMS.current.join(",");
const hourlyParams = MARINE_PARAMS.hourly.join(",");
const api = `https://marine-api.open-meteo.com/v1/marine?latitude=${location.latitude}&longitude=${location.longitude}&hourly=${hourlyParams}&current=${currentParams}&models=ecmwf_wam`;
const api = `https://marine-api.open-meteo.com/v1/marine?latitude=${location.latitude}&longitude=${location.longitude}&${params.join('&')}&models=ecmwf_wam`;
try {
const response = await axios.get(api, {
@@ -166,11 +200,6 @@ async function getSeaConditions(location) {
const { data } = response;
if (!data?.current) {
console.warn('[OpenMeteo Marine] Risposta senza dati current');
return null;
}
// Aggiorna unità globali da API response
if (data.current_units) {
globalUnits.waves = {
@@ -184,23 +213,28 @@ async function getSeaConditions(location) {
}
return {
waveHeight: data.current.wave_height ?? null,
wavePeriod: data.current.wave_period ?? null,
waveDirection: data.current.wave_direction ?? null,
wavePeakPeriod: data.current.wave_peak_period ?? null,
currentDirection: data.current.ocean_current_direction ?? null,
currentVelocity: data.current.ocean_current_velocity ?? null,
// Refactored to match sensorsReferences.json hierarchy
waves: {
height: data.current?.wave_height ?? null,
period: data.current?.wave_period ?? null,
direction: data.current?.wave_direction ?? null,
peakPeriod: data.current?.wave_peak_period ?? null
},
// Keeping these flat essentially
currentDirection: data.current?.ocean_current_direction ?? null,
currentVelocity: data.current?.ocean_current_velocity ?? null,
// Unità di misura
units: globalUnits.waves,
// Dati orari per grafici
hourly: {
hourly: data.hourly ? {
time: data.hourly?.time,
waveHeight: data.hourly?.wave_height,
wavePeriod: data.hourly?.wave_period,
waveDirection: data.hourly?.wave_direction,
currentDirection: data.hourly?.ocean_current_direction,
currentVelocity: data.hourly?.ocean_current_velocity
},
} : null,
hourlyUnits: data.hourly_units || null
};
} catch (error) {