Protingas, išmanus, bet turbūt automatizuotas namas labiausiai tinka nusakyti šiai sistemai.
Mano galvoje sukasi labiau informatyvaus namo terminas nei aukščiau paminėti, nes kažkokio labai didelio valdymo galvoje neturiu. Todėl pirmos mintys/tikslai yra tai, kad namas (šiuo atveju butas) informuotu apie save, savo būklę šeimininką.
Aprašymuose gali trukti vienos ar kitos smulkesnės ar nelabai smulkios detalės, palieku erdvės patiems pagalvoti, pasinaudoti paieškos sistemomis 😉
Taigi, pats pirmas dalykas ko mums reikės, tai sistemos serverio/kompiuterio. Jo funkcijas atlieka Raspberry Pi model B
Operacinė sistema (pati distribucija) gal nelabai tinka tokio tipo kompiuteriui, tam turbūt reiktu rinktis debian ar kažką panašaus, bet aš pasirinkau Archlinux. Vienintelė ir pagrindinė to priežastis, šią distribuciją naudoju visuose savo (ir žmonos) kompiuteriuose, gerai žinau jos sudėti ir valdymą.
[dinux@alarmpi ~]$ uname -a Linux alarmpi 3.12.35-1-ARCH #1 PREEMPT Tue Dec 23 07:14:51 MST 2014 armv6l GNU/Linux
Kompiuteris maitinamas nuo po ranka papuolusio mobilaus telefono pakrovėjo (atrodo Huawei), pradinėje stadijoje buvo naudojama vėlgi po ranka papuolusios 2Gb microSD kortelės įdėtos į SD perėjimą. Vėliau dariau visokius bandymus tad prireikė vietos ir kortelė buvo pakeista į 4Gb.
Pirmasis link išmanumo žingsnis buvo termometrų pajungimas. Kaip pasijungti termometrą/termometrus labai puikiai aprašyta čia http://www.sbprojects.com/projects/raspberrypi/temperature.php, pasinaudojus google, galima rasti daug įvairių pavyzdžių.
Kaip ir šioje nuorodoje parodyta naudoju DS18B20+ termometrus kurie įdėti į dėžutes nuo foto juostelės. Dėjau tam, kad termometras nebūtų plikas ir nereaguotu į trumpalaikius temperatūros svyravimus.
Duomenis pradiniam variante saugojau RRD bazėje. Tai lyg duomenų bazė kartu su atvaizdavimo varikliu. Archlinux’e instaliuojam:
sudo pacman -Sy rrdtool
Pateikiu bazės kūrimo komandinę eilutę:
rrdtool create temp.rrd --start N --step 60 \ DS:laukas:GAUGE:900:-50:50 \ DS:svetaine:GAUGE:900:-50:50 \ DS:kambarys:GAUGE:900:-50:50 \ RRA:AVERAGE:0.5:1:12 \ RRA:AVERAGE:0.5:1:288 \ RRA:AVERAGE:0.5:12:168 \ RRA:AVERAGE:0.5:12:720 \ RRA:AVERAGE:0.5:288:365
Šia komanda sukuriam bazę, kurioje bus trys termometrai, jie pavadinti laukas – lauko temperatūrai, svetaine – svetainės kambario temperatūrai ir kambarys – darbo kambario temperatūrai saugoti.
Kas minutę pasileidžia cron job’as kuris nuskaito termometrų reikšmes ir jas įrašo į minėta bazę:
rrdtool update /root/rrd/temp.rrd N:$LAUKAS:$SVETAINE:$KAMBARYS
Kas penkias minutes cron job’as paleidžia skriptą kuris sugeneruoja grafikus:
rrdtool graph /srv/http/temp_h.png --start -1h \ DEF:laukas=/root/rrd/temp.rrd:laukas:AVERAGE \ DEF:svetaine=/root/rrd/temp.rrd:svetaine:AVERAGE \ DEF:kambarys=/root/rrd/temp.rrd:kambarys:AVERAGE \ LINE1:laukas#0000FF:"Lauko temperatūra [C]" \ LINE1:svetaine#FF0000:"Svetainės temperatūra [C]" \ LINE1:kambarys#00FF00:"Dainiaus kambario temperatūra [C]" rrdtool graph /srv/http/temp_d.png --start -1d \ DEF:laukas=/root/rrd/temp.rrd:laukas:AVERAGE \ DEF:svetaine=/root/rrd/temp.rrd:svetaine:AVERAGE \ DEF:kambarys=/root/rrd/temp.rrd:kambarys:AVERAGE \ LINE1:laukas#0000FF:"Lauko temperatūra [C]" \ LINE1:svetaine#FF0000:"Svetainės temperatūra [C]" \ LINE1:kambarys#00FF00:"Dainiaus kambario temperatūra [C]" rrdtool graph /srv/http/temp_w.png --start -1w \ DEF:laukas=/root/rrd/temp.rrd:laukas:AVERAGE \ DEF:svetaine=/root/rrd/temp.rrd:svetaine:AVERAGE \ DEF:kambarys=/root/rrd/temp.rrd:kambarys:AVERAGE \ LINE1:laukas#0000FF:"Lauko temperatūra [C]" \ LINE1:svetaine#FF0000:"Svetainės temperatūra [C]" \ LINE1:kambarys#00FF00:"Dainiaus kambario temperatūra [C]" rrdtool graph /srv/http/temp_m.png --start -1m \ DEF:laukas=/root/rrd/temp.rrd:laukas:AVERAGE \ DEF:svetaine=/root/rrd/temp.rrd:svetaine:AVERAGE \ DEF:kambarys=/root/rrd/temp.rrd:kambarys:AVERAGE \ LINE1:laukas#0000FF:"Lauko temperatūra [C]" \ LINE1:svetaine#FF0000:"Svetainės temperatūra [C]" \ LINE1:kambarys#00FF00:"Dainiaus kambario temperatūra [C]" rrdtool graph /srv/http/temp_y.png --start -1y \ DEF:laukas=/root/rrd/temp.rrd:laukas:AVERAGE \ DEF:svetaine=/root/rrd/temp.rrd:svetaine:AVERAGE \ DEF:kambarys=/root/rrd/temp.rrd:kambarys:AVERAGE \ LINE1:laukas#0000FF:"Lauko temperatūra [C]" \ LINE1:svetaine#FF0000:"Svetainės temperatūra [C]" \ LINE1:kambarys#00FF00:"Dainiaus kambario temperatūra [C]"
Reiktu atkreipti dėmesį, kad pagal mano pateikta pavyzdį paveiksliukai saugomi /srv/http/ kataloge.
Rezultate turime grafikus. Pateikiu tik kelis t.y. dienos bei mėnesio:
Vėliau atsiradus poreikiui patogiai select’int duomenis nusprendžiau juos saugoti pradžioje sqlite bazėje, bet pastebėjau, kad duomenų rašymo metu bazės byla yra užrakinama. Po nesėkmingų bandymų išvengti rakinimo (išvengti visgi pavyko, bet įrašo metu traukiant duomenis operacija užtrukdavo, nes pirma palaukdavo kol pilnai įrašomi duomenys) perėjau prie Mysql, o tiksliau mariaDB.
Komanda su kuria rašau duomenis:
mysql -u manonamai -pmanoslaptazodis manonamai -e "INSERT INTO tbl_sensors_data (sd_sensor_id, sd_data) values (\"1\",$KAMBARYS);" mysql -u manonamai -pmanoslaptazodis manonamai -e "INSERT INTO tbl_sensors_data (sd_sensor_id, sd_data) values (\"2\",$SVETAINE);" mysql -u manonamai -pmanoslaptazodis manonamai -e "INSERT INTO tbl_sensors_data (sd_sensor_id, sd_data) values (\"3\",$LAUKAS);"
Pritaikius savo reikmėms amCharts (http://www.amcharts.com) turime gražesnę ir dinamiškesnę (užsikrovus pusulapiui rodyklės sujuda) vizualizaciją:
Reiktu paminėti, kad lauko temperatūra rodoma apie du laipsnius aukštesnė nei yra realybėje, nes daviklis į lauką patenka per liaudyje vadinama fortkę (orlaidę) ir yra pakankamai arti namo sienos.