Nyt onnistuu ilmanlaadun seuranta: rajapinta ja ”kännykkäsovellus”

Miten voisin helposti seurata ilman laatua ja epäpuhtauksien määrää? Idea tähän lähti Open Knowledge -festivaalissa, jossa mm. sivuttiin ympäristön havainnointia sensoreilla. Arduinolla, Iobridgellä yms. välineillä voi helposti seurata esim. lämpötilaa ja ilmankosteutta, mutta erilaisten epäpuhtauksien seuranta onkin jo huomattavasti hankalampaa.

Saisiko datan jostain muualta, ammattilaisvälineillä ja -menetelmillä mitattuna? Saa: ilmanlaatuportaalissa esitetään ilmanlaatudataa eri puolilta Suomea lähes reaaliajassa (tuntikeskiarvoina). Enää tarvittaisiin avoin koneluettava rajapinta. Sellaista ainakaan toistaiseksi ole, joten ei muuta kuin tekemään: ilmanlaatudata rajapintana. Rajapinnan tekemisen taustoista ja, noh, erikoisuuksista alla tarkemmin.

Visualisointi

Miten datan visualisoisi, niin että ilmanlaatua tulisi todella seurattua? Seuranta kännykän kautta olisi kätevää, mutta en haluaisi taas yhtä uutta ikonia jo nyt täydelle näytölle; ei sitä kuitenkaan tulisi käytettyä. Ilmanlaatuindeksi esitetään tavallisesti väreillä, jotka ovat sinänsä helposti hahmotettavissa. Väriä voisikin käyttää taustavärinä.

Ainakin Androidille saa muutamia sovelluksia, jotka asettavat halutun verkkosivun taustakuvaksi, ja päivittävät sen säännöllisesti. Tämän lisäksi tarvitaan vain sivu, joka näyttää ilmanlaadun värinä (ja samalla myös mittausarvot). Tuloksena ilmanlaadun näkee sujuvasti kännykkää vilkaisemalla. Visualisointisivun voi valita tästä valikosta.

Rajapinnan tekeminen

Tämä on ollut tähän mennessä tekemistäni screen scraping -prosesseista haastavin.

Ilmanlaatuindeksi on tunnetuin mittari ilman laadulle. Se on saatavilla ilmanlaatuportaalista, mutta vain karttakuvana tai kaaviona. Koska tiedon irroittaminen kuvasta olisi hankalaa, kannattaa se laskea saatavilla olevien numeeristen mittaustulosten perusteella.

Ilmanlaatuindeksi määritetään eri saasteiden mittaustulosten perusteella: jos kaikkien näiden arvot ovat hyvän rajoissa, on myös indeksi ’hyvä’. Jos yhdenkin pitoisuus nousee tyydyttäväksi, muuttuu myös koko indeksi tyydyttäväksi. Ja niin edelleen. Raja-arvot ovat saatavilla ilmanlaatuportaalin ja HSY:n sivuilta. Ilmanlaatuportaali antaa tarkemmat raja-arvot, joten seurataan niitä. Indeksin laskentaa hankaloittaa se, että kaikilta mittausasemilta ei ole saatavilla kaikkia mittaustuloksia. Ilmanlaatuindeksi pitää siis voida laskea myös puutteellisista tiedoista.

Saasteiden mittaustiedot saa näkyville ilmanlaatuportaalissa valikkosivun kautta. Tieto kaupungista, mittausasemasta ja mitattavasta saasteesta ovat valikkosivun GET-parametreissa. Tulossivu aukeaa valikkosivulla olevaan iframeen, jossa myös on aseman numero GET-parametrina. Myös päivämäärä pitää asettaa GET-parametrina, hieman eri muodossa valikko- ja tulossivulla. Kaupungin asetuksella ei käytännössä ole merkitystä, tulokset haetaan yksinomaan aseman numeron perusteella.

Mutta jos tulossivun avaa ilman että on ensin avannut valikkosivua, palauttaa palvelin internal server errorin. Valitun saasteen nimi välitetäänkin tulossivulle evästeellä. Scraperin on siis hallittava evästeet, ja käytävä ensin asettamassa ne valikkosivulla.

Tulossivulla on taulukko, jossa on kuluneen vuorokauden mittaustulokset tunneittain. Joka tasatunti taulukkoon ilmaantuu uusi rivi, jossa on kellonaika. Varsinainen mittaustulos tulee näkyville vasta hieman myöhemmin. Scraperin on siis hallittava sekä tilanne, jossa uusin mittaustulos on viimeisellä rivillä, että tilanne jossa se on toiseksi viimeisellä rivillä.

Joskus myös useampi rivi voi olla tyhjä. Dataa voi poistua palvelusta myös jälkikäteen, joten tyhjät rivit voivat olla missä kohtaa taulukkoa tahansa. Rajapinta hakee ja palauttaa nyt kaikki tämänpäiväiset mittaustiedot, sekä vielä erikseen viimeisimmän viimeisimmän saatavilla olevan.

Kun vuorokausi vaihtuu, on koko tulossivu ensimmäisen tunnin ajan tyhjä. Ensimmäisen tunnin keskiarvotulos ilmaantuu sille vasta joskus yhden jälkeen yöllä. Scraperin olisi siis osattava pyytää edellisen päivän valikko- ja tulossivua, jos tulosta ei vielä löydy kuluvan päivän sivulta.

Jos kaikki menee hyvin ja ilmanlaatuportaali on toiminnassa, rajapinta palauttaa ilmanlaatuindeksin tai valitun saasteen pitoisuuden (paitsi vuorokauden ensimmäisen tunnin – puolentoista aikana). Tätä pikku hiljaa rakennellessa systeemistä tuli ehkä turhankin monimutkainen. Rajapinnan koodi on Githubissa, joten sitä saa mieluusti tarkistaa ja parantaa: https://github.com/mikkohei13/airquality-finland