Nörtti-isän kasvatusratkaisu pleikkaripärinään

Joskus on erityisen kiva nukkua. Erityisesti aamulla. Ja erityisesti vielä silloin, kun on lomalla. Nukkumisesta ei välttämättä tule mitään, jos jälkikasvu päättää vetää innostuneen kimakan riehumisrallin Minecraft-alttarin edessä aamuisin. Sen sijaan että kiukkuinen isikarhu mönkisi murisemaan jälkikasvua hiljaiseksi, ajattelin automatisoida prosessin. Oma osaaminen ei ihan riittänyt, joten kyselin twitteristä näkemyksiä. Juho Lehtisen ajatus tuntuikin heti toteuttamiskelpoiselta:

Sitten vain googlettelemaan ja päätä raapimaan. Tavoitteena on tehdä kokonaisuus, joka varoittaa visuaalisesti jos melutaso nousee liian korkealle ja tarvittaessa katkaisee virran etäpistorasiasta jos melutaso ei palaudu järkevälle tasolle. Järjestelmän pitää myös saada laitettua päälle/pois kännykästä. Ja olisi hyvä, jos ei joudu kolvailemaan, koska olen todella hyvä johtamaan sähköä.

Yhden illan suunnittelun jälkeen päädyin seuraavanlaiseen kokonaisuuteen:

Netatmo on noista kallein yksittäinen elementti, ja Fibaron älypistorasian hintakin oli kohtuu suolainen. Budjettitietoinen kolvailija saattaa saada rakennettua vastaavanlaisen kokonaisuuden varmasti halvemmalla, jos keskittyy edukkaampiin komponentteihin.

Ohessa ohje kokonaisuuden rakentamiseksi.

1. Perusjutut

Raspberryn asentaminen ja konffaus vei määrällisesti eniten aikaa, mutta oli myöskin hyvin tyydyttävää. En halunnut asentaa raspiin (kyllä, se on Raspberry Pi:n lempinimi) erillistä näyttöä ja näppistä, vaan halusin hallinnoida sitä pelkän komentorivin kautta. 3B+ sisältää valmiin wifi-piirin, joten erillistä wifi-donglea ei tarvita. Tarvitset raspin lisäksi koneen jossa voit myös kirjoittaa muistikortille (OS X:llä voit käyttää Etcheriä).

Hae uusin Raspbian käyttöjärjestelmä. Minulla oli kortille esiasennettuna NOOBS, mikä oli virhe. Tuhlasin kuitenkin turhan paljon aikaa sähläämiseen, kun yritin päästä raspiin sisälle SSH:lla ja ei vaan ottanut onnistuakseen. Mieluummin asentaa oikean käyttiksen niin pääsee saman tien sukeltamaan linux-maailman syvään päätyyn. Raspberryn sivuilla on selkeät ohjeet asennukseen (ja tässä hyvä ohje ns. headless-moodissa asentamiseen).

Asentaessa on hyvä muistaa laittaa ssh päälle (ohje, kohta 3) ja asettaa wifi-tunnukset kuntoon. Näin asennuksen jälkeen raspi menee suoraan wifi-verkkoon ja pääset ssh:lla sisään:

$ ssh pi@raspberrypi.local

Sitten pääsee konfiguroimaan raspia komennolla:

$ sudo raspi-config

Vaihda ensimmäiseksi salasanasi. Säädä kuntoon myös aikavyöhyke ja kieliasetukset (mahdolliset lokalisaatioon liittyvät virheilmoitukset pystyy fiksaamaan helposti googlettamalla).

2. Äänitason mittaus

Nyt kun raspi osaa mennä verkkoon, asennetaan Netatmo. Minulla oli nurkissa ajelehtimassa Netatmon vanha sääasema, jossa on erillinen sisä- ja ulkoasema. Onneksi sisäasema tallentaa äänitasotietoa, sillä pikaisesti googlettamalla äänen voimakkuuden monitorointi ei olisi ollut ihan yksinkertaista. Netatmosta pystyy hakemaan dataa rajapinnan kautta, mutta se vaatii rekisteröimisen Netatmon sivuilla (ilmaista). Asenna sitten Netatmon wrapperi Pythonille:

$ pip install lnetatmo

Db-taso saadaan nyt haettua Netatmon rajapinnasta pythonilla:

Netatmon rajapinta ei valitettavasti anna reaaliaikaista dataa, vaan tieto tulee 5 minuutin intervalleilla. Tähän käyttötarkoitukseen se on ihan riittävä, mutta reaaliaikaisempien sovellusten kanssa Netatmo ei ole oikea valinta.

3. Etäpistorasian hallinta

Juho Lehtisen suosituksesta ostin Fibaron etähallittavan pistorasian. Pistorasia käyttää Z-wave -teknologiaa. Pistorasian lisäksi tarvitaan Z-wave -hubi, jonka olisi voinut hankkia erillisenä USB-donglenakin. Päädyin kuitenkin laajentamaan raspia ostamalla siihen z-wave -hallinnointipiirin. Se mahtui kivuttomasti läpinäkyvään koteloon.

Itse pistorasian ja z-wave -piirin asennus sujuivat ongelmitta. Enemmän päänvaivaa tuotti z-wave ohjelmiston ja serverin asentaminen raspille. Ohjelmiston asennus onnistui ohjeiden mukaan ja sitten piti vähän fiksata (ohje). Tämän jälkeen Z-wave Smart Home hubi löytyy selaimella raspin osoitteesta, portista 8083. Kirjaudu sisään ja liitä Fibaron etäpistorasia hubiin.

Z-wave Smart Home rajapinnan dokumentaatio oli vähän raskasta kahlattavaa. Loppujen lopuksi ainoa tapa selvittää millä pistorasian saa päälle/pois oli kurkkia millaisia komentoja Z-Wave Smart Home hallintapaneeli javascriptillä hubille lähettää (Chrome developer tools auki ja kliksuttelemaan nappeja expert -moodissa). Kun autentikaation ja komentourlin sai kaivettua, pistorasian laittaminen päälle/pois oli melko yksinkertaista:

4. Rasperry Pi:n valjastaminen mölyvahdiksi

Alkuperäinen ajatukseni oli, että pleikkarin virta katkeaisi varoittamatta, mutta tarkemmin ajatellen siitä olisi saattanut saada luisen nyrkin aamuherätykseksi naamatauluun. Niinpä täytyi viritellä jonkinlainen varoitusmekanismi. Vaihtoehtoina olisi ollut etsiä joku ulkoinen ledisysteemi ja liittää se raspiin. Sen sijaan olin laiska ja otin raspin omat ledit hyötykäyttöön (raspissa on punainen ja vihreä ledi). Molempia voi hallinnoida suoraan komentoriviltä:

En kuitenkaan halunnut, että järjestelmä on koko ajan aktiivinen. Silloin kun MINÄ pelaan niin volyymia pitää tietenkin olla riittävästi. 😉 Sitä varten tein erikseen mekanismin, jolla järjestelmän voi ”virittää”:

Kun järjestelmä on viritetty, vihreä ledi syttyy palamaan. Kun viritys on poistettu, molemmat ledit ovat pimeinä ja pistorasiasta tulee virtaa normaalisti. Virittäminen onnistuu toki SSH:n ylikin, mutta tulevaisuudessa tähän olisi varmaan kiva hankkia joku fyysinen kytkin. Sitä odotellessa, asensin puhelimeen applikaation, jolla voi ajaa helposti SSH-makroja raspille. Virittäminen onnistuu siis puhelimella suhteellisen vaivattomasti.

Lopusi loin monitorointiskriptin, joka tarkistaa onko järjestelmä viritetty, ja jos on, tarkistaa melutason. Jos melutaso on hyväksyttävällä tasolla, ei tapahdu mitään. Jos melutaso on liian korkea, ensin vilkutetaan punaisia ledejä viisi minuuttia. Jos tänä aikana melutaso nousee vielä yli sallitun rajan, ledi menee punaiseksi ja pistorasialle lähtee sulkemiskomento.

Monitorointiskripti ajetaan minuutin välein cronilla:

$ */1 * * * * sudo python /home/pi/Documents/skriptit/monitor.py

Sitten vaan virta irti, raspi paikoilleen ja laitteet seinään. Kokonaisuus toimii hämmentävän hyvin ainakin arkitestailussa. Seuraavaksi täytyy etsiä hyväksyttävät melutasot ja hankkia raspiin mekaaninen kytkin.

Saas tosin nähdä kauanko pikkumiehiltä kestää tajuta, että koko homman voi kiertää laittamalla pleikkarin johdon vapaaseen pistorasiaan…