padalstvo

Padalstvo Vreme

Spletna aplikacija (v celoti prilagojena mobilnim napravam) za vremensko napoved za jadralno padalstvo v Sloveniji. Na podlagi GPS lokacije uporabnika najde najbližje znano vzletišče in prikaže vremenske podatke ter iz njih izpeljane ocene, pomembne za pilote:

Viri podatkov

Vir Kaj ponuja Kako je uporabljen
ARSOvreme.arso.gov.si/api/1.0/location/ Večdnevna napoved (temperatura, veter, oblačnost, padavine) po imenu kraja Strežnik (src/arso.js) pridobi napoved za ARSO lokacijo, najbližjo izbranemu vzletišču
opendata.siopendata.si/vreme/report/ ARSO radar padavin, ALADIN napoved oblačnosti/padavin, verjetnost toče – neposredno po GPS koordinati Strežnik (src/opendata.js) pridobi podatke za koordinato vzletišča/uporabnika
ARSO letalsko vrememeteo.si/met/sl/aviation/ GAFOR, SIGWX, karte vetra na višini Aplikacija povezuje neposredno na uradno stran (grafični/besedilni produkti, primerni za odpiranje, ne za avtomatsko razčlenjevanje)
SkyTech.si Žive vremenske postaje (veter v realnem času) na več slovenskih lokacijah Aplikacija povezuje na SkyTech, ker ne objavljajo uradnega javnega API-ja
Windy.com Veter na višini (izbira nivoja/hPa), globalni model Dodatna povezava na koordinato vzletišča – ARSO/meteo.si javno ne objavlja strojno berljivih kart vetra na višini, zato je Windy pragmatična dopolnitev

Ocene, specifične za jadralno padalstvo

Ocena Kako je izračunana Zanesljivost
Primernost smeri vetra za vzlet (rateLaunchAlignment) Napovedano smer vetra primerja s seznamom launchWindDirections pri vzletišču (src/sites.json) Potrjeno (iz javno dostopnih opisov vzletišč) le za Vogel, Kobalo, Lijak in Kovk. Pri ostalih vzletiščih je polje null in aplikacija to jasno pove namesto ugibanja. Pred letom vedno preveri z lokalnim društvom/šolo letenja.
Termalno okno in XC ocena (estimateThermalWindow) Iz dnevnega poteka temperature/oblačnosti/padavin/vetra oceni približne ure aktivne termike Groba hevristika, ne meteorološki model. Ne upošteva orografije, senc, inverzij ipd.
Baza oblakov (estimateCloudBaseM) Klasično pravilo: 125 m na °C razlike med temperaturo in rosiščem Standarden približek, uporaben za grobo oceno, ne za natančno letalsko planiranje

Pomembna tehnična opomba o smeri vetra: ARSO besedilna polja (npr. dd_shortText) so predvidoma v slovenskih okrajšavah (S = sever, J = jug, V = vzhod, Z = zahod), zato razčlenjevalnik namenoma NE podpira hkrati angleških okrajšav (bi bilo dvoumno – npr. “S” bi lahko pomenilo sever ali “South”). Če je v odgovoru na voljo številska stopinja smeri, jo aplikacija uporabi prednostno.

Pomembna opomba o zanesljivosti

Preverjanje ARSO API odgovora v živo

curl "https://vreme.arso.gov.si/api/1.0/location/?location=Bovec"

Če se struktura razlikuje od pričakovane (features[].properties.days[].timeline[] s polji t, rh, dd, ff_val, ffmax_val, clouds_shortText, tp_acc), prilagodite pick(...) klice v src/arso.js.

Zagon (lokalno)

npm install
npm run build:data   # zgradi public/data/*.json (potrebno, da frontend sploh prikaže podatke)
npm start

Aplikacija posluša na http://localhost:3000 (ali $PORT). Odpri jo v mobilnem brskalniku (ali z DevTools mobilnim pogledom) – vmesnik je zasnovan mobile-first, deluje pa tudi na namizju.

Za razvoj z avtomatskim ponovnim zagonom ob spremembah strežnika:

npm run dev

Frontend bere podatke iz public/data/ (glej razdelek Namestitev spodaj), zato po vsaki spremembi src/sites.json ali če želiš sveže podatke, znova poženi npm run build:data.

Namestitev (deploy)

Frontend (public/) bere podatke izključno iz statičnih JSON datotek v public/data/ (glej spodaj) – zato ga je mogoče gostiti popolnoma statično, brez strežnika. server.js (Express) je na voljo kot dodatna, neobvezna možnost za lokalni razvoj ali za gostovanje s samodejno svežimi podatki ob vsakem zagonu; za GitHub Pages ga ne potrebuješ.

Možnost A: GitHub Pages + lastna domena (priporočeno za ta primer)

Ker je frontend statičen, celotna stran lahko “živi” na GitHub Pages, podatki (ARSO/opendata.si) pa se osvežujejo prek priloženega GitHub Action (.github/workflows/update-data.yml), ki:

  1. vsako uro (in ob vsakem push-u ter ročno prek zavihka ActionsRun workflow) požene node scripts/build-data.js,
  2. ta zgradi sveže JSON datoteke v public/data/,
  3. celotna mapa public/ se objavi na GitHub Pages prek uradnih actions/upload-pages-artifact + actions/deploy-pages.

Pomembno: podatki se ne osvežijo ob vsakem obisku strani, ampak samo ob vsakem teku te Action (privzeto vsako uro) – obiskovalci med dvema tekoma vidijo isti posnetek. Čas zadnje osvežitve je viden na vrhu strani (“Podatki osveženi: …”).

Koraki za omogočanje:

  1. V nastavitvah repozitorija pojdi na Settings → Pages in pod Build and deployment → Source izberi GitHub Actions (ne “Deploy from a branch”).
  2. Če to vejo (claude/weather-forecast-mobile-app-cjwy4o) združiš v svojo glavno vejo (npr. main), v update-data.yml pod on.push.branches dodaj/zamenjaj ime te veje, da se stran gradi tudi ob vsakem push-u.
  3. Prvi tek sproži ročno: Actions → “Osveži vremenske podatke in objavi na GitHub Pages” → Run workflow. Po par minutah bo stran dosegljiva na https://<uporabnik>.github.io/<repo>/.
  4. Lastna domena: v Settings → Pages → Custom domain vpiši svojo domeno (npr. vreme.tvojadomena.si) in shrani – GitHub bo sam ustvaril CNAME datoteko v izhodnem artefaktu. Pri registratorju domene nastavi:
    • za poddomeno (npr. vreme.tvojadomena.si): CNAME zapis na <uporabnik>.github.io;
    • za apex/golo domeno (tvojadomena.si): A zapisi na GitHub Pages IP-je 185.199.108.153, 185.199.109.153, 185.199.110.153, 185.199.111.153 (po želji tudi ustrezni AAAA za IPv6).
    • Po propagaciji DNS (lahko traja do nekaj ur) v Settings → Pages obkljukaj Enforce HTTPS.

Možnost B: Node/Express strežnik (Render, Railway, Fly.io, VPS + PM2, Docker …)

npm install
npm run build:data   # enkratna izgradnja public/data/ (ali pusti prazno – API poti spodaj delujejo tudi brez tega)
npm start

Strežnik posluša na $PORT (privzeto 3000) in poleg statičnih datotek ponuja tudi /api/sites, /api/nearest in /api/weather – uporabno, če želiš vedno sveže podatke ob vsaki zahtevi namesto urne osvežitve. Ni potrebnih API ključev.

Struktura projekta

.github/workflows/update-data.yml   Urna osvežitev podatkov + objava na GitHub Pages
scripts/build-data.js                Zgradi public/data/*.json iz ARSO/opendata.si
server.js                            (Neobvezno) Express strežnik za lokalni razvoj / žive API poti
src/sites.json                       Seznam znanih slovenskih vzletišč (uredi/dodaj po potrebi)
src/geo.js                           Haversine razdalja, iskanje najbližjega vzletišča
src/fetchUtil.js                     fetch s časovno omejitvijo in predpomnilnikom (10 min TTL)
src/arso.js                          Klient za ARSO napoved po imenu kraja
src/opendata.js                      Klient za opendata.si GPS poročilo (radar/ALADIN/toča)
src/paragliding.js                   Izpeljane ocene: baza oblakov, ocena vetra, termika, povezave
public/                              Mobilno prilagojen frontend (vanilla HTML/CSS/JS, brez build koraka)
public/data/                         Generirano z `npm run build:data` – NI v git repozitoriju (.gitignore)

Dodajanje vzletišč

Uredi src/sites.json – vsak vnos potrebuje id, name, region, lat, lon, elevation (m), arsoLocation (ime kraja, kot ga pozna ARSO napoved) in po želji skytechUrl ter notes. Koordinate in ARSO imena krajev za obstoječi seznam so bila zbrana iz javno dostopnih virov (turistične strani, Paragliding Geopedia) in jih pred resno uporabo priporočamo preveriti/dopolniti s podatki lokalnih klubov.

Varnost in odgovornost

Aplikacija je informativno orodje. Ocene vetra, termike in baze oblakov so poenostavljene in ne nadomeščajo uradnega vremenskega briefinga, GAFOR/SIGWX produktov ali lastne presoje pilota pred letom.