Hackathonissa ratkaistaan pysäköintihaasteet

Kirjoittanut Jussi Ritamäki
Julkaistu

Toimistollamme on käytössä kiinteä määrä meille osoitettuja parkkiruutuja Dynamo Business Parkin pysäköintihallissa. Vaikka paikkoja olisi helppo hankkia lisää, on muutamina kertoina on käynyt niin, että ne ovat olleet hetkellisesti täynnä. Toimistolle autoileva henkilö on joutunut siirtymään vaihtoehtoiseen parkkihalliin. Kun pysäköintiruutujen tilatieto alkoi vaivaamaan ohjelmoijan mieltä, syntyi luonnollisesti idea teknologisesta ratkaisusta asiaa korjaamaan.

​Meillä Monadilla on tapana jakaa tietoa, hyviä käytäntöjä ja tukea uuden oppimista. Tästä yksinkertaisen kuuloisesta ideasta muovautui loistava syy järjestää hackathon ja kokeilla samalla uusia teknologioita protoilumielessä. Konkreettisesti syntyi hackathon-konsepti, jossa mitataan etäisyysanturilla parkkipaikan varattu–vapaa-tilaa, lähetetään tieto pilveen ja visualisoidaan parkkipaikan tila webbi-käyttöliittymään.

​Aiheen ympärille aloimme valmistelemaan jokakeväistä hackathonia. Rakensimme tilaisuuden siten, että kaikilla osallistujilla oli mahdollisuus valmistautua ja tutustua aihepiirin. Hyvin valmisteltu lähtöasetelma mahdollisti osaltaan myös onnistuneen lopputuloksen. Kaikki valitut tekniikat testattiin hyvin yksinkertaistetulla ratkaisulla pienemmän valmisteluporukan avulla ja varmistettiin se, että aikaa vieviä yllätyksiä ei hackathonin tiukahkossa aikataulussa tulisi.

​Kartoitimme hackathonista kiinnostuneilta etukäteen kyselyn avulla mielenkiintoa aihealueesta.  Kyselyn tulosten perusteella jaoimme porukan pieniin alle viiden hengen tiimeihin osa-alueittain. Kaikilla tiimeillä oli vetäjä tai mentori joka oli ollut valmistelemassa kyseistä osa-aluetta.

Hackathon jakaantui neljään tiimiin

  • Sensoritiimi
  • Pilvitiimi
  • Datatiimi
  • Fronttitiimi

Etäisyyden mittausta ultraäänellä ja laserilla 

Sensori-tiimin agendalla oli toteuttaa etäisyyden mittaus kahdella erityyppisellä sensorilla ja lähettää data Azuren IoT-hubiin. Alustaksi valikoitui helppoutensa vuoksi Raspberry Pi (ja koska niitä ajelehti jo valmiiksi toimiston nurkissa.) Etäisyyssensoreina olivat HC-SR04 ultraäänisensori ja VL53L0X time of flight laseria hyödyntävä sensori. Molemmille sensoreille tehtiin oma täysin toisistaan riippumaton ratkaisu, jotta lopuksi päästäisiin vertailemaan toteutusten erilaisuutta. Ohjelmointikielenä toimi Rust.

​Ultraäänisensorin ratkaisu oli hiukan työläämpi kun mittaustuloksien perusteella oli etäisyystiedot laskettava itse, kun taas time of flight -sensorin laski etäisyyden valmiiksi omalla mikrokontrollerillaan ja tarjosi datan rekistereissään.

​Datan lähetyksessä haluttiin kokeilla Microsoftin tarjoamaa kirjastoa suoraan, vaikka toki esimerkiksi MQTT oli yksi vaihtoehdoista. Tässä tapauksessa valmis IoT Hub sender -kirjasto toimi kuitenkin moitteetta ja data saatiin siirtymään.​

Pilvi-infrastruktuuri integroi saumattomasti sensoridatan ja sen käsittelyn

Pilvitiimin vastuulla oli pystyttää tarvittava pilvi-infra Azureen ja toteuttaa rajapinnat frontti-tiimin käyttöön. Tarvittavaan pilvi-infraan tärkeimpinä kuului IoT Hub ja Cosmos DB. Kokonaisuudessa IoT Hub oli kaiken keskiössä, johon sekä sensoritiimin että datatiimin tuotokset integroituivat. Cosmos DB puolestaan tarjosi paikan datatiimin aggregaattidatalle.

​Rajapinta tehtiin perinteisesti REST-palveluna. Hienompien protokollien sijaan tarkoituksena oli testata Azuren serverless funktioiden toimivuutta tällaisessa tapauksessa. Funktio oli kovin yksinkertainen hakiessaan valmiiksi aggregoidun datan Cosmos DB:sta ja tarjoten sen minimaalisilla muutoksilla frontille. Tässä kielenä käytetiin Typescriptiä.

​Koska edellä mainitut asiat veivät kohtuullisen vähän aikaa testailtiin myös Slack-applikaation rakentamista Bolt-kirjastoa käyttäen. Tästä tuli lopulta hyvä vaihtoehto web-käyttöliittymälle.

Sensoridata muuttuu pysäköintiruutujen käyttötiedoksi

Datatiimin pääasiallinen tavoite oli aggregoida IoT Hubista saatava raakadata Cosmos DB:n valmiiksi tilatiedoksi laitekohtaisesti. Tarkoitus oli myös kokeilla Azuren Stream Analyticsiä tällaisen yksinkertaisen dataputken mallintamiseen. Asiasta saatiin mielenkiintoisempi rikastamalla dataa erillisestä metadatasta saatavilla laitteiden nimillä. Raakadata tallennettiin lisäksi Blob Storageen myöhempää analyysikäyttöä varten.

Käyttäjä löytää vapaat ruudut verkkokäyttöliittymästä

Web-pohjaisen käyttöliittymän rakentamisessa tarkoitus oli toki visualisoida koko putken lopputulema, mutta tärkeämpänä pointtina oli päästä tekemään Svelteä. Samalla kokeiltiin  sen hyväksi kehuttuja animaatio-ominaisuuksia. 

Tehdyssä webbi-näkymässä visualisoitiin parkkiruutujen senhetkinen tilanne reaaliaikaisesti. Parkkiruutujen tilasiirtymissä päästiin animointeja hyödyntämään. Tämän perusteella Sveltestä jäi hyvät kokemukset.

Tuloksekas hackathon

Valmistelutyö kantoi hedelmää, sillä hackathonin aikana esiintyvät ongelmat olivat pääosin samoja mihin valmisteluporukkakin törmäsi ja ongelmat saatiin nopeasti ratkaistua. 

Ajatuksena seuraavaan hackathoniin on jatkaa nyt tehtyä tuotosta tai keksiä jokin uusi aihe osallistujien mielenkiinnon mukaan.