[size=150]Kotikutoinen kotiautomaatiojärjestelmä[/size]
[size=150]Esisanat[/size]
Arvelin esitellä itse tekemäni kotiautomaatiojärjestelmän. Järjestelmän kuvaus on lähinnä yleisellä tasolla järjestelmää esittelevä, teknistä kuvausta en sen kummemmin jaksa taikka haluakaan kirjoittaa. Artikkelin tarkoituksena on myös muistuttaa Ruuvipenkin käyttäjiä siitä, että isommatkin projektit tulevat joskus “valmiiksi”, vaikkei aina siltä tunnukaan.
Itsestäni sen verran, että opiskelen sähkötekniikkaa Lappeenrannan Teknillisessä Yliopistossa ja aloitin opiskelut suunnilleen samoihin aikoihin, kun tämän järjestelmän kehitys alkoi. Eli kenties järjestelmän kehityskaaresta voi myös huomata tietojen ja taitojen kehittymisen opiskelujen kautta
[size=150]Taustaa[/size]
Isäni päätti vuonna 2006 rakentaa talon keskelle ei mitään. Hän ei myöskään pääsääntöisesti vietä siellä kuin viikonloput, töiden ollessa toisella paikkakunnalla. Lisäksi taloon valittiin lämmitysjärjestelmäksi se pakkasen kannalta kaikkein pahin, vesikiertoinen lattialämmitys. Taloa ei kuitenkaan haluttu pitää täysissä lämmöissä viikkoja, koska lattialämmityksen hoitavaa kattilaa voidaan lämmittää sähkövastuksen lisäksi puulla ja omasta metsästä haettuna puu on ehdottomasti halvin lämmitysmuoto.
Tämä luonnollisesti nostaa esiin sen ongelman, että taloa pitäisi jollain tavalla vahtia ja kenties päästä etänä ohjaamaankin. Valmiita ratkaisuja tähän toki löytyi jo silloin, mutta ne olivat joko kalliita, vähäisillä ominaisuuksilla varustettuja tai pahimmissa tapauksissa molempia. Kattilan oma termostaatti ei kelvannut ainoaksi ohjaukseksi, koska joko se pitäisi asettaa tarpeettoman korkeaan lämpötilaan tai laskea lämpötila niin alas, että kovilla pakkasilla sisällä kulkevat vesijohdot saattaisivat päästä kuitenkin jäätymään.
Tästä alkoi syntyä ajatus oman järjestelmän teosta. Linuxia olin itse käyttänyt jo vuodesta 2003 pääasiallisena käyttöjärjestelmäni, joten sen sielunelämä oli varsin tuttua. Lisäksi linux mahdollisti juuri sen koodauskielen käytön, jolla haluaa kehittää ja tarvittavat etäyhteydet on helppo luoda internetin kautta.
Ensimmäinen versio taisi syntyä vuoden 2007 aikana ja kevään korvilla se otettiin testikäyttöön, kun riskiä jäätymisestä ei enää ollut. Ensimmäinen versio koostui yksinkertaisesta käyttöliittymästä ja muutamasta OneWire-väylään kytketystä lämpötila-anturista. Releen naksuttelu hoidettiin printteriportin kautta. Koodit oli vielä tässä vaiheessa shelliscriptejä, joilla luettiin lämpötiloja Digitemp-ohjelman kautta RRD-tietokantaan ja relettä naksuteltiin C-koodin pätkällä. Webbikäyttöliittymästä vastasi PHP + HTML.
Ensimmäinen versio tuntui pelaavan varsin hyvin, mutta nälkä kasvaa syödessä ja järjestelmän laajuus alkoi kasvaa. Toiseen versioon alettiin suunnitella esimerkiksi ulkovalaistuksen ohjausta ja useampien lämpötila-anturien kytkemistä. Toinen versio syntyi (ehkä) vielä kesän aikana ja shelliscriptit oli vaihtunut Pythoniin, tietokanta MySQL:ksi. Rele naksuteltiin edelleenkin C-koodin pätkällä printteriportista. Myös webbipuoli oli samaa kauraa. Ulkovalaistuksen ohjauskin tässä vaiheessa vielä jäi, kun varasto, jonka sähkökeskukseen ulkovalaistus kytkettäisiin, ei ollut vielä valmis.
Toisesta versiosta tuli pitkäksi aikaa “se lopullinen”, tosin suurin laajennuksin. Myös releohjauksissa siirryttiin käyttämään OneWire-väylää, jolloin päästiin eroon printteriportin aiheuttamista rajoitteista sekä ohjausjännitteen että piuhojen pituuden osalta. Jossain välissä myös varasto valmistui pannuhuoneineen, jolloin päästiin siirtämään järjestelmä lopulliseen ympäristöönsä. Samalla vedettiin ethernet-kaapelia sisälle kaksin kappalein, toinen ethernetiä ja toinen OneWirea varten. Ethernet-kaapelin toiseen päähän ilmestyi wlan-purkki, joka jakoi PC:ssä kiinni ollutta mokkulaa myös sisäverkkoon. Wlan-purkin ilmestyttyä järjestelmään lisättiin myös IP-kamera hoitamaan videovalvontaa (joskin pääasiallinen käyttö on tainnut olla vieläkin veneen pinnalla pysymisen tarkistusta ).
[size=150]Kolmas, “lopullinen” versio[/size]
Uusimman version kehityksen aloitin keväällä 2012. Juhannuksen tienoilla uusin versio oli valmis käyttöönotettavaksi lopullisessa käyttöympäristössään. Tällä hetkellä ollaan päästy tilanteeseen, jossa ohjelmointi on tehty täysin Pythonilla, Django frameworkia käyttäen. Djangoa ei hyödynnetä vain webbipuolella vaan myös palvelinohjelmiston tietokantakomennot on toteutettu Djangon “helpotusfunktioilla”. Tällä ratkaisulla palvelimella riittää yksi konfiguraatiotiedosto ja esimerkiksi jos halutaan vaihtaa tietokantaohjelmistoa, koodiin ei tarvitse koskea. Tietokannaksi valikoitui PostgreSQL sen paremman suorituskyvyn vuoksi. Kieliä tulee kokonaisuudessaan siis Python, HTML ja Javascript.
Nykyjärjestelmä sisältää ominaisuuksia sen verran, mitä on tullut mieleen lisäillä. OneWire-väylä mahdollistaa mitä erilaisimmat käytöt, kiitos siihen löytyvien anturien, AD-muuntimien, releohjausten ja muiden kikkareiden. AD-muuntimien avulla tulikin lisättyä järjestelmään myös hälyttimiä.
[]Lämpötilojen mittaus[/]
[]Lämpötiloihin reagointi, esim. lämmityksen kytkeminen[/]
[*]Releohjaukset
- OneWire ja 433 MHz langaton (myös himmentimet)[/]
[]Hälyttimet[/]
[]Videovalvonta[/]
[]Paikalla / poissa -toiminto - Kytkee hälyttimet päälle/pois
- Kytkee releet haluttuun asentoon
- Asettaa lämpötilarajat
- Kytkee videovalvonnan päälle/pois[/]
[]Ajastimet - Ohjaavat mm. releitä, paikalla/poissa -toimintoa
- Käytössä esimerkiksi auton lämmitykseen[/]
[]Ilmoitusten lähettäminen sähköpostitse ja Google Talkin kautta - Google Talkin kautta reaaliaikaiset ilmoitukset puhelimeen[/]
[]Useat käyttäjätilit eri käyttöoikeuksin
Esimerkiksi valojen kytkeminen mahdollista, muttei lämpötilarajojen muokkaus jne[/]
[]Restful API - Javascriptillä tiedonhaku palvelimelta, ei tarvitse päivittää koko sivua
- Mahdollistaa myös ulkopuolisten ohjelmien kehityksen
- Omassa käytössäni mm. kaukosäätimellä valojen ohjaus ja irc-botin lämpötilojen haku (Ruuvipenkin IRC-kanavalla “.sksaa” )[/*]
Aikaisemmin mainittu mokkulan kytkeminen tätä pyörittävään rautaan on poistettu ja siirrytty käyttämään Dovadon wlan-purkkia sen tarjoaman luotettavuuden vuoksi. Jos tarvitaan luotettavaa mokkula-nettiä, voin suositella tuota purkkia varauksettomasti.
Tietokoneena järjestelmässä olen käyttänyt joko BeagleBoard XM:ää (isän luona), Raspberry Pi:tä (kämpillä kehitysympäristö) tai ihan normaalia PC-rautaa.
Lisäksi isäni luona ohjaukseen on ostettu kiinalainen halpis-tabletti resistiivisellä näytöllä, jolloin ohjaus toimii myös hansikkaat kädessä. Tämä mahdollistaa esimerkiksi tabletin sijoittamiseen eteiseen, jolloin ovesta liikkuessa voi kytkeä toimintoja tarpeen mukaan.
[size=150]Järjestelmän esittely kuvin[/size]
Koska kuvat kertovat enemmän kuin tuhat sanaa, tässä niitä on. Kuvat on otettu omassa kämpässäni käytössä olevasta järjestelmästä, jota käytän päivittäin.
[size=125]Järjestelmän perusnäkymä[/size]
Perusnäkymässä näkyykin kaikki oleellinen. Vasemmassa yläkulmassa paikalla / poissaoloa kontrolloiva nappi. Yläreunassa näkyy hälyttimet. Tässä kuvassa ei hälytyksiä ole. Hälyttimien alapuolella tämänhetkiset lämpötilat ja lämpötilojen alapuolella releohjaukset. “Punainen vilkku” on kotonani, kehityskäytössä lämmityskattilaa simuloiva ledi. Omron ja Valkoinen taas muita testihässäköitä. Päivittäisessä käytössä on “näyttö” ja “jalkalamppu”, joista ensimmäinen ohjaa tietokoneen näyttöä ja työpöydän valoja, toinen taas on 300W, himmennin ohjattu jalkalamppu, jota käytän kämppäni pääasiallisena valonlähteenä. Himmentimen toiminta selviää paremmin seuraavasta näkymästä. Kuvassa numerot ovat prosenttiarvoja kirkkaudesta.
[size=125]Hälyttimet[/size]
Hälyttimillä voi olla kolme arvoa; “ok”, “nollaamaton hälytys” tai “hälytys aktiivinen”. Tämä kuvataan väreillä vihreä, oranssi ja punainen. Lisäksi valikkoon ilmestyy hälytyksen tilaa kuvaava nappi, jonka käyttötarkoitus on ilmoittaa hälytyksestä, jos ollaan muilla alasivuilla, joilla hälytykset ei muuten näy. Kuvassa etuovi on auki. Kun etuovi suljetaan, muuttuu napin väri oranssiksi. Hälytys nollataan painamalla hälytyksen ilmoittavaa nappia.
[size=125]Kuvaajat[/size]
“Näytä kuvaajat” -nappia painamalla päädytään seuraavan näköiseen näkymään, jossa näkyy viimeisen vuorokauden lämpötilakuvaaja. Kuvaajan oletusarvona on keskiarvoistettu näkymä, jolloin esimerkiksi anturiin paistaneen auringon vaikutus pienenee. Kuvaajan päällä hiirtä liikuttelemalla kuvaajan vasemmassa reunassa näkyvät lämpötilat muuttuvat vastaamaan hiiren kohdalla olevia lämpötiloja. “Näytä kaikki kuvaajat” tarjoaa kuvaajat viikon, kuukauden ja vuoden lämpötiloista.
[size=125]Kamerat[/size]
Perusnäkymän “näytä kamerat” -nappia painamalla saadaan näkyviin kameroiden nykyiset tilat ja viimeisin otettu kuva. Nappia painamalla kameran voi asettaa päälle taikka pois.
[size=125]Loki[/size]
Lokiin kirjataan käytännössä kaikki, mitä järjestelmässä tehdään. Lokimerkinnöillä on neljä eri “vakavuusarvoa”, 0 (info), 1 (huomautus), 2 (virhe), 3 (kriittinen virhe), 4 (vaatii resetoinnin). Lokinäkymään tultaessa vakavuuden raja-arvona on oletuksena 1.
[]Vakavuustasoista “0” on käytössä lähinnä releiden naksutteluilla.[/]
[]Taso “1” sisältää esimerkiksi hälyttimien, ajastimien ja muiden hieman tärkeämpien toimien aiheuttamat merkinnät.[/]
[]Taso “2” on varattu virheille, jotka kuitenkaan eivät aiheuta toimenpiteitä. Näitä on esimerkiksi lämpötila-anturien ja releohjausten (joita ei käytetä lämmityksen ohjaukseen) virheet.[/]
[]Kriittisiin virheisiin, tasolle “3” taas menee kaikki virheet, jotka vaativat reagointia, eli pääasiassa lämmitykseen vaikuttavat virheet. Jos näitä virheitä tulee riittävän monta, järjestelmä resetoidaan.[/]
[]Taso “4” on varattu virheille, jotka vaativat järjestelmän resetoinnin. Tällaisia virheitä ovat mm. OneWire-väylään liittyvät virheet (joita onneks ei ole tullut kertaakaan) ja ohjelmiston käsittelemättömät virheet (näitäkään ei ole tullut moneen kuukauteen ).[/]
[size=125]Tilastot[/size]
Tilastot-sivulle kasaillaan erilaisia tietoja järjestelmästä, lähinnä lämmitykseen ja lämpötiloihin liittyvää tietoa. Tulossa on myös mahdollisesti muita tilastoja, jos jotain järkevää tilastoitavaa keksin.
[size=125]Muuta[/size]
Kamerat-välilehden alta löytyy erillinen kamera-näkymä ja linkit valvontakameran videoihin.
Asetussivut jätän tässä esittelemättä.
[size=125]Mobiili[/size]
Ja mitäpä nykyaikainen etävalvonta ja -ohjaus olisi ilman mobiilia käyttömahdollisuutta! Tämän vuoksi koko käyttöliittymä on suunniteltu myös puhelimet ja tabletit silmällä pitäen. Erillistä mobiilikäyttöliittymää ei ole, vaan alla olevissa kuvissa näkyy sama etusivu puhelimen näytöltä katseltaessa. Myös kuvaajat ja kameran kuvat sovittavat itsensä puhelimen näyttöön. Kuvat on otettu omaa puhelintani emuloivalla resoluutiolla.
[size=150]Loppusanat[/size]
Tämän esittelyn tarkoituksena oli lähinnä luoda uskoa Ruuvipenkin käyttäjien pariin, että myös laajemmat kokonaisuudet voivat joskus tulla “valmiiksi”. Tämäkin projekti alkoi vuosia sitten pienin tavoittein, mutta ajan kanssa tästä on kasvanut varsin käyttökelpoinen ja elämää (ehkä) helpottava kokonaisuus.
Varsinaista teknistä kuvausta tästä en jaksa kirjoittaa, mutta kysymyksiä saa toki esittää ja pyrin niihin parhaani mukaan vastaamaan. Tekninen kuvaus saattaa tulla siinä vaiheessa, jos teen tästä jotain kouluun liittyvää. Jos näin tapahtuu, ilmoittelen siitä myös tänne.
//Edit: Lopuksi vielä pieni video järjestelmän käytöstä: Video
//Edit:
[size=125]Kertakäyttöajastimet[/size]
Tänään koodailin vanhojen toistettavien ajastimien rinnalle uuden ominaisuuden, kertakäyttöajastimet. Eli nykyään pystyy näppärästi etusivulta lisäämään kerran pyöräytettävän ajastimen. Näillä voidaan suorittaa helposti esimerkiksi auton lämmitys, valolla herätys tms. seuraavaksi aamuksi tai vaikka asettaa järjestelmän tila poissaoloon seuraavana aamuna ajastimen kautta.