Raspberry Pi - Merilnik temperature

Na internetu je možno najti kup projektov, ki so jih za Malino izdelali različni entuziasti.
Med množico projektov, se mi je zdel posebej zanimiv projekt, kjer je Malina uporabljena za merjenje in prikaz temperature s pomočjo DS1820 senzorjev.

Zakaj? Že pred časom sem namreč napeljal po hiši nekaj DS1820 senzorjev, ki ne počnejo nič pametnega.
Zakaj jih nebi uporabil?
Čeprav je objavljeno na internetu veliko člankov o uporabi Raspberry-PI (Maline), pa je kljub temu potrebno veliko brskanja in iskanja informacij, sploh če smo začetniki pri uporabi okolja Linux.
V napisanem vodiču bom poizkusil opisati vse potrebne korake, ki so potrebni, da naša Malina prikaže želene podatke v brskalniku.

Namestitev programske opreme Malino

Kaj potrebujemo?

Za zagon Raspberry PI bomo potrebovali 5V napajalnik, ki zmore najmanj 1A ali več (dela sicer tudi z manj), USB miško, tipkovnico ter HDMI kabel, ter seveda neke vrste monitor, ki bo na začetku prikazoval sliko. (Kasneje ni več potreben.) Za namestitev operacijskega sistema na mikro SD kartico pa tudi neke vrste čitalec teh kartic. Potrebujemo tudi microSD kartico (S pretvornikom, če gre za Malino V1)

Namestitev operacijskega sistema na kartico.

Priprava kartice

Raspberry PI uporablja za namestitev operacijskega sistema mikro SD kartico.
Večja ko je kartica, dalj časa bo uporabna. Cene med različno velikimi karticami niso velike. Sam sem nazadnje kupil kar 16GB veliko kartico, saj jo lahko v primeru opustitve projekta porabim v kakšnem telefonu ali podobni napravici.

Na kartico moramo najprej namestiti operacijski sistem. Za to potrebujemo osebni računalnik in čitalec kartic.
Sam uporabljam CANYON zunanji čitalec, ki je izdelan za priklop vseh možnih kartic.

Brisanje mikro SD kartice

Če je kartica prazna, ta korak lahko izpustimo. V kolikor pa je bila na kartici že nameščena kakšna distribucija Linux sistema, pa moramo te korake izvesti. Čeprav trenutno pretežno uporabljam operacijski sistem Linux, mi zaradi neznanih vzrokov pod Linux-om še ni uspelo ustrezno pripraviti kartice.
Zato je začetek omejen na Windows okolje.
Kartico priklopimo na računalnik. Odpremo terminal (cmd.exe), ter vpišemo:
diskpart
Nato še:
list disk
V terminalu se prikažejo diski, ki so na voljo:
Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
Disk 0 Online 238 GB 0 B
Disk 1 Online 139 GB 0 B *
Disk 2 Online 232 GB 0 B
Disk 3 Online 931 GB 931 GB
Disk 4 Online 14 GB 11 GB
Disk 5 No Media 0 B 0 B
Disk 6 No Media 0 B 0 B
Disk 7 No Media 0 B 0 B
Vpišemo:
select disk #
Kjer je # številka diska, ki ga želimo pobrisati. Tu je treba biti maksimalno pazljiv, ker naslednji ukazi brezpogojno popolnoma zbrišejo disk. Ker ima moja kartica velikost 16GB, je v mojem primeru to disk 4. Nato vpišemo ukaz:
recover
Ter za konec še:
clean
Kartica je sedaj takšna kot smo jo prinesli iz trgovine.
Zakaj takšen postopek? Vsi moji poizkusi, da bi uporabljeno kartico pobrisal z normalnim okenskim programom so bili namreč neuspešni, takoj ko je na kartici več razdelkov, ki jih ustvari kakršna koli namestitev Linux operacijskega sistema.

Sliko operacijskega sistema nato namestimo s pomočjo programa:Win32diskimager
Slika Raspbian Wheezy je na voljo na naslovu: Raspbian
Sliko prenesemo na disk ter razpakiramo.

Zaženemo program win32diskimager in izberemo sliko (2015-05-05-raspbian-wheezy.img), ki smo jo prenesli. Program običajno sam pravilno izbere pogon, kjer je priključena naša kartica. Program nas opozori, da bomo prepisali vsebino in prične s prepisovanjem slike na kartico.

Začetna nastavitev Maline

V Raspberry PI vtaknemo micro SD kartico z nameščenim operacijskim sistemom.
Priključimo vso periferijo: miško, tipkovnico, monitor tudi mrežo.
Priključimo napajanje. Malina mora praktično takoj prikazati mavrično sliko na ekranu, nato pa se zažene namestitev.
V kolikor HDMI kabel priključimo naknadno (po zagonu), po mojih izkušnjah ekran ne prikaže slike.
Potrebno je ponovno priključiti napajanje.

Pričaka nas vmesnik: Raspberry Pi software Configuration Tool – raspi-config:


Ime »raspi-config« si je dobro zapomniti, saj ga v primeru želje po spreminjanju nastavitev lahko kadarkoli prikličemo preko terminala na Malini, potem ko je namestitev zaključena.

Posamezne opcije iz menija so:

1. Expand Filesystem
Trenutno je kartica zasedena z Boot particijo ~ 100MB, ter Linux particijo, ki zasede približno ~1GB. Ostalo na kartici je nezaseden prostor. Nezaseden prostor je pametno porabiti. Več ko je na kartici prostora, dalj časa bo kartica živela, saj bo prepisovanja manj. (Flash pomnilnik ima omejitev kolikokrat lahko eno lokacijo prepišemo). S tipko TAB se postavimo levo, da osvetlimo gumb SELECT pritisnemo ENTER. Malina nas obvesti o razširitvi »root« razdelka diska. Pritisnemo ENTER.

2. Change user password.
Privzeto geslo za uporabnika »pi«, ki je tudi administrator je »raspberry« (napisano z malimi črkami). Ni ravno zelo varno. Vendar dokler Maline ne priključimo na internet ni pretirano pomembno. Zaradi enostavnosti pustimo geslo zaenkrat pri miru.

3. Enable Boot to Desktop/Scratch
Izberemo v kakšno okolje se Malina postavi. Privzeto je to dostop do terminala. Če želimo priti na namizje iz menija izberemo: Desktop Log in as user 'pi' at the graphical desktop. Potrdimo z ENTER. Kadarkoli lahko seveda nastavitev spremenimo, če malina ni priključena na monitor.

4. Internationalisation Options
Za udobno delo moramo nastaviti slovenske nastavitve:

4. I1 – Change locale
Izberemo si_SI.UTF-8 UTF8. S TAB se premikamo po poljih, s PRESLEDNICO dodamo izbiro pri vrstici si_SI.UTF-8 UTF8, s TAB se prestavimo na OK in pritisnemo ENTER. Prikaže se okno za izbiro privzete nastavitve, s kurzorsko tipko izberemo si_SI.UTF-8, ter se s TAB postavimo na OK in pritisnemo ENTER. Namestitev izdela slovenske nastavitve. Samodejno se vrnemo v osnovni meni.
4. I2 – Change Timezone
Izberemo Europe, potrdimo OK, nato iz menija izberemo Ljubljano, izberemo OK. Samodejno se vrnemo v osnovni meni.
4. I3 – Change keyboard Layout
Izberemo kar vrednost, ki nam jo ponudi - Generic 105-key (Intl) PC, potrdimo z OK, nato pa v naslednjem meniju izberemo Other, potrdimo z OK, in iz menija, ki se prikaže izberemo Slovenian. Potrdimo z OK, v naslednjem izbirnem meniju izberemo Slovenian, ter potrdimo z OK. Na naslednjem meniju izberemo The default for the keyboard layout, potrdimo z OK. V naslednjem meniju izberemo: No compose key, potrdimo z OK. Na vprašanje, če CTRL +ALT + DEL ugasne X-server odgovorimo z NE. (ukaz ugasne grafični vmesnik). Potrdimo z ENTER. Po kratki pavzi se vrnemo v začetni meni.

6. Add to Rastrack
Doda našo Malino na zemljevid sveta uporabnikov maline.

7. Overclock
nastavitve frekvence procesorja in napetosti. Malino lahko malo navijemo, da deluje hitreje. V tem primeru priporočam namestitev hladilnika na procesor.

8. Advanced option
Nekaj naprednejših nastavitev, ki jih je potrebno nastaviti:
8. A2 Hostname
Naši malini lahko spremenimo ime, s katerim se predstavlja na omrežje. Privzeto je »Raspberry«.
8. A4 SSH
Izberemo in na vprašanje, če želimo omogočiti SSH strežnik odgovorimo z ENABLE. Pričaka nas obvestilo, da je SSH strežnik omogočen. Vrnemo se v začetni meni, kjer izberemo FINISH.

Pričaka nas vprašanje, ali želimo Malino ponovno zagnati. Odgovorimo z YES.
Po vpisu imena uporabnika in gesla bi nas moralo pričakati namizje.

Namestitev potrebnih programskih paketov

Na Malini je na voljo že nekaj programov, ki jih lahko uporabljamo.
Za potrebe našega projekta pa bomo morali namestiti še nekaj druge programske opreme, ki pa ne bo vidna preko prikazanih menijev.

Ker bomo do naše Maline dostopali pretežno z drugega računalnika najprej poglejmo kakšen IP naslov je naša Malina dobila po priklopu na mrežo.

Na Malini odpremo Terminal (Ikona oblika monitorja v ukazni vrstici) in v okno vpišemo ukaz:
ifconfig
Odgovor v terminalu je približno takšen:
eth0 Link encap:Ethernet HWaddr b8:27:eb:0a:15:0f
inet addr:192.168.1.219 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:316 errors:0 dropped:0 overruns:0 frame:0
TX packets:179 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:28414 (27.7 KiB) TX bytes:26068 (25.4 KiB)
Zanima pa nas tale vrstica:
inet addr:192.168.1.219
To je IP naslov naše Maline.

Uporaba SSH dostopa do Maline

Kaj sploh je SSH povezava? To je v bistvu kriptirana povezava med programom terminala in ciljnim računalnikom.
Med uporabo terminala, ki ga zaženemo na Malini in ssh terminalom ki ga zaženemo na drugem računalniku ni nobene razlike. Edina slabost, ki sem jo opazil, je da je vsaj s privzetimi nastavitvami na voljo samo ena ssh povezava naenkrat.

Na našem osebnem računalniku zaženemo terminal, ki podpira SSH protokol, vpišemo ip naslov maline, vpišemo ime in geslo uporabnika Maline in se povežemo na našo Malino.

V ta namen je v Windows okolju na voljo brezplačen programček Putty terminal
Pri programčku Putty pa moramo najprej vpisati IP naslov v posebno okno, nato pa vpišemo še ime in geslo uporabnika Maline.

V Linux okolju je običajno dovolj, da odpremo terminal in vpišemo ukaz ssh in parametre.
Tipičen ukaz za to je:
ssh pi@192.168.1.219
pi je seveda ime uporabnika, ki ga želimo uporabiti za prijavo. Pri prvi povezavi nas terminal vpraša ali viru zaupamo, na kar moramo odgovorimo z:
yes
Ter nato vpisati geslo, ki je v našem primeru: raspberry

Sedaj ko imamo vzpostavljeno povezavo z Malino, so naslednja stvar posodobitve. Posodobimo lahko jedro ter programsko opremo, ki je naložena na naši Malini.
Slike paketa, ki smo ga namestili na mikro SD kartico avtorji žal ne obnavljajo ravno pogosto.

Nekaj splošnih navodil o uporabi terminala:

V terminal zelo preprosto kopiramo ukaze. Lahko tudi iz tega vodiča.
Označimo besedilo, ga skopiramo v odložišče, nato pa z desno tipko kliknemo na terminalsko okno in izberemo paste, da vsebino prilepimo v terminal.
Bližnjice na tipkovnici (CTRL +C, CTRL +V...) v terminalu ne delujejo.

Preden začnemo pisati po terminalu moramo vedeti, da Linux okolje ločuje velike in male črke. Zato ni vseeno kako kakšen ukaz napišemo.

Malina uporablja za zvišanje privilegijev ukaz SUDO.
Praktično za vse posege izven mape uporabnika na Malini je potrebno uporabniku dvigniti privilegije.

Ko v terminalu prvič uporabimo ukaz sudo, nas terminal vpraša za geslo. Vpišemo geslo uporabnika pi. Če nanizamo en za drugim več ukazov sudo, nas terminal ne sprašuje več, razen če mine določen čas.

Za urejanje nastavitvenih in drugih datotek na Malini uporabljamo urejevalnik nano. Po besedilu se premikamo s kurzorskimi tipkami. Datoteko shranimo s kombinacijo tipk CTRL+X, odgovorimo z "y" in pritisnemo ENTER. Če datoteke ne popravljamo CTRL+X samo zapre urejevalnik nano. Kopiranje deluje enako, kot če bi delali v terminalu.

Posodobitev programske opreme na Malini

Za posodobitev virov programske opreme v terminal vpišemo:
sudo apt-get update
Za posodobitev naložene programske opreme pa:
sudo apt-get upgrade

Namestitev strežnikov

Za naš projekt bomo potrebovali strežnik Apache s PHP podporo ter strežnik za MYSQL bazo podatkov in PhpMyAdmin za urejanje MYSQL baze preko uporabniškega vmesnika. Za dostop Python programov do MYSQL baze bomo potrebovali vtičnik. Uredili bomo tudi FTP dostop, da bomo lahko datoteke enostavno prenesli na lokacijo strežnika.

Namestitev Apache strežnika

V terminal vpišemo:
sudo apt-get install apache2 php5 libapache2-mod-php5
Ko se ponovno pojavi ukazna vrstica, je apache strežnik že zagnan in ga lahko preizkusimo.
Na računalniku v mreži, lahko tudi na tem, kjer trenutno tipkamo odpremo brskalnik in v ukazno vrstico vpišemo IP naslov Maline, pritisnemo enter in pojaviti se mora izpis:
It works!
This is the default web page for this server.
The web server software is running but no Vsebina has been added, yet
V primeru, da pride do napake, ali pa nas samo zanima zgodovina dostopov in podobno, so na voljo dnevniki: error.log, access.log ter še kakšen, ki se skrivajo na lokaciji /var/log/apache2/. Pogledamo jih lahko takole:
sudo nano /var/log/apache2/error.log

Ureditev dostopov do mape www

Mapa www je lokacija, kjer bo gostovala naša internetna stran. Privzeto Apache strežnik deluje pod uporabnikom www-data , lastnik mape www pa je root, kar pa ni preveč uporabno. Lastnike in njihove pravice map oziroma datotek lahko pogledamo z ukazom ls:
ls –l /var/www/
Če hočemo videti lastnosti datotek v mapi www, oziroma:
ls -l /var/
Če želimo podatke še o mapi www.
Za spreminjanje lastnika uporabljamo ukaz chow (change owner).
Za spreminjanje pravic pa uporabimo ukaz chmod (change mode)

Pričnemo s prevzemom mape www. Lastnik postane uporabnik www-data:
sudo chown -R www-data:www-data /var/www
Nato moramo ustrezno urediti dostope do datotek in map za uporabnike in skupine. Najprej dostope omejimo, nato pa dodamo dostope tam, kjer hočemo.
Najprej preprečimo dostop do vsebine vsem razen www-data. Uporabljen je ukaz "go", kar pomeni, da velja za g - group - skupina, ter o - other – drugi. Uporabimo "-", kar pomeni, da odvzamemo pravice, uporabimo tudi "rwx", kar pomeni, da odstranimo r-read, w-write, x-execute pravice:
sudo chmod go-rwx /var/www
Nato dovolimo uporabnikom iste grupe (in drugim) da lahko dostopajo do mape /var/www. Ukaz ni rekurziven (ne gleda v podmape). Dodamo pravico "+" za izvajanje "x" skupini in drugim "go":
sudo chmod go+x /var/www
V naslednjem koraku vse datoteke in mape v /var/www dodamo skupini www-data, za primer, če smo v to mapo že kaj prestavili:
sudo chgrp -R www-data /var/www
V naslednjem koraku popravimo dostop do vsebine mape /var/www tako, da do nje dostopa samo uporabnik:
sudo chmod -R go-rwx /var/www
Za konec omogočimo vse pravice uporabnikom v enaki skupini, tako da lahko vsebino v mapi berejo spravljajo in izvajajo. S tem omogočimo urejanje vsebine uporabnikom:
sudo chmod -R g+rwx /var/www
V kolikor hočemo datoteke kopirati kot uporabnik pi (s ftp programom), moramo uporabnika pi dodati med skupino www-data.
sudo usermod -a -G www-data pi
Če v mapo www dodamo nove datoteke moramo tem datotekam spremeniti lastnika in pravico za prekopirane datoteko. Najenostavneje je to storiti s kopiranjem nastavitev že obstoječe datoteke:
sudo chown /var/www/datoteka_2 --reference=/var/www/datoteka_1
sudo chmod /var/www/datoteka_2 --reference=/var/www/datoteka_1
Z ukazom prekopiramo vse lastnosti o lastniku in pravicah iz datoteke 1 na datoteko 2.

Izboljšanje varnosti strežnika

Za izboljšanje varnosti strežnika lahko onemogočimo obiskovalcem brskanje po mapah, ki jih vidi strežnik. V nastavitveno datoteko apache strežnika dodamo ukaz, ki onemogoča brskanje "indexes".
sudo nano /etc/apache2/sites-enabled/000-default
Najdemo odseke, ki imajo omenjene indexe:
Options Indexes FollowSymLinks MultiViews
Povsod, kjer najdemo Indexes pred besedo dodamo "-", kar onemogoči ukaz:
Options -Indexes FollowSymLinks MultiViews
V tej datoteki je tudi odstavek, ki omejuje dostop do map, ki ležijo izven mape www, v kateri je naša internetna stran. Začne se z ukazom "Directory /" Smiselno je omejiti dostope zato vsebino malce popravimo:
Order deny,allow
Deny from all
Options None
AllowOverride None
Datoteko shranimo. Najbolje je, da strežnik takoj ponovno zaženemo. Če smo naredili napako pri pisanju bomo takoj vedeli, da smo se zmotili, saj bo program sporočil napako.
sudo service apache2 restart
Pri ponovnem zagonu dobimo obvestilo:
[....] Restarting web server: apache2apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
Rešitev za opozorilo je izdelava nastavitvene datoteke, kamor vpišemo ime strežnika:
sudo nano /etc/apache2/conf.d/local.conf
Odpre se urejevalnik besedila nano, ki odpre datoteko local.conf, ki je sicer prazna. Vanjo vpišemo:
servername localhost
Datoteko shranimo. Ob naslednjem zagonu strežnika napake ne bo več.

Naslednji ukrep je, da omejimo podatke o strežniku, ki jih posreduje strežnik ob napaki (recimo ko obiskovalec narobe napiše naslov strani). Za to moramo spremeniti nastavitev "serverTokens", ki se skriva v nastavitvah varnosti v datoteki security:
sudo nano /etc/apache2/conf.d/security
Najdemo vrstico ServerTokens in popravimo aktivno nastavitev na:
ServerTokens Prod
Datoteko shranimo. In ponovno zaženemo strežnik. Več o nastavitvi lahko preberemo tule:TheGeekStuff

Nastavitev PHP strežnika

Če sedaj na strežnik naložimo stran, ki prikazuje temperaturo (temperatura.php) in jo poizkusimo odpreti v brskalniku z vpisom IP številke Maline / temperatura.php:
192.168.1.219/temperatura.php
Se stran odpre, žal pa PHP prevajalnik ne prevede PHP kode, ki je skrita v datoteki HTML, zato je prikazana stran polna PHP kode. Treba je nastaviti PHP prevajalnik, da prevede tudi datoteke, ki imajo končnico htm, ki jo uporabljamo. Popraviti moramo datoteko php5.conf v mapi /mods-enabled:
sudo nano /etc/apache2/mods-enabled/php5.conf
Pod nastavitev:
FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-php
/FilesMatch>
Dodamo svojo nastavitev:
FilesMatch ".+\.php$"> SetHandler application/x-httpd-php /FilesMatch>
Datoteko shranimo. Nato strežnik ponovno zaženemo. Stran v brskalniku osvežimo in prikazati se mora brez nadležne PHP kode.

Namestitev MYSQL strežnika:

V terminal vpišemo:
sudo apt-get install mysql-server mysql-client php5-mysql
Med namestitvijo nas namestitev vpraša za geslo MYSQL strežnika. Če bo kdaj Malina odprta v svet priporočam izbiro močnega gesla. Sam si za geslo zamislim en stavek, ki si ga enostavno zapomnim. Tudi če so besede vsakdanje, je dolgo geslo bistveno težje razbiti kot kratko, ki vsebuje različne črke in znake.

Namestitev phpMyAdmin

PhpMyAdmin namestimo z ukazom:
sudo apt-get install phpmyadmin
Med namestitvijo nas namestitev vpraša za tip strežnika, izberemo Apache (izberemo s preslednico), se s TAB premaknemo na »V redu« in pritisnemo ENTER

Naslednja prekinitev vpraša ali želimo nastaviti uporabo baze, izberemo »Da«, nakar nas vpraša za geslo naše MYSQL baze. Geslo vpišemo in izberemo »V redu« Sledi še izbira gesla za phpMyAdmin s katerim se bo program phpMyAdmin priključil na bazo. Geslo vpišemo dvakrat.

Sedaj lahko preverimo ali phpMyAdmin deluje. V brskalnik vpišemo IP naslov naše maline na koncu pa dodamo »/phpmyadmin/, ter pritisnemo enter:
http://192.168.1.219/phpmyadmin/
Pričaka nas pozdravno okno phpMyAdmin. Prijavimo se kot root z geslom, ki smo ga izbrali za phpMyAdmin.
Privzeto je okolje phpMyAdmin tako dostopno od povsod, uporabnik mora le vedeti, da obstaja in seveda uganiti geslo. Precej enostavna zaščita za ta problem je, da v nastavitveni datoteki phpMyAdmin nastavimo, da je phpMyAdmin dostopen samo iz lokalnega omrežja. Odpremo phpmyadmin.conf datoteko:
sudo nano /etc/apache2/conf.d/phpmyadmin.conf
V delu, ki govori o dostopu do mape /phpmyadmin dodamo dovoljenje za ip:
Allow from 127.0.0.1
Shranimo in ponovno zaženemo apache strežnik. Vsebina moje datoteke zgleda takole:
Directory /usr/share/phpmyadmin> Options FollowSymLinks DirectoryIndex index.php Order Allow,Deny Allow from 127.0.0.1 Allow from 192.168.1.100

Priprava MYSQL baze

Sedaj je primeren čas tudi, da izdelamo svojo MYSQL bazo in tabelo v katero bomo vpisovali podatke. To storimo s pomočjo vmesnika phpmyadmin, na katerega se priklikamo preko brskalnika, na osebnem računalniku. V brskalnik vpišemo:

http://192.168.1.219/phpmyadmin/

IP naslov je seveda naslov naše Maline.
Vpišemo geslo, ki smo ga določili med namestitvijo phpMyAdmin-a.
Kliknemo na gumb Databases. Prikažejo se 4 privzete baze.
V polje Create new Database vpišemo ime naše nove baze. Sam sem dal bazi ime Meritve. Ponovno opozarjam, da pazimo na male/velike črke! Poleg imena baze kliknemo na Collation, in izberemo utf8_slovenian_ci. To je tip kodiranja besedila v bazi. Kliknemo na gumb Create. Na seznamu baz se pojavi nova baza.

Kliknemo na ime naše baze.
Odpre se nova vsebina: Create table on database Meritve.
Vpišemo ime tabele – Temperatura.


Število kolon prilagodimo številu senzorjev. Če tega ne storimo, bo ob izvršitvi skripta generirala opozorila. (Dela še vedno)

Izberemo število kolon. Potrebujemo 2 koloni za zaporedno številko meritve in podatek o času meritve, ter dodatno število kolon, ki je enako številu senzorjev, ki jih mislimo priključiti. Primer je za 4 senzorje.
Zapisali bomo naslednje:
Opis: Naziv v bazi Tip
Column Type Length Index A.I.
Zaporedna številka meritve Nr int 50 Primary križec
Datum + Ura kdaj datetime
Senzor 1 temp1 varchar 20
Senzor 2 temp2 varchar 20
Senzor 3 temp3 varchar 20
Senzor 4 temp4 varchar 20

Vpišemo samo podatke prikazane v tej tabeli v ustrezne kolone in celice.
Izberemo še Collation: utf8_slovenian_ci, ter kliknemo na gumb SAVE.
Seveda lahko tabelo ustvarimo tudi direktno z posredovanjem SQL ukazov. Za to je na voljo datoteka tabela.sql. Vsebino datoteke prekopiramo v okno, ki se prikaže ko kliknemo na gumb SQL in nato stisnemo gumb GO.
Verjetno obstaja še nekaj drugih načinov, kako ustvariti bazo in želeno tabelo v MYSQL strežniku. Google je naš prijatelj. :-)

Za konec zaradi varnosti izdelamo novega uporabnika, ki bo lahko vpisoval podatke v našo bazo.
Izberemo bazo meritve in v meniju izberemo Privileges.
V oknu, ki se odpre kliknemo na gumb Add new User.

V polja:
User name:
Host: -> izberemo Local
Password:

Vpišemo želene podatke. Ime uporabnika in geslo nato prepišemo še v datoteko zapis.py
Pri izbiri gesla si lahko pomagamo z gumbom Generate, geslo prekopiramo v oba polja za geslo (Password, Re-type). Uporabniku dodamo Globalne pravice za podatke (Data): Select, Insert, Update in kliknemo gumb GO.

Namestitev FTP strežnika

sudo apt-get install vsftpd
Po namestitvi ftp strežnika je potrebno ftp strežnik nastaviti. Nastavitve so v datoteki vsftpd.conf, ki se nahaja na lokaciji /etc/. Nano je urejevalnik besedila, ki je nameščen na Malni:
sudo nano /etc/vsftpd.conf
Popraviti moramo naslednje nastavitve:
anonymous_enable=NO local_enable=YES write_enable=YES force_dot_files=YES
Znak # pomeni, da je to komentar. Če znak # odstranimo, ukaz za njim vstopi v veljavo. Zadnji ukaz je treba dopisati na koncu datoteke.
Strežnik ponovno zaženemo, da stopijo spremembe v veljavo:
sudo service vsftpd restart
Da lažje dostopamo do mape, kjer je vsebina našega internetnega strežnika v mapi Home na Malini naredimo bližnjico to www mape:
ln -s /var/www ~/www
Sedaj lahko na Malino in z nje prenašamo datoteke. Potrebujemo le FTP program. Za priklop na Malino potrebujemo njen IP naslov, ki ga vpišemo v FTP program. Meni na Windows in Linux platformi dobro služi Filezilla. Ko ftp program vpraša za uporabniško ime in geslo vpišemo uporabniško ime in geslo, ki ga uporabljamo na Malini. Več informacij o nastavitvah tega strežnika tule: https://security.appspot.com/vsftpd/vsftpd_conf.phpl

Priklop temperaturnih senzorjev

Malina ima za priklop periferije na voljo konektor označen s P1 na Malini V1 in GPIO na Malini V2. Konektorja sta pin kompatibilna, tako da vezava velja za obe verziji Maline:

Za priklop senzorja (oz. senzorjev) DS1820 oziroma DS18B20 potrebujemo 3 pine. Uporabimo Pine: 1 - +3,3V, 6 – GND, ter 7 – DATA:



Sam imam na Malni priključene 4 senzorje, ki so zvezani vzporedno. Upor je samo eden, senzorji pa so priključeni na malino preko precej dolgega kabla (18m). Uporabljamo lahko senzorje DS1820 ter DS18B20. Tudi mešano.

Malina ima v jedro (kernel) že vgrajen gonilnik za dostop do senzorjev, le vklopiti ga je potrebno.
V nastavitveno datoteko modules je potrebno dodati dva ukaza:
w1-gpio w1-therm
Odpremo datoteko modules:
sudo nano /etc/modules
In na koncu dodamo dva ukaza:
w1-gpio w1-therm
Shranimo, ter popravimo še nastavitveno datoteko zagona Maline:
sudo nano /boot/config.txt
Na koncu daoteke dopišemo:
device_tree=
Shranimo, ter Malino ponovno zaženemo z ukazom:
sudo reboot
Ko se malina ponovno zbudi lahko preverimo ali so senzorji vidni.
Odpremo terminal in vpišemo:
ls -l /sys/bus/w1/devices
V primeru priključenega enega senzorja se izpiše nekaj podobnega temu:
skupno 0 lrwxrwxrwx 1 root root 0 nov 22 15:10 10-000801d27fa4 -> ../../../devices/w1_bus_master1/10-000801d27fa4 lrwxrwxrwx 1 root root 0 nov 22 15:10 w1_bus_master1 -> ../../../devices/w1_bus_master1
Če je senzorjev več, je izpis daljši.

Kaj je prikazano?
Do senzorja nimamo direktnega dostopa, ampak imamo do njega dostop preko datotečnega sistema.
V mapi /devices/w1_bus_master/ se za vsak priključen senzor pojavi svoja mapa, katere ime je v bistvu naslov senzorja DS1820. Ime mape je govoreče. 10- pomeni, da je to senzor DS1820, ime mape 28- pa pomeni, da je senzor tipa DS18B20. Ostale cifre so serijska št. senzorja. Senzor imamo torej priključen in se odziva, kaj pa meri?
V terminal lahko vpišemo ukaz:
cat /sys/bus/w1/devices/10-000801d27fa4/w1_slave
Z ukazom povzročimo izpis podatkov, ki jih vrne senzor katerega naslov smo vpisali v ukaz. V tem primeru je to 10-000801d27fa4. In v terminalu se izpiše naslednja vsebina:
2b 00 4b 46 ff ff 02 10 8a : crc=8a YES 2b 00 4b 46 ff ff 02 10 8a t=21625
Kar nas zanima je cifra na koncu druge vrstice, kar je v bistvu temperatura. Le prikazano vrednost moramo deliti s 1000. V mojem primeru je to 21,625°C

Priprava Python programa

Zelo na kratko. Python programe lahko shranimo v datoteke ali pa jih tipkamo v terminal, kjer se direktno izvedejo. Da zaženemo izvajanje v terminalu vpišemo v terminal:
pyton3
Za izvajanje Python 3 programov, oz.
python
Za izvajanje Python 2 programov.
Način je zelo uporaben, za razhroščevanje in sem ga uporabljal med izdelavo programa. Če želimo zaključiti delo v python terminalu pritisnemo CTRL + D.

Če želimo pognati progam, ki je zapisan v datoteko pod Python 3 napišemo:
python3 imedatoteke.py
Podatke o temperaturi imamo, torej se lahko posvetimo nalogi kako podatke zbrati in jih zapisati v našo bazo. Za to bomo uporabili Python 3 programček, ki sem ga delno povzel po vodiču tule: http://raspberrywebserver.com
Program prebere vsebino senzorjev, ter zapiše podatke v tabelo v MYSQL bazi.

Malina že ima naloženo Python 3 programsko okolje, nima pa naloženega vmesnika, ki bi omogočal Pythonu pisanje podatkov v MYSQL bazo.

Najprej namestimo PIP – Python Package Index, ki ga bomo potrebovali za namestitev dodatnih paketov za Python 3. Več o tem tule: pypi.python.org/pypi:
sudo apt-get install python3-pip
Naj še omenim, da imamo na voljo na Malini dve različici Python prevajalnika – Python 2, ki je različica 2.7.3, ter Python 3, ki je različice 3.2.3. Kljub enakemu imenu je med njima precej razlike, in program, ki deluje pod eno različico ni nujno, da deluje pod drugo. Tudi namestitve so povsem ločene. Na Python 3 namestimo MYSQL vtičnik:
sudo pip-3.2 install PyMySQL
Namestitev sicer prijavi neko napako, ki pa očitno ni kritična, saj zadeva vseeno deluje. S pomočjo FTP programa na našo Malino (mapa home) prekopiramo Python datoteko, ki poskrbi za vpis podatkov v našo bazo (zapis.py). V datoteki je pred uporabo nastaviti nekaj stvari. Predvsem število senzorjev, ter podatke za priklop na bazo. Datoteko lahko urejamo s programom nano, kot vse druge datoteke, ki smo jih do sedaj:
nano zapis.py
Program lahko zaženemo preko terminala:
python3 zapis.py
Python programček je pripravljen in deluje, a zapiše temperaturo le, če ga ročno zaženemo. Za redno beleženje temperature uporabimo orodje cron, ki omogoča nastavitev periodičnega izvajanja nalog. V terminal vpišemo:
sudo crontab -u pi -e
Odpre se okno z neko vsebino, na koncu katere dodamo naslednjo vrstico:
*/15 * * * * /usr/bin/python3.2 /home/pi/zapis.py
Kaj ukaz pomeni?
* * * * * ukaz za izvršitev
| | | | |
| | | | +----- dan tedna (0 - 6) (Nedelja=0)
| | | +---------- mesec (1 – 12)
| | +-------------- dan meseca(1 – 31)
| +-------------------- ure (0 – 23)
+-------------------------- min (0 - 59)
Torej ukaz se bo izvedel vsakih 15 min, vsako uro, vsak dan, mesec in teden. Datoteko shranimo in počakamo 15 minut :-). Nato lahko pogledamo v bazo in preverimo ali se je vsebina tabele dopolnila. V primeru težav lahko pogledamo v dnevnik /var/log/syslog:
sudo nano /var/log/syslog
Če smo uporabnika in geslo ter vse ostale podatke uspešno vnesli v našo Python skripto, jo lahko poizkusimo zagnati. Odpremo terminal in vpišemo:
python3 zapis.py
Branje temperaturnih senzorjev poteka nekaj sekund, ko pa se ponovno pojavi ukazna vrstica lahko v brskalniku pogledamo ali smo v bazo kaj zapisali. Kliknemo na našo tabelo in v oknu mora biti vidna ena vrstica podatkov.

V kolikor pride do napake pa natančno preberemo sporočilo, saj običajno piše kje je prišlo do napake. Primer: moja baza ima 4 podatke za temperaturo, python skripta pa je bila prilagojena za enega:
/usr/local/lib/python3.2/dist-packages/pymysql/cursors.py:297: Warning: Field 'temp2' doesn't have a default value self._do_get_result()
/usr/local/lib/python3.2/dist-packages/pymysql/cursors.py:297: Warning: Field 'temp3' doesn't have a default value self._do_get_result()
/usr/local/lib/python3.2/dist-packages/pymysql/cursors.py:297: Warning: Field 'temp4' doesn't have a default value self._do_get_result()
Prikaz podatkov v brskalniku HTML datoteka, ki je pripravljena za prikaz podatkov, ki so zapisani v bazi, je zaradi varnosti razdeljena na 2 dela: Datoteka, ki skrbi za prikaz na brskalniku - temperatura.php, in nastavitvena datoteka config.ini, kjer so shranjeni podatki potrebni za priklop na MySQL bazo. Vsebina datoteke config.ini je sledeča:
[database]
naslov = localhost
uporabnik = Ime uporabnika naše baze
geslo = Geslo uporabnika naše baze
ime_baze = Meritve
Ime in Geslo uporabnika naše baze smo vpisali preko phpMySQL vmesnika.
Datoteko lahko preko FTP programa prekopiramo v WWW mapo, nato pa datoteko prestavimo v eno mapo nižje, ter lastnika in pravice ponastavimo na www-data:
sudo mv /var/www/config.ini /var/
sudo chmod /var/config.ini --reference=/var/www/index.phpl
sudo chown /var/config.ini --reference=/var/www/index.phpl
Po tem posegu, se v brskalniku po osvežitvi, prikaže stran z vsebino, ter prikazom grafa.
Vsebina grafa je odvisna od količine podatkov, ki so v bazi.

Za konec

Če želimo našo internetno stran odpreti svetu moramo zaradi varnosti spremeniti geslo uporabnika pi:
sudo passwd pi
Naslednji korak pa je, da na našemu usmerjevalniku določimo, da promet na vratih 80 (HTTP) preusmeri na IP številko naše Maline.

P&P© 27.11.2015
Get Firefox Linux Mint