48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
import { Injectable } from '@angular/core';
|
|
|
|
export type WeatherPoint = {
|
|
date_time: string;
|
|
temperature?: number;
|
|
humidity?: number;
|
|
pressure?: number;
|
|
wind_speed?: number;
|
|
wind_direction?: number;
|
|
rainfall?: number;
|
|
rain_total?: number;
|
|
light?: number;
|
|
uv?: number;
|
|
};
|
|
|
|
export type ForecastPoint = WeatherPoint & {
|
|
provider?: string;
|
|
issued_at?: string;
|
|
precip_prob?: number;
|
|
lead_hours?: number;
|
|
};
|
|
|
|
@Injectable({ providedIn: 'root' })
|
|
export class ApiService {
|
|
async getStatus(): Promise<{ online_devices: number; server_time: string } | null> {
|
|
try { const r = await fetch('/api/system/status'); return await r.json(); } catch { return null; }
|
|
}
|
|
|
|
async getStations(): Promise<any[]> {
|
|
try { const r = await fetch('/api/stations'); return await r.json(); } catch { return []; }
|
|
}
|
|
|
|
async getHistory(decimalId: string, from: string, to: string, interval: string): Promise<WeatherPoint[]> {
|
|
const params = new URLSearchParams({ decimal_id: decimalId, start_time: from, end_time: to, interval });
|
|
const r = await fetch(`/api/data?${params.toString()}`);
|
|
if (!r.ok) return [];
|
|
return await r.json();
|
|
}
|
|
|
|
async getForecast(stationId: string, from: string, to: string, provider = '', versions = 1): Promise<ForecastPoint[]> {
|
|
const params = new URLSearchParams({ station_id: stationId, from, to, provider, versions: String(versions) });
|
|
const r = await fetch(`/api/forecast?${params.toString()}`);
|
|
if (!r.ok) return [];
|
|
return await r.json();
|
|
}
|
|
}
|
|
|