Protingas namas. 1 Dalis. Temperatūra.

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
43W5302 lado

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:
temp_d

temp_m

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ą:
Ekranvaizdis_2015-03-17_23-11-30

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.

Terminis spausdintuvas BTP-2002NP

Šis spausdintuvas naudojamas prie POS (Point Of Sale) pardavimo taškas. Iš jo lenda čekis. Praktiškai bet kurioje parduotuvėje galime rasti tokį kur naudojamos kompiuterizuoti kasos aparatai.
BTP-2002 Printer

Būtent šie modeliai būna su trijų tipų interfeisais, COM (serial rs232), USB arba LAN. Man į rankas papuolęs yra su COM prievadu. Tikslas, pajungti jį prie linux’inio kompiuterio naudojant USB <-> COM perėjimą ir pasiųsti jam kažkokį tekstą spausdinimui. Teko matyti kažkurioje picerijoje, kad kepėjams užsakymus taip perduoda 🙂

Taigi vienas iš svarbiausių momentų tai yra prisijungimo parametrai. Jei nors vienas parametras bus kitos, spausdintuvas nereaguos į siunčiamus duomenis (bent man nereagavo).
* Device (įrenginys): /dev/ttyUSB0 Gali būti kitoks, jei jau pajungti keli perėjimai ar pajungtas tarkime Vodafone/Tele2 ar kažkoks kitoks GSM modemas ar jungiama tiesiai į COM jungti be perėjimo.
* Baud rate (ryšio greitis): 38400 Būtinai toks ir ne kitoks.
* Data bits (duomenų paketo dydis?): 8
* Stop bits: 1
* Parity: none
* Handshake (“pasisveikinimas”): Hardware Tik Hardware, nejungti Software ar nejungti abiejų iš karto.
Pasijungus ir rašant tekstą, spustelėjus enter tekstas atspausdinamas ant čekiuko.

Programą rašiau Lazarus (FPC – Free Pascal Compiler).
Biblioteka bendravimui per COM naudoju http://synapse.ararat.cz Beje labai geras puslapis, yra tikrai gerų modulių kurių gali prisireikti rašant kažkokią programą. Visa dokumentacija http://synapse.ararat.cz/doc/help/

Susikuriu katalogą šiam projektui, išsaugau jame lazarus projektą ir į tą patį katalogą išpakuoju aukščiau minėtą archyvą.

Kodo pradžioje prie uses įterpiu Synaser
Prie var pridedu ser: TBlockSerial;
Kaip komunikuoti su lazarus puikūs pvz pateikti čia: http://wiki.freepascal.org/Hardware_Access

ser:=TBlockSerial.Create;
ser.Connect('/dev/ttyUSB0');
ser.config(38400, 8, 'N', SB1, false, True);

Atkreipiam dėmesį į trečią eilutę. Būtent tokie turi būti prisijungimo parametrai (gal kažkokiam kitam modeliui ir kitokie).

Tekstą spausdiname su:

Ser.SendString ('siunciamas tekstas keliauja cia');

Taip pat šis aparatas turi kirpimo funkciją t.y. jo priekyje yra “peilis” kuris atkerpa čekį. Kirpimui reikia pasiųsti komandą:

Ser.SendString (char(27)+'@'+char(29)+'V'+char(1));

Atspausdinus teksto porciją ir vykdant kirpimą, čekis nukerpamas ne po tekstu, o kiek aukščiau, todėl, kad kirpimas būtų po tekstu, būtent mano atveju reikia tekstą pakelti per penkias eilutes. Šis skaičius gali skirtis, nes tam tikrais įrankiais (Utils) galima keisti šrifto dydį, tarpą tarp eilučių. Tiesa tam yra speciali komanda kuri paslenką būtent tiek, kad nukirptu po tekstu, bet man jos pasiųsti į spausdintuvą nepavyko. Taigi aš pasiunčiu penkis eilutės pabaigos simbolius:

Ser.SendString (char(10)+char(10)+char(10)+char(10)+char(10));

Taip pat į šio spausdintuvo atmintį su tam skirtais įrankiais galima įkelti logitipą, monochrominį bitmap’ą. Begooglindamas radau, kad kiti modeliai gali turėti atmintyje ir du, tris logotipus. Logotipo spausdinimui naudojame:

Ser.SendString (char(28)+char(112)+char(1)+char(72));

Beieškodamas internete, buvau radęs cups’ui visus reikalingas bylas. Pridėti spausdintuvą pavyko, bet bandant pasiųsti paprasčiausią tekstą rezultatas būdavo nulinis. Bet rašant savo kažkokį projektėlį vargu ar patogų per cups spausdinti, tikrai paprasčiau ir aiškiau valdyti situaciją per COM’ą.

Xfce 4.12

Po dviejų su puse metų pagaliau buvo išleistas xfce 4.12 versija. Naujovių gal nelabai daug, bet kai kurios labai naudingos.

Nelabai naudingas atnaujinimas, bet žingsnis link modernumo. ALT+TAB dialogas rodo langų miniatiūras.
Ekranvaizdis_2015-03-09_22-08-59

Panelės seniau galėjo būti visada matomos arba pasislepiančios. Dabar atsirado trečias tipas – protingas (intelligently) pasislėpimas. Tiesa jos protingumo suprasti nelabai pavyko.

Atsirado keletas smagių pakeitimų kurie naudoja du monitorius (aš naudoju du tiek namuose tiek darbe). Darbalaukio fono keitimas (paveiksliuko) suveiks tam darbalaukiui, kuriam šiuo metu yra dialogas. Norint pakeisti kairiojo dialogas turi būt kairiam monitoriui, atitinkamai dešiniojo dešiniam. Taip pat atsirado patogus dialogas ekranų konfiguracijoms keisti.
Ekranvaizdis_2015-03-09_22-19-14

Kas naudoja nešiojamuosius kompiuterius pastebės, kad pilnai perdarytas energijos valdymas (Power Manager). Paspaudus ant baterijos piktogramos galima šliaužiklio pagalba pasireguliuoti ekrano ryškumą. Taip pat pakeistas visas energijos valdymo dizainas.

Thunar nuo šiol turi korteles (tabs). Ant katalogo paspaudus dešinį pelės klavišą galima pasirinkti Open in New Tab. Taip pat galima pažymėti keletą katalogų ir/ar bylų ir paspaudus dešinį klavišą bei pasirinkus savybės pamatyti bendras pažymėtų objektų savybes (dydį, teises). Senesnėse versijose pažymėjus keletą objektų jų bendro dydžio pamatyti nepavykdavo. Kas windows operacinėj buvo turbūt nuo pat 95 versijos (gal buvo ir ankščiau, nebepamenu jau). Pažiūrėjus particijos savybes rodoma užimtos/laisvos vietos juostelė.

Į panelę iki šiol galima pridėti programų menių kuris lyg astodavo windows start menių, bet dabar atsirado dar vienas goodies Whisker meniu. Skirtumas nuo ankstesniojo, kad šis savo funkcijomis primena beroc nuo windows vista atsiradusi menių. Veikia greita programų paieška ir pati naršymo po menių logika pasiskolinta iš windows.
Ekranvaizdis_2015-03-09_22-30-46

Atsinaujinusi užduočių tvarkyklė (Task Manager). Atnaujintas dizainas, didesni ir aiškesni resursų (CPU, RAM) grafikai. Galima filtruoti procesus pagal frazę. Tiesa gnome-system-monitor man vis dėlto patogesnis ir aiškesnis.

Taip pat atnaujintas media grotuvas Parole ir tekstų redaktorius Mouse Pad. Nė vieno iš jų nenaudoju. Video groti naudoju nemirtingąjį mplayer (http://www.mplayerhq.hu), o tekstams (html, php ir panašiai), kodui redaguoti Geany (http://www.geany.org).

Grįžo mano labai pamėgta ir 4.10 versijoje dingusi dėl klaidos funkcija, kai naudojami keli virtualūs darbastaliai ir vienam iš jų, kuris dabar nėra aktyvus, langas įgauna “svarbaus” lango būseną t.y. lango užrašas užduočių juostoje pradeda mirksėti. Pagaliau šis mirksintis langas mirksi visuose virtualiuose darbastaliuose ir tarkime jei aš dabar esu pirmame darbastalyje, o ketvirtame yra paleistas skype ir man kažkas parašė, jis užduočių juostoje pradeda mirksėti, bet seniau to matyti nebūdavo įmanoma. Dabar gi, ta mirksinti užduotis mirksi visuose darbastaliuose ir ant jos paspaudus, ekranas persijungia būtent į tą darbastalį kur yra “svarbi” programa. Šiuo atveju skype.

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close