Početna / Radovi
Adriatic Sea — Mreža oceanografskih postaja · Hrvatski hidrografski institut
Platforma za praćenje okoliša

Adriatic SeaMreža oceanografskih postaja · Hrvatski hidrografski institut

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.

UlogaFull-stack razvoj (rad za institut)
Godina2017
TehnologijeYii 2 · PHP · MySQL
PovršinaAdmin backend + javni portal + kartografski API
VlasnikHrvatski hidrografski institut
Javna karta jadranske obale s oznakama postaja za morske mijene, valove, vjetar i tlak u stvarnom vremenu
Snimka uskoro
Učitavanje

Sirove datoteke instrumenata, raščlanjene u tablice po postaji

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.

  • Naziv tablice razrješuje se po postaji iz tipa: {designation}_tide_data, _wave_data, _wind_data, _pressure_data, _meteo_data
  • Pet porodica instrumenata: morske mijene, valovi, vjetar, tlak, meteorološke
  • Učitavanje datoteka i prikazi vremenskog raspona obrađuju se u admin backendu
Snimka uskoro
Kartografski API uživo

JSON / GeoJSON izvor za javnu obalnu kartu

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.

  • Najnovija vrijednost morskih mijena / valova / vjetra / tlaka po postaji, formatirana na poslužitelju
  • Postaje za morske mijene vraćaju i sljedeću predviđenu visoku/nisku vrijednost (ekstreme) u odnosu na mareo zero
  • GeoJSON Feature geometrija + svojstva izrađeni po postaji za izravno korištenje na karti
Snimka uskoro
Ažuriranja uživo

Stranice postaja koje se osvježavaju svakih 30 sekundi

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.

  • Vidljivo 30-sekundno odbrojavanje ponovno dohvaća podatke u svakom ciklusu (common.js dataCounter)
  • Inkrementalni dohvat: šalje posljednju iscrtanu vremensku oznaku i prima samo novije retke
  • Označava očitanje zastarjelim (stanje upozorenja) kada su najnoviji podaci stariji od 15 minuta
Snimka uskoro
Alarmi

Upozorenja na pragove s bojanim oznakama

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.

  • Prag po postaji i po polju s oznakom min/max (Alarms model)
  • Hex kod boje po alarmu za ozbiljnost na prvi pogled
  • Dostava e-pošte putem SwiftMailer
Snimka uskoro
Referentne razine mijena

Mareo zero reference za vjerne razine morskih mijena

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.

  • MareoZeroes referentne vrijednosti pohranjene po postaji i kodu (npr. H0)
  • Izmjerene i predviđene razine izračunate u odnosu na nulu postaje
  • Održava postaje na različitim fizičkim referentnim razinama usporedivima
Snimka uskoro
Pristup i revizija

Pristup temeljen na ugovorima i javni portal

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.

  • Uloge superadmina i korisnika; prava na postaje temeljena na ugovorima
  • Revizijski zapis administrativnih radnji
  • Neautenticirani javni prikaz određenih postaja
Snimka uskoro
Izvoz i i18n

Izvoz podataka i dvojezično sučelje

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.

  • Modeli izvoza po tipu (morske mijene / valovi / vjetar / tlak) u tekst s razdjelnicima
  • Filtriranje po vremenskom rasponu kroz cijelu povijest postaje
  • hr-HR i en-US iz jednog skupa datoteka poruka
Arhitektura

Troslojna Yii 2 aplikacija nad MySQL spremištem tablica po postaji, koja objavljuje API spreman za kartu za javni portal.

Klijent
Admin backend + javni portal
Autenticirani admin (postaje, učitavanja, alarmi, korisnici) i neautenticirani javni prikaz uživo određenih postaja.
Aplikacija
Yii 2 — backend / frontend / console
MVC slojevi koji dijele zajedničke modele; frontend poslužuje javni portal i JSON / GeoJSON kartografski API.
Učitavanje
Raščlanjivanje datoteka instrumenata
Učitane CSV / DAT datoteke raščlanjuju se i upisuju u podatkovnu tablicu po postaji za njihov tip.
Podaci
MySQL · tablice po postaji
Svaka postaja + tip ima vlastitu tablicu; mareo zero reference i alarmi kalibriraju i nadziru očitanja.
Riješeni izazovi
01

Pohrana pet porodica instrumenata bez jedne nezgrapne sheme

Problem

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.

Rješenje

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.

02

Pretvaranje sirovih vrijednosti senzora u javnu kartu uživo

Problem

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.

Rješenje

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.

03

Jedna platforma, dvije publike, jedan izvor istine

Problem

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.

Rješenje

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.

Kako je izrađeno
Aplikacija
Yii 2 (Advanced Template), PHP, MVC across backend / frontend / console tiers
Podaci
MySQL, Per-station dynamic tables, Raw instrument-file ingestion (CSV / DAT)
Izlaz i API
JSON API, GeoJSON FeatureCollection, Delimited-text export, SwiftMailer alerts
Platforma i kvaliteta
Role-based access (RBAC), Audit logging, Bilingual i18n, Vagrant dev environment

Datoteke senzora unutra, kalibrirana javna obalna karta van — izrađeno za institut koji je posjeduje.