Aggiunto collegamento al server
This commit is contained in:
@@ -1,32 +0,0 @@
|
||||
const apiToken = "08a9a9828f8186c661d0293741fd01971bc2d2f4"
|
||||
|
||||
function aisStream() {
|
||||
|
||||
const socket = new WebSocket('wss://stream.aisstream.io/v0/stream');
|
||||
socket.onopen = function (_) {
|
||||
let subscriptionMessage = {
|
||||
Apikey: apiToken,
|
||||
BoundingBox: [[15.0, 37.5], [16.5, 38.8]]
|
||||
}
|
||||
socket.send(JSON.stringify(subscriptionMessage));
|
||||
|
||||
console.log("✅ WebSocket Connected");
|
||||
};
|
||||
|
||||
socket.onmessage = function (event) {
|
||||
event.data.text().then(text => {
|
||||
try {
|
||||
const json = JSON.parse(text);
|
||||
console.log(json);
|
||||
|
||||
} catch (e) {
|
||||
console.error("Invalid JSON:", text);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
socket.onerror = (error) => console.error('WebSocket Error:', error);
|
||||
socket.onclose = () => console.log('WebSocket Connection Closed');
|
||||
}
|
||||
|
||||
module.exports = { aisStream };
|
||||
@@ -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}¤t=${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}¤t=${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) {
|
||||
|
||||
Reference in New Issue
Block a user