Platforma za praćenje izrađena za Hrvatski hidrografski institut koja prikuplja, upravlja i objavljuje oceanografske i meteorološke podatke iz mreže postaja duž jadranske obale. Učitava sirove datoteke instrumenata, pohranjuje mjerenja po postaji, pokreće sustav pragova za alarme te poslužuje stranice postaja s podacima uživo i JSON / GeoJSON kartografski API. Rad obavljen za institut — platforma i njezini podaci pripadaju institutu.
Adriatic Sea platforma je koju sam izradio za Hrvatski hidrografski institut za vođenje njegove mreže obalnih nadzornih postaja. Riječ je o Yii 2 advanced-template aplikaciji: autenticirani admin backend u kojem osoblje upravlja postajama, učitava podatke instrumenata i konfigurira alarme, javni portal koji svima prikazuje određene postaje te JSON / GeoJSON API koji napaja kartu jadranske obale uživo.
Podatkovni model oblikovan je prema instrumentima. Pet tipova postaja — morske mijene, valovi, vjetar, tlak i meteorološke — svaki upisuje u vlastitu tablicu baze podataka po postaji, pa silno različita mjerenja supostoje bez raspršene dijeljene sheme. Očitanja morskih mijena kalibriraju se prema upravljanim mareo zero referentnim razinama prije prikaza, sustav pragova za alarm označava vrijednosti izvan raspona bojanim oznakama i obavijestima e-poštom, a cijelo sučelje radi dvojezično na hrvatskom i engleskom.
Javne stranice postaja ostaju aktualne putem interval polling pristupa umjesto slanja s poslužitelja: 30-sekundno odbrojavanje pokreće inkrementalni dohvat koji od poslužitelja traži samo mjerenja novija od posljednje točke već na grafikonu, a pokazatelj svježine upozorava kada je najnovije očitanje postaje starije od petnaest minuta. To je prava količina mehanike za podatke koji pristižu u postojanom ritmu.
Ovo je rad obavljen za institut, ne osobni projekt — platforma, mreža postaja i podaci pripadaju Hrvatskom hidrografskom institutu. Brojevi i mogućnosti navedeni gore preuzeti su izravno iz izvornog koda, a gdje codebase nosi ovisnost koju zapravo ne koristi, ona je izostavljena, a ne pripisana.
Svaka postaja učitava datoteke mjerenja (CSV / DAT) koje se raščlanjuju i upisuju u tablicu baze podataka imenovanu prema toj postaji i tipu. Postaja za morske mijene upisuje u vlastitu tablicu morskih mijena, postaja za valove u vlastitu tablicu valova, pa heterogeni instrumenti supostoje bez jedne goleme dijeljene sheme.
Frontend API krajnja točka prolazi kroz svaku postaju označenu za izvoz, dohvaća njezino najnovije mjerenje sirovim SQL-om prilagođenim po tipu instrumenta i vraća ga kao JSON ili kao GeoJSON FeatureCollection spreman za prikaz na karti tipa Leaflet.
Stranica postaje ne miruje: 30-sekundno odbrojavanje pokreće petlju ispitivanja koja od poslužitelja traži samo mjerenja novija od posljednje već iscrtane točke, dodaje ih na grafikon te ažurira prikaz najnovijeg očitanja i vremena poslužitelja. Riječ je o namjernom interval polling pristupu, ne o slanju s poslužitelja — jednostavno, robusno i primjereno ritmu podataka.
Operateri definiraju imenovane alarme po postaji i mjerenom polju — vrijednost praga, boju te je li riječ o minimumu ili maksimumu. Kada očitanja postaje prijeđu granicu, alarm se vizualno ističe, a obavijesti se šalju e-poštom.
Očitanja morskih mijena besmislena su bez referentne razine. Platforma upravlja mareo zero referentnim razinama po postaji, pa se sirova vrijednost senzora kalibrira u stvarnu, usporedivu razinu morske mijene prije prikaza ili izvoza.
Iza prijave, sustav uloga povezuje korisnike s postajama na koje imaju pravo putem ugovora, uz upis radnji u revizijski zapisnik. Ispred toga, javni portal izlaže samo postaje označene kao javne — samo za čitanje, bez potrebe za računom.
Povijesna mjerenja mogu se filtrirati po vremenskom rasponu i izvesti u tekst s razdjelnicima za daljnju znanstvenu upotrebu, a cijelo sučelje radi na hrvatskom i engleskom iz jednog i18n izvora.
Instrumenti za morske mijene, valove, vjetar, tlak i meteorologiju daju potpuno različita mjerenja. Jedna dijeljena tablica mjerenja bila bi rijetka, tipovima ograničena zbrka, a svaki upit ionako bi se morao granati po tipu postaje.
Svaka postaja upisuje u vlastitu tablicu, imenovanu prema svojoj oznaci i tipu (npr. {code}_tide_data). Stations model na zahtjev razrješuje ispravan naziv tablice, pa ostatak aplikacije tretira postaju kao tipizirani izvor i čita točno one stupce koje taj instrument proizvodi.
Obalnoj karti potrebno je najnovije očitanje po postaji, formatirano i smisleno, ali očitanja žive u mnogim tablicama specifičnim za tip, a vrijednosti morskih mijena beskorisne su bez svoje referentne razine.
Jedna API krajnja točka prolazi kroz postaje za izvoz, pokreće SQL po tipu za najnovije mjerenje i — za morske mijene — kalibrira prema mareo zero postaje te izračunava sljedeću predviđenu ekstremu. Rezultat se emitira kao JSON ili GeoJSON FeatureCollection koji karta može izravno prikazati.
Znanstvenicima u institutu potrebna je puna administrativna kontrola i granice ovlasti; javnosti je potreban siguran prozor samo za čitanje — bez postavljanja druge aplikacije ili dupliciranja podataka.
Advanced template Yii 2 razdvaja autenticirani backend od javnog frontenda nad dijeljenim zajedničkim modelima. Pristup temeljen na ugovorima i revizijski zapis ograđuju admin stranu, dok javni portal i kartografski API izlažu samo postaje izričito označene kao javne — isti podaci, dvoja vrata.