sunnuntai 26. kesäkuuta 2016

Tee-se-itse-palvelin sensoridatalle Node.js:llä

Internetiin yhdistetyt sensorit tuottavat hirmuisen määrän dataa, ja koko hommassa ei ole mitään järkeä jos tietoa ei saa tallennettua tietokantaan ja haettua ja suodatettua tarvittaessa. Tätä varten on pilvipalveluja, mutta olen jo pitkään halunnut viritellä oman serverin kotiin. Lisäksi kiinnostuin vähän aikaa sitten node.js:stä, joten päätin tehdä koko homman itse.

Teinkö todella vuokaavion? Taisinpa tehdä. Verkkoon liitetty valoisuussensorini lähettää kerran minuutissa lukemansa wifin kautta node.js -serverille, joka tallentaa sen MongoDB-tietokantaan. Dataa voi katsella ja muokata webbikäyttöliittymän kautta.


Olen asentanut muutaman kerran perinteisen LAMP -stackin (Linux, Apache, MySQL, PHP), ja sellaisenkin päälle olisin toki voinut dataa keräävän serverini rakentaa. Olen kuitenkin taustaltani huomattavasti enemmän front- kuin backendkoodaaja, joten mahdollisuus käyttää tutumpaa JavaScriptiä serverin puolella sai minut valitsemaan node.js:n. Tyhjensin siis vanhan media-PC:n serveriksi ja asensin siihen Ubuntu 16.04 -käyttiksen. Tietokantana toimii MongoDB ja serverinä node.js:n ja express.js:n voimin ohjelmoitu tee-se-itse -palvelin.

En ole ikinä koodannut serveriä enkä ajatellut sitä nytkään tekeväni, mutta löysin vaativan mutta mainion tutoriaalin aiheesta. En ala tässä käymään sen tarkemmin läpi pitkähköä ja teknistä asennus- ja koodaussessiota, mutta asiasta kiinnostunut löytää paljon lisätietoa edellä olevasta linkistä. Lyhyesti kuvattuna Express.js loi valmiin luurangon, jonka päälle on nopea kehittää monenlaisia node.js -sovelluksia. Serveri oli valmis muutaman illan koodailun tuloksena (voi juhannuksen näinkin viettää :D). Se sisältää kirjautumisen, autentikoinnin, salasanojen hashauksen, käyttäjien hallinnan, datasettien luomisen ja yksilöllisten API-avaimien generoinnin.

Hyödyllisemmän sensorin puuttuessa liitin NodeMCU -mikrokontrolleriin valovastuksen sarjaan 12k vastuksen kanssa 3.3 voltin ja ainokaisen analogisen pinnin väliin, ja kirjoitin ohjelman joka lähettää kerran minuutissa luetun arvon tuliterälle palvelimelleni GET-metodilla. Jotta tietokantaan voi kirjoittaa arvoja, ko. datasetin täytyy olla ensin asetettu julkiseksi ja lähettävän ohjelman täytyy tietää oikea API-avain.

Vasemmalla MacGyveroidun sensorini lukemat muutaman tunnin ajalta, oikealla serverin loki. Datasta voimme päätellä että a) aurinko menee välillä pilveen ja b) valon määrä tuvan puolella taloa kasvaa iltaa kohti. Onpahan nyt faktatietoa asiasta.


Tietystikin valon määrän mittaaminen on aika turhaa, mutta kyseessä olikin vain testidata. Mutta virittelemäni alusta soveltuu hyvin paljon laajamittaisemman projektin pohjaksi. Järjestelmään voi kytkeä käytännössä rajoittamattoman määrän sensoreita, ja datan raportointia varten voi ohjelmoida hyvin hienostuneita ohjelmia :) . Kaiken kaikkiaan ensikosketus node.js -ohjelmointiin oli hyvin inspiroiva ja mielenkiintoinen.



Ei kommentteja:

Lähetä kommentti