Linux integrated system for smart home with control through smartphone … … 5 [602035]

1

Cuprins
Linux integrated system for smart home with control through smartphone ………………………….. …. 5
Planificarea activității ………………………….. ………………………….. ………………………….. ………………… 11
Stadiul actual ………………………….. ………………………….. ………………………….. ………………………….. .. 13
1. Fundamentare teoretică ………………………….. ………………………….. ………………………….. ……….. 17
1.1 Casă inteligentă ………………………….. ………………………….. ………………………….. ……………… 17
1.2 Raspberry Pi ………………………….. ………………………….. ………………………….. ………………….. 18
1.2.1 Placa de dezvoltare ………………………….. ………………………….. ………………………….. …… 18
1.2.2 Sistemul de operare ………………………….. ………………………….. ………………………….. …… 19
1.2.3 Pinii de intrare/ iesire – GPIO ………………………….. ………………………….. ………………….. 19
1.3 Programe și limbaje de programare utilizate în implementare ………………………….. ……….. 20
1.3.1 APACHE2 WEB SERVER ………………………….. ………………………….. ……………………. 20
1.3.2 HTML ………………………….. ………………………….. ………………………….. …………………….. 20
1.3.3 PHP ………………………….. ………………………….. ………………………….. ………………………… 21
1.3.4 Python ………………………….. ………………………….. ………………………….. …………………….. 22
1.3.5 MyS QL ………………………….. ………………………….. ………………………….. …………………… 22
1.4 Vulnerabilități de securitate ………………………….. ………………………….. ………………………….. 22
1.4.1 Atacul de tip “Injection Flaws” ………………………….. ………………………….. ………………. 23
1.4.2 Atacu l de tip “Broken Authentication and Session Management” ………………………… 23
1.4.3 Atacul de tip “Cross Site Scripting” ………………………….. ………………………….. ………… 23
1.4.4 Expunerea datelor sensibile ………………………….. ………………………….. ……………………. 24
1.4.5 Comunicarea nesigură a datelor ………………………….. ………………………….. ………………. 24
2. Implementarea solutiei adoptate ………………………….. ………………………….. ……………………….. 25
2.1 Descriere de ansamblu ………………………….. ………………………….. ………………………….. …….. 25
2.1.1 Sistemul de operare ………………………….. ………………………….. ………………………….. …… 25
2.2 Aplicația web destinată utilizatorului ………………………….. ………………………….. …………….. 25
2.2.1 Interfața web ………………………….. ………………………….. ………………………….. ……………. 26
2.2.2 Autentificare utilizatori ………………………….. ………………………….. ………………………….. 26
2.3 Funcții implementate ………………………….. ………………………….. ………………………….. ………. 28
2.3.1 Controlul dispozitivelor ………………………….. ………………………….. …………………………. 28
2.3.2 Supraveghere video ………………………….. ………………………….. ………………………….. …… 32
2.3.3 Controlul temperatu rii………………………….. ………………………….. ………………………….. .. 33
2.3.4 Centrul multimedia ………………………….. ………………………….. ………………………….. …… 36
2.3.5 Sistem audio ………………………….. ………………………….. ………………………….. …………….. 36

2

3. Rezultate experimentale ………………………….. ………………………….. ………………………….. ………. 39
3.1 Interfața aplicației web și conectivitatea ………………………….. ………………………….. ………… 39
3.2 Controlul dispozitivelor ………………………….. ………………………….. ………………………….. …… 41
3.3 Supraveghere video ………………………….. ………………………….. ………………………….. ………… 43
3.4 Controlul temperaturii ………………………….. ………………………….. ………………………….. …….. 45
3.5 Centrul multimedia ………………………….. ………………………….. ………………………….. …………. 47
3.6 Sistem audio ………………………….. ………………………….. ………………………….. …………………. 49
4. Concluzii ………………………….. ………………………….. ………………………….. ………………………….. . 51
5. Bibliografie ………………………….. ………………………….. ………………………….. ……………………….. 53
6. Anexe ………………………….. ………………………….. ………………………….. ………………………….. …… 55
Codul sursă ………………………….. ………………………….. ………………………….. ………………………….. . 55
Index.php ………………………….. ………………………….. ………………………….. ………………………….. 55
Home.php ………………………….. ………………………….. ………………………….. ………………………….. 57
Role.php ………………………….. ………………………….. ………………………….. ………………………….. .. 60
File.php ………………………….. ………………………….. ………………………….. ………………………….. … 60
Security.php ………………………….. ………………………….. ………………………….. ………………………. 62
Climate.php ………………………….. ………………………….. ………………………….. ……………………….. 64
Tempset.php ………………………….. ………………………….. ………………………….. ………………………. 66
Video.php ………………………….. ………………………….. ………………………….. ………………………….. 66
ReadFile.py ………………………….. ………………………….. ………………………….. ……………………….. 69
ReadTemp.py ………………………….. ………………………….. ………………………….. …………………….. 70
Pir.py ………………………….. ………………………….. ………………………….. ………………………….. ……. 70
7. CV Europass ………………………….. ………………………….. ………………………….. ……………………… 72

3

Listă de f iguri
Figura 1. Numărul sistemelor instalate de -a lungul timpului în SUA și Europa [3] …………………. 14
Figura 2. Funcțiile unei case inteligente ………………………….. ………………………….. …………………… 17
Figura 3. Componente Raspberry Pi B+ ………………………….. ………………………….. …………………… 19
Figura 4. Diagrama pinilor GPIO [9] ………………………….. ………………………….. ……………………….. 20
Figura 5. Structura interfeței web ………………………….. ………………………….. ………………………….. … 26
Figura 6. Autentificare utilizator ………………………….. ………………………….. ………………………….. …. 27
Figura 7. Controlul dispozitivelor ………………………….. ………………………….. ………………………….. .. 29
Figura 8. Supraveghere video ………………………….. ………………………….. ………………………….. …….. 33
Figura 9 . Controlul temperaturii ………………………….. ………………………….. ………………………….. …. 34
Figura 10. Centru multimedia ………………………….. ………………………….. ………………………….. …….. 36
Figura 11. Accesul la aplicație ………………………….. ………………………….. ………………………….. ……. 39
Figura 12. Conexiune HTTPS ………………………….. ………………………….. ………………………….. …….. 40
Figura 13. Pagina de autentificare ………………………….. ………………………….. ………………………….. .. 40
Figura 14. Cookie de sesiune ………………………….. ………………………….. ………………………….. ……… 40
Figura 15. Token de sesiu ne………………………….. ………………………….. ………………………….. ……….. 40
Figura 16. Controlul dispozitivelor ………………………….. ………………………….. ………………………….. 41
Figura 17. Controlul dispozitivelor. I: aprinderea/stingerea luminii din bucătărie; II:
aprinderea/stingerea luminii din sufragerie; III: aprinderea tuturor becurilor; IV: stingerea tuturor
becurilor ………………………….. ………………………….. ………………………….. ………………………….. ……… 42
Figura 18. Închiderea/deschiderea ușii ………………………….. ………………………….. ……………………… 43
Figura 19. Conectarea camerelor web la Raspberry Pi B+ ………………………….. ………………………. 43
Figura 20. Supraveghere video ………………………….. ………………………….. ………………………….. …… 44
Figura 21. Componente control temperatură ………………………….. ………………………….. …………….. 45
Figura 22. Controlul temperaturii ………………………….. ………………………….. ………………………….. .. 45
Figura 23. Controlul manual al temperaturii ………………………….. ………………………….. ……………… 46
Figura 24 . Controlul automat al temperaturii ………………………….. ………………………….. …………….. 47
Figura 25. Interfața web a funcționalității multimedia ………………………….. ………………………….. … 47
Figura 26. Redarea fișierelor video în pagina web ………………………….. ………………………….. …….. 48
Figura 27. Kodi – Centru multimedia ………………………….. ………………………….. ……………………….. 48
Figura 28. Kodi – interfața funcției control la distanță ………………………….. ………………………….. … 49
Figura 29. Control la distanță audio ………………………….. ………………………….. …………………………. 49
Figura 30. Componentele utilizat în implementarea funcției “follow me music”. Component ele
din stânga imaginii: relee. Componentele din dreapta imaginii: senzori de prezență. ………………. 50

4

5

Linux integrated system for smart home with control through
smartphone
The project developed represent an integrated system which is a server Linux that
performs the functions of a smart ho me. These functions implemented specific of a smart home
are: devices control inside the house (lights, lock door), video surveillance, temperature control,
video media center and an inteligent audio system which implement the function “follow me
music ” (Figure 1).

Figure 1. Web interface structure
The system is implemented on a development board, called Raspberry Pi B+, produced
Raspberry Pi Foundation. The operating system that running on the development board is
Raspbian, a distrib ution of Debian Linux, created and optimized to run on the Raspberry Pi
systems. P eripherals and components combine with this open -source system create an integrated
system for smart home.
Introduction
The physical support of this system is a development board Raspberry Pi B+ with very
high performance compared with the price of this development board and offers high speed
processing compared with the dimensions of this board. In terms of processing, Raspberry Pi B+
enjoy an ARMv11 processor with a clock frequency of 700 MHz and 512 MB SDRAM memory.
The development board contains 40 GPIO ping, HDMI port, AUDIO/VIDEO port, USB ports,
Ethernet port and socket for flash memory for MicroSD. (Figure 2)

6

Figure 2. Raspberry Pi B+ compo nents
On this platform is running an operating system , called Raspbian that is a distribution of
Debian Linux, designed and optimized to run on the Raspberry Pi systems.
In this operating system is built a web server configured with APACH E2, on which was
designed a web interface with functions for a smart home. Users can use this web interface to
control all functions designed on his house. To develop this web interface was used man y tools,
like: HTML, PHP, MySQL and Javascript . This website can be easly accessed by users using a
smartphone or any other device capable to access websites using a browser.
To realize the functions of a smart home, was used many per ipherals and electronic
components controlled by scripts written in a programming language call ed Python, but also
using additional programs integ rated on the operating system.
Functions implemented and components used in implementation
Devices control
This function is implemented on a web page and devices controlled by user are the lights
and the lock doors.
These devices are connected to the development board via GPIO pins that can be
programmed using a programming language called Python. These pins provide a voltage with
value 3.3V when the pins are active. To control a bulb at a voltag e of 240V is need to use an
opto-isolated relay. When the input of the relay is active, the relay enabling the ignition of bulb .
To control a lock of a door is need to use a servomotor, controlled with a signal PWM applied to
the input of servomotor. The servomotor have two states open and closed, the open state being
when the PWM pulse width is equal with 1 ms, which cause a rotation of servomotor at 0 degrees
toward the intial state. Closed state is when the PWM signal pulse has a duration of 2 ,5 ms,
which cause a rotation of servomotor at 180 degrees toward the initial state.
These devices can be controlled using the on/off buttons located on the web page. These
buttons contain scripts written with a programming language , called PHP. When the buttons are
pressed, these scripts get the states of buttons and write the states on a file. The state of a button
can be “1” for active state or “0” for inactive state.

7

This file is interpreted by a script written in Python, which set the output pins states
depending on the states included in the file.
Video surveillance
Video surveillance is implemented using two web cameras connected to development
board via USB ports available on the board. To display the images taken by web cameras in a
web page is used an additional soft ware called Motion. Motion is a software that provides
multiple options , including videostreaming function and motion detection function. Motion offers
the possibilities to create a videostream that can be integrated very easy in a web page. This
involves opening a port connection on the server. The images taken by web cameras are
transmitted on this port connection.
This videostream with images taken by web cameras can be easly accessed with a browser
using the IP of the server and the port connection open ed for this videostream. This solution is
not a secure solution because an attacker can get free access to the videostream by scaning the
server and he can identify very easly which port is used for transmission of videostream.
The solution implemented to secure the transmission of images was to run the M otion
software on the localhost. The images transmitted on the specified port are directed into a folder
created on the server, assigning permission access to this folder. Because of permission access,
the attacker can not view images transmitted only if he knows the username and password
associated to this folder. This solution was possible with APACHE2 where the traffic is routed to
a folder with the command “ProxyPass” and to create the permission to acce ss the folder was
made using htpasswd extension of APACHE2.
Temperature control
Temperature control represent anot her f unction implemented on the system. The value of
temperature is taken by a digital temperature sensor called DS18B20. Informations about
temperature are transmitted through the interface W1 over the pin four of development board.
The sensor is activated from the operating system using the commands: “modprobe w1 -GPIO”
and “modprobe w1 -therm”. After running these two commands the sensor sync w ith the
development board and the sensor start to transmit informations about temperature. These
informations about temperature are saved in a specific file dedicated to sensor.
The web interface allows the user to adjust house temperature automatically o r manually.
To set temperature automatically, in the web interface is a filed where the user can enter the value
of the temperature that the user wants in his house.
Depending on the value set and the temperature taken by sensor from house, is made a
decis ion about which system will start, heating system or cooling system. If set temperature is
higher than temperature sensor provided then activates the heating pin corresponding heating
system setting to “1” and setting the output pin corresponding cooling s ystem to “0”.
If set temperature is lower than temperature sensor provided then the cooling system is
started by setting the output pin corresponding cooling system to “1” and the heating system is
stoped by setting the output pin corresponding heating sy stem to “0”.
If set temperature is equal with temperature sensor provided then both system, heating and
cooling, are stoped by setting the output pins to “0”.
Web interface also contains buttons for manual control of temperature, one button for
starting/st opping the heating system, one button for starting/stopping the cooling system and one
button for stopping both systems, heating and cooling. Buttons states are written on a file using a
script written in PHP programming language. This file is interpreted by a script written in Python
programming language that manage the inputs/outputs depending on conditions located in the
file.

8

Video media center
Integrating a media center into a system for an intelligent home is necessary because this
function simplifies access to media files. The web interface contains video files that allow the
user to access them using any type of device. This particularity is possib le with HTML5 media
functions.
Also, the web interface offers a remote control of the television. This function is possible
because of an additional software that is installed on the operating system. This additional
software is called Kodi and is a media ce nter application that enable to listen music, watch
movies and see pictures by connecting the develop ment board to a television via HDMI port ,
available on the board.
Also, Kodi offers a remote control, by opening a communication on a port connection,
and AirPlay function that allows the user to share files, pictures, music, videos from his
smartphone a nd play them on the television.
Audio system
In this function is implemented a smart audio system that allows the user to manipulate
list songs and listen any song inside the house through the smartphone.
In this system is implemented a smart audio function , named: “follow me music”. When
the user moves from a room to another room, the music will start in the room where the user is
located by motion detection sensors.
For this audio system was used an additional software, called VLC, which can play audio
files and offers a remote control by opening a communication on a port con nection.
The remote control function is integrated in web page and can be used to manipulate the
VLC software. Audio files are played with VLC and transmitted on audio/video output. Th is
audio/video output is connected to a relay module. Every relay is controlled by a motion
detection sensor. When the user is on the range of the motion detection sensor, the relay
associated with this sensor becomes active and allows playing the song.
Inputs/outputs pins are managed by a script written in Python programming language.
Securing the web interface
Security of the web interface represent a very important thing in this application because
the site can be compromise if the site is not secure an d attackers can use informations about
house if they compromise the site. If the application will be public, the user can access his
house’s functions from anywhere via Intern et. In this case, the chances that the site to be attacked
are very high. For thi s the site must have a certain security to stop these possible attacks.
In this scope the site features are to resolv some potential vulnerabilities.
First, the user can acces the content of the site using an user account and a password. User
account a nd password are stored in a MySQL database and are accessed via scripts written in
PHP programming language intended entry fields visible on the login page. This approach is very
common authentication in Internet and has one of the greater vulnerability of site. The type of
attack that can compromise the site using the authentication form is called SQL Injection. The
attacker can inject SQL broken commands into the database. If the attacker can bypass the
authentication form using these type of attack, the site will be compromised completely. To
prevent this type of attack, the access to the database need to be done with a script PHP that use
the method “prepare statements”. “Prepare statements” is immune to such an attack because of
how the query is constru ct and how parameters are collected from the web page and put into the
query.

9

After authentication, the user is assigned with a token session or a cookie session
depending on the user’s requirments: cookie sessions awarded for a longer period of time (“Ke ep
me Logged”) or token session assigned for a short period of time. Depencing on the token or
cookie session, the acces to the rest of pages from website is restricted, that means the user
cannot access web pages from websites if he doesn’t have a token s ession or a cookie session.
This association of a token, respectively cookie can be a vulnerability.
If the connection between client and server is over HTTP, the data are transmmited clear
text, unencrypted. If an attacker that is in a same network with the client, he can exploit this
vulnerability by taking over and handling traffic between client and server.
In this way the attacker can easly may take possession of the login account and password,
token or cookie and he can access the site without a pe rmission. To avoid such an attack the
solution is to make a HTTPS connection between client and server using SSL certificate. A SSL
certificate can be obtained from certificate authorities and the encryption of data is made with
two types of keys, a public key and a private key, related through a mathematical rule.
This causes an asymmetrical encrypting, on the client side the encryption is made with the
public key and on the server side decryption is made with the private key. This provide a secure
connec tion between client and server, because if an attacker want to crack the private key it will
take too long, because of complexity of the key.
To offer some functions of this system, like: video surveillance, remote player television,
remote player audio o ver the Internet, inevitably the system will need to open ports connection to
provide these functions. Opening ports connection on the system will increase the vulnerability of
system. If the ports are not protected, the attacker could gain the access easl y and could
compromise information transmitted on ports connection. A station can be easly scanned by an
attacker to see what ports connection are opened. The solution to avoid this vulnerability was to
assing each port connection a permission access based on user account and password. To gain the
access to ports connection, the attacker need to know the user account and the password.
Conclusions
This implementation of a smart home system provides a professional solution in the area
of systems development smart homes at a lower cost of actual products found on the market.
Using a Raspberry Pi development boards offer simplicity and flexibility of point of view
the work environment because the development board runs an operating system and the
development b oard contain access ports that offer to developer possibility to use a big variety of
programs and components in implemention of functions.
The f unctions implemented on this system are basic functions of a smart home.
Being an open -source system, the dev eloper can implement a variety of functions, the
limit being only developer’s imagination.

10

11

Planificarea activităț ii

12

13

Stadiul actual
Din totdeauna omul a încercat să își simplifice modul de viață prin modul lui inovativ de a
găsi soluții la diferite probleme întâlnite în viața de zi cu zi. Datorită acestui spirit inovativ al
omului s -au descoperit soluții la o mulțime de probleme care păreau imposibil de rezolvat fără de
care omenirea nu ar fi reușit să progreseze. Din dorința omului de a simplifica lucrurile și de a -și
crea un confort s-a ajuns la automatizarea unor sarcini pe care omul ar fi trebuit să le
îndeplinească manual.
În prezent, tendița omului este aceeași ca din totdeauna , de a simplifica pe cât posibil
acțiunile sale prin a utomatizarea lor. Îmbinarea ace stei nevoi a omului cu tehnologia de care
omenirea dispune în prezent a dus la dezvoltarea unor produse și servicii care satisfac nevoile
omului. Dintre aceste produse și servicii dezvoltate cu ajutorul tehnologiei, face parte ș i așa –
numita casă inteligentă.
Scurt Istoric
Prin casă inteligentă se poate înțelege oferirea unor sisteme și soluții de automatizare, o
extensie a casei realizată cu scopul de a completa nevoile omului și de a -i simplifica modul de
viață, oferind omului siguranță și un grad de confort ridicat.
Despre id eea de casă inteligentă s -au scris foarte multe cărți de -a lungul timpului fiind un
domeniu științifico -fantastic care la sfârșitul secolului al douăzecelea a devenit realitate datorită
introducerea curentului electric în casele oamenilor.
La începutul an ilor 1800 au început să apară diverse dispozitive de control la distanță. De
exemplu, în anul 1898, Nikola Tesla a patentat o idee pentru o telecomandă pentru vehicule. Între
anii 1915 și 1920, apariția electrocasnicelor a determinat declinul servitorilor deoarece munca
servitorilor a fost înlocuită de aparate mecanice. În anul 1966, Jim Sutherland, inginer la
Westinghouse Electric, a dezvoltat un sistem de automatizare a casei numit “ECHO IV”, care a
fost un proiect privat și nu a fost niciodată comerciali zat. [1]
Termenul de “casă inteligentă” a fost inventat pentru prima data de asociația a mericană a
constructorilor de case în anul 1984. Odată cu apariția microcontrolerelor au fost dezvoltate
tehnologii de control la distanță tot mai inteligente care au f ost adoptate de către producătorii din
industria servicilor de construcții.
În anul 1998 a fost construit Integer Millennium House, o casă de demonstrație care
prezenta o varietate de tehnologii inteligente de automatizare a casei, inclusiv un sistem de
management al casei, care putea optimiza performanța sistemului de încălzire, un sistem automat
de irigare a grădinii, un sistem de securitate inteligent, un sistem de iluminat care putea fi setat
într-unul din cele patru moduri predefinite. Casa mai benef icia de tehnologii avansate de
comunicare, cum ar fi un serviciu de telefonie și televiziune digitală prin satelit. [2]
Conform ABI Research, în anul 2012, în Statele Unite ale Americii au fost instalate peste
2,5 milioane de sisteme pentru case inteligent e, iar în Europa au fost instalate în jur de 1 milion
de astfel de sisteme. În prezent, numărul sistemelor instalate în Statele Unite ale Americii atinge
pragul de 10 milioane de sisteme, pe când în Europa numărul sistemelor instalate este de 4
milioane de sisteme. (Figura 1)

14

Figura 1. Numărul sistemelor instalate de -a lungul timpului în SUA și Europa [3]
Se preconizează că în anul 2017 în Statele Unite ale Americii vor fi instalate până la 23 de
milioane de sisteme pentru case in teligente, iar în Europa vor fi instalate în jur de 13 milioane de
sisteme pentru case inteligente.
Func țiile implementate
Sistemele pentru case inteligente includ diferite tipuri de dispozitive cum ar fi:
– Senzori: ce măsoară sau detectează temperatura, umiditatea, lumina zilei sau mișcarea.
– Controlere: cum ar fi un calcula tor sau un control er dedicate casei inteligente.
– Motoare: folosite pentru a pune în mișcare diferite lucruri cum ar fi ușa de la garaj.
– Interfețe: destinate utlizatorilor prin care inte racționează cu mașina sursă.
– Căi de transmitere a informației: prin fire sau wireless.
Funcțiile unei case inteligente pot fi implementate în funcție de stilul de viață și de
obiceiurile fiecărui utilizator care beneficiază de o astfel de casă, însă următo arele funcții
reprezintă funcțiile de bază ale unei case inteligente, în sensul că sunt cel mai comune funcții ale
unui astfel de sistem: sistem de iluminat, supraveghere video, gestionarea temperaturii, centru
multimedia, sistem audio inteligent.
Conect ivitatea telefoanelor inteligente și a tabletelor cu aceste sisteme pentru case
inteligente a determinat o evoluție foarte mare a caselor inteligente, permițând accesul și
controlul foarte ușor la funcțiile prezentate mai sus.
Dezvoltarea sistemelor de ca se inteligente este strâns legată de dezvoltarea conceptului
Internet of Things prin care se încearcă interconectarea tuturor obiectelor din interiorul
casei, comunicarea făcându -se prin Internet.

15

Sistemul realizat în această lucrare se poate situa în ac eastă categorie a sistemelor
destinate caselor inteligente deoarece sistemul realizat oferă soluții în ceea ce privește funcțiile
unei case inteligente. Funcțiile realizate în acest proiect sunt funcții de bază al unei case
inteligente. Acest sistem se dif erențiază de celelalte sisteme oferite pe piață prin originalitatea
implementării și a costurilor reduse prin care aceste funcții au fost realizate.
Fiind un sistem Open-Source avantajul este că utilizatorul poate oricând să
îmbunătățească sau să modifice funcțiile oferite după bunul plac. Acest sistem are posibilitatea de
a fi extins, deci poate oferi mai multe funcții, mai multe com ponente care pot fi controlate.
Costuri de implementare
În implementarea acestui proiect s -au folosit următoarele componente fizice:
– Placa de dezvoltare Raspberry Pi B+ (170 lei)
– Memorie flash M icroSD de capacitate 8GB (30 lei )
– Modul Wireless de conectare la rețeaua de internet (30 lei)
– Modul cu patru relee (50 lei )
– Servomotor (15 lei )
– Camere web (40 lei )
– Ventilator 12V (10 lei )
– Senzori de prezență (40 lei)
– Senzor digital de temperatură (4 lei)
– Placă de test (10 lei )
– Led-uri, rezistențe, condensatori, tran zistor (5 lei)
– Cablu HDMI (30 lei )
– Cabluri (11 lei )
Sistemul oferă următoarele funcții:
– Control al dispozitivelor: posibilit atea de a controla două becuri și o încuietoare de
ușă(cu ajutorul servomotorului)
– Supraveghere video
– Control al temperaturii folosind doar un senzor de temperatură.
– Media Center
– Sistem audio
Aceste funcții sunt funcț iile cele mai commune oferite de astfel de sisteme pentru case
inteligente. Costul total al acestui sistem realizat în această lucrare a fost de 450 lei (aproximati v
100 €). Această sumă este una extrem de mică față de valoarea produsele aflate pe piață.
În prezent, pe piață aceste sisteme ajung la prețuri de mii de euro în funcție de
multitudinea de funcții oferite. .
Ca și sistem de referință pentru casă inte ligentă poate fi luat sistemul dezvoltat de firma
Loxone. [4] Sistemul oferit de firma Loxone deține următoarele funcții:
– Sistem de control iluminat
– Control al sistemului de încălzire
– Monitorizarea și managementul energiei
Din punct de vedere tehnic acest sistem oferă:
– Opt intrări digitale la o tensiune de 24V
– Opt ieșiri digitale (relee 250V 5A)
– Port Ethernet
– Patru intrări analogice între 0 și 10V
– Patru ieșiri analogice între 0 și 10V
– Alimentare la o tensiune de 24V
Prețul acestui sistem se ridică la 2250 lei(aproximativ 450 €) și reprezintă doar
platforma(server -ul) la care sunt conectate restul componentelor. Prețul componentele adiționale
dorite de client va fi adăugat la prețul acestui server .

16

Pentru a implem enta un sistem cu aceleași funcții și specificații ca ale acestui sistem
Loxone va fi nevoie de următoarele ocmponente:
– Placă de dezvoltare Raspberry Pi B+ (170 lei)
– Memorie flash MicroSD de capacitate 8GB (30 lei)
– Modul Wireless de conectare la rețeaua de Internet (30 lei)
– Modul cu opt relee (100 lei)
– Led-uri, rezistențe, condensatori, tranz istor (5 lei)
– Cabluri (11 lei)
Costul total cu care se pot replica funcțiile sistemul ui oferit de firma Loxone prin
metodele descrise în această lucrare este de 346 lei(aproximativ 77 €).
Diferența de preț dintre cele două sisteme este foarte mare, ceea ce oferă un avantaj foarte
mare sistemului realizat în această lucrare, însă această diferență poate scădea în funcție de
complexitatea și soluțiile adoptate în impleme ntarea sistemului.
În concluzie, sistemul realizat în această lucrare oferă o soluție profesională la costuri
mult mai reduse decât a sistemelor pentru case inteligente prezente pe piață și oferă posibilitatea
utilizatorului de a extinde și a modifica sis temul în funcție de obiceiurile sale și a modului său de
viață.

17

1. Fundamentare teoretic ă
1.1 Casă inteligent ă
Prin “casă inteligentă” se poate înțelege oferirea unor sisteme și soluț ii de automatizare, o
extensie a casei r ealizată cu scopul d e a completa nevoile oamenilor și de a simplifica modul de
viață, oferind oamenilor siguranță ș i un grad de confort ridicat.
Aceste sisteme și soluț ii de autom atizare permit utilizatorului să controleze și să
gestione ze funcț ii precum: controlul l uminilor din interiorul casei, închiderea/deschiderea ușilor,
închiderea/deschiderea uș ii de la garaj, supraveghere vi deo a casei, gestionare automată/manuală
a temperaturii din int eriorul case i, centru multimedia . (Figura 2) Aceste funcții sunt funcții de
bază a unei case inteligente. [5]

Figura 2. Funcțiile unei case inteligente
O casă inteligentă nu este un sistem standard, o casă inteligentă poate fi personalizată în
funcț ie de obiceiurile, stilul de v iață și nevoile celor care dețin un astfel de sistem. În funcț ie de
aceste aspecte, într -un astfel de sistem numărul de funcț ii care pot fi implementate este nelimitat.
În ultimii ani, popularitatea acestor case inteligente a crescut fo arte mult datorită
simplității și accesibilităț ii mult mai mare cu ajutorul telefoanelor inteligente și a tabletelor.
Popularitat ea caselor inteligente este strâns legată ș i de dezvoltarea conceptului “Int ernet Of
Things”, prin care se încearcă interconectarea tuturor obiectelor (maș ini, electrocasnice, sisteme
de ilumi nat, dispozitive mobile, etc.) î ntre ele cu ajutorul Internet -ului.

18

Conectivitatea telefoanelor inteligente și a tabletelor cu aceste sisteme de case i nteligente
a determinat o evoluț ie foarte mare a caselor inteligente, deoarece d ezvoltatorul p oate oferi
clientului o interfață de acces la funcț iile o ferite cu ajutorul unui singur terminal (telefon , tablet ă),
fiecare funcție pe care clientul dorește să o utilizeze fiind la un buton distanță .
Din punct de vedere al dezvoltatorul ui ace ste funcț ii implementate îmbină trei elemente
importa nte din domeniul tehnologic: rețele de Internet, programare și electronică . Pentru a realiza
un astfel de sistem, dezvoltatorul trebuie să cunoasca î ndeapr oape aceste trei elemente, soluț iile
care permit realizarea funcțiilor ș i structura sistemului.
Structura un ui astfel de sistem este formată dintr -un suport fizic care să dețină funcțiile
unui server prin care să unească terminalele de control(telefon, tabletă) ale funcț iilor cu
componentele electronic e(senzori, relee, becuri, motoare) sau dispozitivele(boxe, televizor) care
sunt controlate prin aceste terminale . Pentru accesul la aceste funcții este necesară o interfață
destinată utilizatorului prin ca re poate manipula componentele ș i dispozitivele. Pe ntru a crea o
astfel de interfață , dezvoltatorul utilizează limbaje d e programare prin care realizeză scripturi
destinate fiecărei funcții în parte, acționarea lor determinând schimbă ri de stare la nivelul
componentelor(dispozitivelor ).
1.2 Raspberry P i
Fundația Raspberry Pi este o asociație caritabilă înf iințată în anul 2009 care promovează
studierea bazelor informaticii și a calculatoarelor în școli și care este responsabilă de realizarea
unei plăci de dezvoltare numit ă Raspberry Pi. Fundaț ia este suport ată de Universitatea din
Cambridge și de Broadcom. Prima placă de dezvoltare , Raspberry Pi B, a fost lansată pe piață în
anul 2011. Datorită prețului scă zut (35 lire), a puterii de procesare ș i a dimensiunilor reduse, ac est
produs a fost un mare success pe piață , Fundația Raspberry Pi reuș ind să distribuie două milioane
de unități în cei doi ani î n care s -a produs acest model. [ 6]
1.2.1 Placa de dezvoltare
Placa de dezvoltare utilizată î n acest sistem integrat este unul dintre modelele realizate de
Funda ția Raspberry Pi, ș i anume, modelul Raspberry Pi B+, care este un model mai avansat din
punct de vedere al puterii de procesare și a porturilor oferite decâ t primul model realizat,
Raspberry Pi B. Din punct de vedere al p uterii de procesare, placa se bucură de un processor
Broadcom BCM2835 cu o arhitectura ARM11 ș i cu o frecvență de tact de 700 MHz și o memorie
SDRAM de 512 MB. Pe lângă aceste c omponente, Raspberry Pi B+ oferă o mul titudine de
porturi de comunicație ș i extensii care pot fi exploatate de utilizator, cum ar fi: patru porturi USB
v2.0, un port HDMI, un port AUDIO/VIDEO, p atruzeci de pini configurabili ș i programabili, o
extensie pentru carduri MicroSD, un port de conexiune Ethernet 10/100. Toate aces te
compone nte se interconectează pe un suport de dimens iuni reduse: 85 x 56 x 17 mm. (Figura 3)
Pe lângă puterea de procesare oferită în funcție de dimensiunile plă cii, un alt avantaj al Raspberry
Pi B+ ar fi că alimentarea plă cii se face cu o tensiune de 5V și un c urent de până la 2A, ceea ce
determină un consum scă zut de putere. [7]

19

Figura 3. Componente Raspberry Pi B+

Posibilitatea de integrare a unui sistem de operare, dar ș i mult itudinea de porturi de
comunicație și extensii oferite de această placă de dezvoltare, simplifică foarte mult modul de
lucru și oferă flexibilitate în ceea ce privește dezvoltarea aplicațiilor, în sensul că utiliz atorul se
poate folosi de o gamă largă de periferice, cât ș i de circ uite fizice implementate de el î nsuși
pentru realizarea aplicaț iilor dorite.
1.2.2 Sistemul de operare
Sistemul de oper are care stă la baza acestei aplicații se numeș te Raspbian Linux. Acest
sistem de operare dispune de o arhitectură specific ă unei distribu ții de Linux Debian cu versi unea
de Kernel 3.18, fiind dedicat în totalitate sistemelor Raspberry Pi sau a sistemelor ce con țin un
procesor ARM .
Raspbian Linux este un sistem de oper are Open-Source oferit de Fundaț ia Raspberry Pi
pentru dezvoltarea aplica țiilor pe pl ăcile Raspbe rry Pi, permi țând utilizatorului s ă configureze și
să personalizeze sistemul dup ă bunul plac. Raspbian Linux este disponibil într -o variant ă gratis ș i
se poate procura de pe site -ul deținut de Fundaț ia Raspberry Pi . [8]
1.2.3 Pinii de intrare/iesire – GPIO
Pinii GPIO – General -purpose in put/output sunt o extensie a plă cii de dezvoltare, care
permit comunicarea pe diferite interfețe de comunicaț ie cum ar fi: I2C, W1, SPI, UART, ID
EEPROM; pot fi configurați și programați în funcție de scopul dorit. Acești pini pot fi configurați
ca intrări/ieșiri și prezintă stă ri (activ = 1, inactiv = 0) care pot fi scrise/citite cu ajutorul plă cii de
dezvoltare.
Pe Raspberry Pi B+ exist ă 40 de pin i integraț i, dintre care 4 furnizeaz ă tensiuni de
alimentare de 3,3V, resp ectiv 5V, 8 pini de mas ă, 2 pini pentru interfața de comunicaț ie ID
EEPROM, iar res tul de 26 de pini pot fi configurați ca pini de intrare/ieșire sau folosiț i pentru
restul inter fețelor de comunicație. O diagramă a pinilor este reprezentată în Figura 4 .

20

Figura 4. Diagrama pinilor GPIO [ 9]

Pentru a putea manipula acești pini, trebuie adăugată o librărie specială în sistemul de
operare, această libră rie fiind dedicată strict acestor pini. Această librărie dedicată este
disponibilă în doua li mbaje de programare diferite, Python și C, utilizatorul putând astfel să
aleagă mediul în care dorește să își dezvolte aplicațiile. Librăria specifică limbajului de
progra mare Python se numește RPi.GPIO, iar librăria specifică limbajului de programare C se
numeș te WiringPi.
1.3 Programe și limbaje de programare utilizate î n implementare
1.3.1 APACHE2 WEB SERVER
Apache este un web server HTTP Open-Source ce poate fi integrat pe platformele Linu x
Unix, Microsoft Windows, dar ș i pe alte platforme. Apach e este cel mai de s întâ lnit web server
HTTP pe sistemele Linux [10]. Web server -ele sunt utilizate pentru a servi pagini web l a cereri
provenite de la diferiți clienț i (PC , telefoane, tablete, etc.). În urma acestor cereri, web server -ul
răspunde cu pagini web care pot fi vizualizate de către clienți cu aplicaț ii de tip Web Browser:
Chrome, Firefox, Opera, etc.
Protocolul cel mai folosit în transmiterea acestor cereri/ră spunsuri este protocolul HTTP –
Hyper Text Transfe r Protocol, dar sunt suportate ș i alte protocoale, cum ar fi: HTTPS – Hyper
Text Transfer Protocol over Secure Sockets Layer și FTP – File Transfer Protocol. [11]
În funcție de scopul ș i de complexitatea web server -ului, Apache se poate utiliza în
combinație cu o bază de date MySQL, cu limba je de scri pting PHP, Python, Perl. Această
configurație este cunoscută sub numele de LAMP (Linux, Apache, MySQL, PHP/Python/Perl).
1.3.2 HTML
HTML – HyperText Markup Language – este un limbaj de marcare utilizat pentru crearea
pagin ilor web cu scopul ca acestea să fie vizualizate î ntr-un browser. HTML este un fo rmat de

21

text ce poate fi citit ș i editat de utilizatori cu ajutor ul unui editor de text simplu, însă utilizatorul
trebuie să cunoască destul de bine acest limbaj pentru a scrie sau a modifica c ontinuțul unui astfel
de fișier. Extensia unui astfel de fiș ier este .html sau .htm . Acest limbaj permite utilizarea unor
elemente specifice numite tag -uri(butoane, tabele, liste, imagini, etc.) prin care utilizato rul poate
aranja pagina web după bunul pla c, dar suportă și script -uri, formulare care îndeplinesc diferite
acțiuni î n interiorul paginii. [12]
O pagin ă HTML este compusă din două elemente importante, <head> și <body> . În tag –
ul <head> se gă sesc elemente precum: titlul paginii( <title>ex</title> ), formatul și stilul
textului din pagină, script -uri, legături către surse externe ș i descrieri <meta> ce conț in
descrierea paginii, cuvinte cheie, informaț ii utile motoarelor de că utare.
Cele mai utilizate funcții pentru realizarea și gestionarea unei pa gini web ale limbajului
HTML sunt următoarele:

<!–..–> – tag utilizat pentru comentarii.
<html> – tag-ul ce anunță un browser că este un document HTML.
<body> – tag ce definește conținutul documentului HTML.
<a> – este un tag ce definește o legătură prin care se poate realiza trecerea de la o pagin ă
web la alta.
<div> – defineș te o diviziune sau o secțiune din pagina HTML.
<figure> – este un tag specific ce co nține diagrame, ilustrații sau poze .
<figcaption> – este un tag ce reprezintă titlul unui tag de tip <figure> .
<font> – caracteristic textului ce apar e în pagină. Acest tag poate ad uce modificări
textului cum ar fi: mărime, culoare, tipul fontului, etc.
<form> – este folosit la crearea de formulare HTML pentru d ate de intrare de la utilizator
<img> – definește o imagine în pagina web.
<input> – este un câmp de intrare în care utilizatorul poate introduce date.
<p> – definește un paragra f în pagina web.
<script> – element c e conține un script, deobicei JavaScript.
<title> – defineșt e titlul paginii web.

HTML5 este o extensie a standardului HTML care in troduce noi caracteristici pe lângă
cele deja prezente în standardul HTML. Î n HTML5 s -au creat noi tag -uri care permit
utilizatorului să manipuleze conținutul multimedia în paginile w eb, ceea ce î n standardul anterior
acest lucru era foarte greu de realizat. Multe din aceste caracteristici s -au real izat cu scopul de a
integra conț inutul multimed ia și aplicațiile web cât mai eficient pe telefoane ș i tablete. Câteva din
aceste funcții ad use de standardul HTML5 sunt exemplificate mai jos:

<audio> – destinat redării sunetelor, cum ar fi fișiere audio sau audiostream.
<video> – destinat redării fișierelor video în pagina web.
1.3.3 PHP
PHP – Php: Hypertext Processor – este un limbaj d e programare folosit pentru a crea
pagini web dinamice, codul sursă fiind înglobat în codul HTML, dar permite și crearea
aplicațiilor î nafara paginii web. Pe lângă crearea de pagini dinamice, cu ajutorul limbajului de
programare PHP se pot crea, deschide, citi, scrie, șterge fișiere pe server, se pot crea script -uri
prin care se pot colecta date primi te de la utilizatori, se pot trimite și primi cookie -uri de sesiune,
se poate comunica cu o bază de date în care poate adăuga, șterge, modifica date, și poate c ripta
date. [13]
PHP este printre cele mai folosite limbaje de programare server -side, fiind în același timp
o posibilă componentă a configurației LAMP. Prima caracteristică a limbajului de programare

22

PHP este simplitatea. Aceast ă simplitate este dată de sintaxa li mbajului care este una foarte
ușoară, nu impune includerea de biblioteci sau de directive de compilare și este destul de
asemănător cu limbajele Perl și C. Pe lângă această simplit ate a PHP -ului, acesta mai oferă și
securitate , în sensul că limba jul deține un set flexibil și eficient de măsuri de siguranță. Incă o
caracteristică a acestui limbaj este că poate lucra cu majoritatea bazelor de date, printre care ș i
MySQL.
PHP rulează pe aproape toate platformele apă rute, cele mai importante fiind : Unix,
Microsoft Windows, Mac OS și poate interacț iona cu majoritatea server -elor web.
Fișierele PHP se pot indentifica după extensiile: .php, .php3, .ph3, .php4, .inc, .phtml;
interpretarea acestor fi șiere f ăcându-se pe server -ul web , rezultatul fiind tr imis sub formă de text
HTML î n browser -ul utilizatorului.
1.3.4 Python
Python este un limbaj de programare dinamic de nivel înalt, care oferă progra matorului
posibilitatea programă rii structural e dar și orientat ă pe obiect. Este un limbaj de scripting , deci
este interpretat și nu compilat, ceea ce determin ă reducerea timpului în procesul de dezvoltare ș i
depanare. Python este folosit în programarea aplicațiilor web, dar este utilizat și în programarea
aplicațiilor științ ifice sau de divertisment. [14]
Limbajul de programare Python oferă o arie foarte mare de metode și functionalități,
începând cu cele de bază , de la lucrul cu șiruri și fișiere, până la lucrul cu fire de execuție, socket –
uri, procese , etc. Aceste metode și funcționalităț i sunt foarte similar e cu cele oferit e de limbajul
de programare C, în sensul că sunt funcții cu același nume și cu aproximativ aceeaș i parametrii.
Python oferă suport și compatibilitate ș i se poate integra pe aproape toate platformele
existente: Linux, Unix, Microsoft Windows , Mac OS X, iOS, Android, etc.
Fișierele specifice limbajul ui Python se pot identifica după extensiile: “.py”, “.pyw”,
“.pyc”, “.pyo”, “.pyd”.
1.3.5 MySQL
MySQL – My Sequel – este un sistem Open-Source de gestionare a bazelor de date.
MySQL reprezint ă o component ă de baz ă a configura ției LAMP și, în pre zent, este cel mai
popular sistem de gestionare a bazelor de date. Se poate utiliza al ături de mai multe limbaje de
programare, dar cel mai des folosit este al ături de limbajul de programare PHP, deoarece limbajul
de programare PHP ofer ă funcții pentru toate necesit ățile sistemului MySQL. [15]
Acest sistem de gestionare a bazelor de date poate fi integrat ș i rulat pe foarte multe
platform e existente: Linux, Unix, Microsoft Windows, Mac OS X, Solaris, FreeB SD, etc.
1.4 Vulnerabi lități de securitate
În prezent, numărul aplicațiilor web este foarte ridicat și reprezintă cea mai importantă
formă prin care utilizatorul obține informațiile din Internet. Aplicațiile web ocupă o arie foarte
mare din Intern et și îndeplinesc o multitudine de funcții prin care simplifică foarte mult accesul la
informație, dar și simplitatea cu care un om își poate satisface nevoile. Aplicațiile web au devenit
o necesitate din viața fiecărui om și deservesc la: căutarea informațiilor , vânzări online, plăți
bancare, licitații online, vizionarea online a filmelor și multe alte aplicații la care utilizatorul are
acces.
Odată cu creșterea popularității aplicațiilor web, a crescut și numărul atacurilor
cibernetice prin care atacatorii ob țin neautorizat informații legate de oamenii care folosesc aceste
aplicații web , dar și compromiterea servere -lor c are dețin informații importante . Datorită
popularității aplicațiilor web a crescut și nivelul de complexitate a une i astfel de aplicații. Cu cât

23

aplicația web este mai complexă, cu atât numărul vulnerabilităților de securitate crește, un
atacator putând exploata aceste vulnerabilități în scopuri rău intenționate. Securitatea aplicațiilor
este foarte importa ntă și se pune foarte mult accent pe stoparea acestor atacuri nedorite.
1.4.1 Atacul de tip “ Injection Flaws ”
Potrivit fundației OWASP, comunitate online dedicată studierea vulnerabilităților de
securitate a aplicațiilor web, cel mai întâlnit tip de atac este atacul Injection în special SQL
injection .
Acest tip de atac apare atunci când datele de la utilizat or sunt trimise la un interpreto r ca
parte a unei comenzi sau a unei interogări. Prin aceste date trimise , atacatorul obligă interpreto rul
să execute comenzi nedorite sau să permită acces area datelor fără autorizare. Slăbiciunile de
securitate ale unui astfel de sistem sunt foarte ușor de descoperit atunci când se examinează codul
sursă, dar sunt foarte greu de găsit atunci când nu avem acces la codul sursă și este nevoie de o
testare a si stemului.
Impactul pe care acest tip de atac îl are asupra sistemului este sever. Injectarea poate duce
la pierderea datelor sau corupția datelor și uneori poate duce chiar la preluarea contr olului asupra
mașinii gazdă. [ 16]
1.4.2 Atacul de tip “ Broken Authentication and Session Management ”
Al doilea cel mai întâlnit atac de securitate conform listei oferite de comunitatea OWASP,
este atacul Broken Authentication and Session Management – Spargerea
Autentificării și Managementul Sesiunii . Acest tip de ata c apare atunci când
conturile, parolele și sesiunile nu sunt suficient de protejate. Atacatorii pot compromite parole,
chei sau sesiuni pentru a -și asuma identitatea altor ut ilizatori.
Implementarea corectă a unei aplicații care să protejeze aceste date es te greu de realizat și
necesită o experiență și un nivel de cunoștințe ridicat. Detectarea unor astfel de vulnerabilități nu
este ușor de făcut și impactul pe care acestea îl pot avea asupra sistemului este unul server. Printr –
un astfel de atac, atacatorul poate intra în posesia unor conturi sau chiar în posesia tuturor
conturilor din aplicația web.
Odată ce atacatorul a intrat în posesia unor conturi, el poate să facă tot ce dorește în
numele utilizatorului cărui i -a furat contul. În cazul în care aplicaț ia web folosește numere de
conturi bancare sau cărți de credit pentru plăți online, atacatorul poate intra în posesia acestor
informații și le poate folosi în scopuri dăunătoare. [17]
1.4.3 Atacul de tip “ Cross Site Scripting ”
Pe locul trei din topul rea lizat de comunitatea OWASP se află atacul XSS – Cross
Site Scripting . Este unul dintre cele mai întâlnite atacuri de securitate din Internet. Un astfel
de atac se poate iniția atunci când server -ul preia datele trimise de utilizator și le trimite înapoi
browser -ului, fără ca acestea să fie validate.
Cross Site Scripting permite atacatorului să execute script -uri în browser -ul
victimei, să redirecționeze paginile victimei, să introducă viermi, etc. Prin executarea de script -uri
în browser -ul victimei, atacato rul poate intra în posesia sesiunilor de utilizator pe care le poate
folosi în scopuri dăunăto are. Există două tipuri de XSS: stocat sau reflectat, fiecare dintre acestea
putând avea loc pe server sau pe mașina victimei. Vulnerabilitățile XSS pe server pot fi
descope rite ușor prin testarea funcțiilor sau prin analiza codului sursă , în schimb la client
detectarea acestor vulnerabilități este foarte grea.

24

Impactul pe care acest tip de atac îl are este unul moderat deoarece ținta atacatorului este
clientul , nu serverul. Atacatorul poate executa script -uri în browser -ul victimelor, inserarea de
conținut în paginile web, redirectarea utilizatorilor, să obțină sesiuni de utilizator, etc. [18]
1.4.4 Expunerea datelor sensibile
Acest atac se poziționează pe loc ul șase în topul realizat de comunitatea OWASP și se
referă la stocarea nesigură a datelor criptografice. Multe din aplicațiile web nu protejează
corespunzător datele sensibile, cum ar fi carduri de credit, acreditări de autentificare sau alte date.
Datori tă acestei neglijări atacatorul poate fura sau modifica aceste date slab protejate și le poate
folosi în scopuri dăunătoare.
Astfel de vulnerabilități sunt greu de exploatat de aceea atacatorii nu sparg deobicei
criptarea. Atacatorii se folosesc de alte mi jloace prin care pot intra în posesia datelor, cum ar fi:
atacuri de tip man -in-the-middle, chei furate, date în clar din browser -ul utilizatorului sau chiar de
pe server.
Cel mai comun defect este pur și simplu necriptarea datelor sensibile. Un defect poa te fi și
cheia slabă cu care se criptează datele sensibile sau dacă sunt folosite tehnici comune de criptare.
Impactul pe care exploatarea acestor vulnerabilități îl poate avea asupra server -ului este
sever deoarece toate datele sensibile pot fi c ompromise . [19]
1.4.5 Comunicarea nesigură a datelor
O altă vulnerabilitate a acestor aplicații o reprezintă comunicarea nesigură a datelor între
client și server. Multe aplicații web nu criptează traficul din rețea pentru a proteja comunicațiile
sensibile utili zând un protocol de conexiune HTTP – Hypertext Transfer Protocol.
HTTP este un protocol nesigur și este vulnerabil la atacuri de tip man -in-the-middle, care
permit atacatorului să obțină acces la contul utilizatorului și la datele sensibile sau chiar să
modifice conținutul paginii. HTTP este vulnerabil deoarece datele și parametrii trimiși prin
această conexiuni sunt în clar, unui atacator fiindu -i foarte ușor să obțină contul și parola unui
utilizator doar prin captarea și analizarea traficului.
Alternati va acestui tip de conexiune nesigură este protocolul HTTPS – Hypertext Transfer
Protocol/Secure. Acest protocol este defapt tot un protocol HTTP doar că acest protocol este
încapsulat într -un flux SSL cu scopul de a oferi o criptare a traficului și transmi terea sigură a lui
către server.
Protocolul SSL – Secure Sockets Layer a fost creat pentru a oferi o comunicație sigură
între browser -ul clientului și server. Pentru aceasta se folosește certificatul SSL care este un
certificate semnat digital. Protocolul SSL se bazează pe criptografia cu cheie publică , care este un
sistem de codificare a simetric, în care cheia folosită pentru codificr ea datelor este diferită, dar
înrudită matematic cu cheia folosită pentru decodificarea acelora și date. [20]

25

2. Implementarea solutiei adoptate
2.1 Descriere de ansamblu
În implementarea soluției adoptate s-au îmbina t diferite tehnologii , din care a rezultat un
sistem pentru o casă inteligentă. Nucleul acestui sistem îl reprezintă placa de dezvoltare
Raspberry Pi B+. Această placă are la bază un sistem de operare Linux Debian, numit Raspbian,
care oferă plăcii de dezvoltare caracteristicile unui server. Cu ajutorul programelor adiționale și a
script -urilor realizate în diferite limbaje de programare s-a reușit i mplementarea funcțiilor de bază
a unei case inteligente.
În acest sistem de operare este configurat un server web, pe care este implementat ă o
aplicație web prin care utilizatorul poate accesa aceste funcții ale casei inteligente. Această
aplicație web este vizibilă în rețea și poate fi accesată cu orice terminal capabil să acceseze pagini
web.
Pe lângă implementarea softw are, în realizarea funcțiilor s -au folosit periferice și
componente electronice , acestea fiind controlate cu ajutorul script -urilor realiz ate în diferite
limbaje de programare, dar și cu ajutorul unor program e adiționale destinate anumitor funcții.
2.1.1 Sistemul de operare
Sistemul de operare utilizat se numește Raspbian Linux, o distribuție Linux Debian.
Pentru a instala sistemul de ope rare este nevoie de o memorie flash MicroSD. Placa de dezvoltare
inițializează sistemul de operare doar de pe o astfel de memorie.
Raspbian Linux este disponibil și se poate descărca de pe site -ul deținut de Fundația
Raspberry Pi, dimensiunea pachetului “.img ” cu sistemul de operare fiind de 3,1 GB [ 21].
Această imagine este scrisă pe cardul MicroSD pentru a putea rula sistemul de operare pe placa
de dezvoltare. Dimensiunea cardului MicroSD utilizat este de 8GB.
După scrierea imaginii sistemului de operare pe MicroSD, acesta este introdus în socket –
ul destinat cardului MicroSD. La pornirea plăcii de dezvoltare, sistemul de operare este inițializat
de pe card, iar după executarea acest ui proces , utilizatorul poate începe utilizarea lui.
Primul pas după inițializarea sistemului de operare a fost modificarea parolei inițiale a
sistemului de operare, urmată de actualizarea programelor și a funcțiilor sistemului. Acest lucru l –
am realizat cu comanda: apt-get update && apt -get upgrade –y.
Al doilea pas a fost integrarea bibliotecilor dedicate limbajului de programare Python cu
comanda: apt-get install python -dev -y. Pe lâ ngă aceste biblioteci din pachetul
python-dev, am integrat și biblioteca destinată programării pinilor GPIO a limbajului Python.
Biblioteca GPIO est e disponibilă și se poate descărca de pe site -ul de suport al limbajului Python.
[22]
2.2 Aplicația web destinată utilizatorului
Aplicația web este configurată pe un server web Apache2. Integrarea server -ului web
Apache2 în sistemul de operare s -a realizat cu comanda : apt-get install apache2 .
După instalare, Apache2 generează un fișier HTML cu calea absolută:
/var/www/index.html . Acest director /www reprezintă directorul de interes în care este
realizat ă aplicația web. Pornirea server -ului web Apache2 p e mașina s ursă se realizează cu
comanda: service apache2 start . După rularea acestei comenzi, Apache2 crează un server
web care poate f i accesat prin IP-ul se rver-ului de oriunde din rețea. La accesarea IP -ului,
răspunsul server -ului va fi conținu tul fișie rului /var/www/index.html . [23]

26

În această aplicație este necesar ă utilizarea unei baze de date MySQL care să gestioneze
anumite informații legate de utilizat ori. Integrarea bazei de date My SQL în sistemul de operare s –
a realizat cu comanda: apt-get instal l mysql-server mysql -client . [24]
Baza de date utilizată este denumită users și conține o tabelă numită login care
conține patru coloane: id, username, password, role . În această tabelă sunt stocate
conturile utilizatorilor și parametrii asociați acestor c onturi.
Parametrul id reprezintă identificatorul utilizatorului în baza de date, username
reprezintă numele utilizatorului, password este parola asociată utilizatorului, iar role este rolul
utilizatorului.
Limbajul de programare utilizat alături de MySQL este limbajul de programare PHP, care
oferă toate fun cțiile necesare comunicării și manipulării dat elor existente în baza de date.
2.2.1 Interfața web
În realizarea interfeței web este utilizat limba jul standard HTML alături de limbaj ul de
programare di namic PHP pentru realizarea script -urilor .
Ca și structură interfața web conține pagini web destinate fiecărei funcționalități
implementate în sistem, cum ar fi: controlul dispozitivelor, supraveghere video, controlul
temperaturii, centrul multimedia și sistem audio. Conținutul acestor pagini web va fi prezentat la
prezentarea fiecărei funcționalități a sistemului. (Figura 5)

Figura 5. Structura interfeței web
Pe lângă aceste pagini web, din structura platformei mai face par te încă o pagina web
destinată autentificării utilizatorilor pe platformă.
2.2.2 Autentificare utilizatori
Din structura platformei mai face parte încă o pagină web destinată autentificării
utilizatorilor pe platformă. Această pagină web are ca scop re stricționarea accesului utilizatorilor
pe pagina web, în sensul că la funționalitățile platformei se pot conecta doar utilizatorii care dețin
un cont și o parola.
Din punct de vedere al interfeței , pagina web conține o imagine, care reprezintă logo -ul
aplicației, două câmpuri de intrare: unul fiind câmpul destinat introducerii numelui
utilizatorului(contului), iar celălalt câmp fiind destinat introducerii parolei asociate numelui
utilizatorului, un camp de intrare de tip checkbox prin care utilizatorul poate selecta opțiunea de
a rămâne conectat în aplicația web o perioadă mai lungă de timp sau doar până când acesta
părășește platforma sau va fi deconectat după o perioadă de timp fără inactivitate din partea lui.

27

Pagina web mai conține și un buton Login care la acționarea lui se inițiază procesul de
autentificare. (Figura 6)

Figura 6. Autentificare utilizator
Afișarea imaginii în interiorul paginii web s-a realizat cu <img STYLE="WIDTH:
120px; HEIGHT: 170px" src="icons/piii.png"/> unde parametrul src reprezintă
sursa imaginii, calea imaginii din structura fișierelor a platformei. Câmpul de intrare destinat
numelui utilizatorului a fost integrat în pagină prin <input id="username"
name="username" type= "text" placeholder="Username"/> , unde id este
identi ficatorul c âmpulu i de intrare, name reprezintă numele câmpului de intrare, type reprezintă
tipul câmpului de intrare, în acest caz de tip text, placeholder reprezintă textul prezent în
interiorul câmpului până la introducerea unor caractere în interiorul c âmpului. Al doilea câmp de
intrare prezent în interiorul paginii web, este câmpul destinat introducerii parolei asociate
numelui utilizatorului. Codul asociat câmpului este: <input id="password"
name="password" type="password" placeholder="Password"/> . Dac ă la câmpul
numelui utilizatorului identificatorul era username , la câmpul parolei identificatorul este
password , analog și pentru parametrul name . Tipul câmpului este password ceea ce determină
o caracteristică importantă acestui c âmp, în sensul că datele introduse de utilizator nu vor apărea
în clar. Câmpul Keep me logged in este tot un câmp de intrare de tip checkbox care prezintă
două stări: bifat – câmpul va avea valoarea “1”/ nebifat – câmpul va avea valoarea “0”. Atunci
când acesta va deține valoarea “1” reprezintă opțiunea utilizatorului de a rămâne conectat pe
platformă o perioadă mai lung ă de timp, în caz contrar, acesta va fi deconectat după o perioadă de
timp de inactivitate sau la părăsirea platformei. Linia de cod asociată acestui câmp: <input
type="checkbox" id="remember_me" name="r emember_me" checked
value='1' />. Componenta Login este un buton de tip submit destinat inițierii procesului de
autentificare a utilizatorului atunci c ând acesta este acționat. Linia de cod care determină prezența
acestui buton: <input type="submit" value="Login"/> .
Toate aceste componente de intrare fac parte dintr -o entitate numită form (tag specific:
<form></form> ) care îmbină toate aceste date de intrare cu scopul de a le folosi în posibile
acțiuni următoare. Acțiunea următoare este de a verifica datele introduse pentru a permite accesul
unui posibil utilizator pe site. Acest form are următoare a reprezentare în limbaj HTML: <form
action="phpsc ripts/login.php" method="POST"> . Parametrul method reprezintă
metoda prin ca re browser -ul va face o cerere server -ului. Metoda POST va trimite variabilele
introduse de utilizator în interiorul cererii t rimisă server -ului. Parametrul action reprezintă
acțiunea care se exercită în urma acționării butonului. Acțiunea butonului determi nă apelarea
fișierului login.php din directorul phpscripts . Acest fișier este un script PHP prin care se
verifică datele introduse de utilizator cu datele deja prezente într -o bază de date. În cazul în care
datele introduse se regăsesc în baza de date, utili zatorul obține acces la aplicația web .
Primul pas pentru v erificarea datelor este conecta rea la baza de date prin linia de cod:
$con=new mysqli("localh ost","smartpi","lego","users"); . Metoda mysqli()

28

face acest lucru posibil. Primul parametru al metodei r eprezintă adresa la care se af lă baza de
date, în acest caz baza de date este locală, localhost . Al doilea parametru reprezintă contul prin
care se fa ce conectarea cu baza de date, smartpi , al treilea parametru este parola asociată
contului cu care se fa ce conectarea la baza de date, lego , iar al patrulea parametru reprezintă
numele baze i de date la care ne conectăm, users .
Al doilea pas este de a prelua datele introduse de utilizator din metoda POST . Acest lucru
se poate face prin : $username = $_POST['us ername']; $password =
$_POST['password']; $remember_me = $_POST['remember_me']; , unde în variabila
$username se stochează valoarea int rodusă de utilizator , în variabila $password se stochează
valoarea introdusă de utilizator, iar în variabila $remember_me se menține opțiunea aleasă de
utilizator pentru a rămâne conectat o perioadă mai lungă de timp sau nu.
Următorul pas este de a construi un query prin care să selectăm liniile de date din
interiorul bazei de date. Con struirea unui astfel de query se poate face cu linia de cod: $con-
>prepare("SELECT * FROM login WHERE username = ? and password = ?") ,
unde metoda prepare() construiește un query para metrizat care mai târziu va fi interpretat de
baza de date . Semnele ? sunt puse deoarece introducerea datelor de intrare în query se va face
abia la a pelarea metodei: bind_param('ss', $username, $password); , unde în locul
primului semn ? va fi introdusă variabila $username , iar în locul semnului al doilea ? va fi
introdusă variabila $password . Executarea a cestui query construit se realizează l a apelarea
metodei: execute(); . În cazul în care prin executarea acestui query rezultatul va fi unul po zitiv,
datele introduse de utilizator se regăsesc în baza de date ceea ce rezultă că autentificarea a avut
loc cu s ucces.
Dacă utilizatorul bifează opțiunea de a rămâne conectat o perioadă mai lungă de timp,
utilizatorului i se atribuie un cookie de sesiune pe o anumită perioadă de timp. În acest caz setarea
acestui cookie de sesiune se face cu ajutorul liniei de cod: setcookie('cookie',$user .
"," . $role,time()+3600*24,'/'); , unde timpul după care expiră această sesiune este
time() (ora curentă) + 3600*24 secunde, deci acest cookie de sesiune va expira peste 24 de ore
de la accesarea contului. În caz contrat utilizato rului i se va atribui un token de sesiune care va
expir a după 5 minute de inactivitate (standard) sau acest token de sesiune va fi pierdut la
părăsirea aplicației web.
Aceste tipuri de sesiuni sunt foarte importante, deoarece cu ajutorul lor putem restric ționa
accesul utilizatorilor neautoritați la paginile web. Astfel, doar un utilizator care a obținut o astfel
de sesiune poate vizualiza conținutul paginilor web prezente în aplicația web . Script -ul care
gestionează accesul în funcție de aceste sesiun i se află în fișierul cu calea
phpscripts/role.php și care conține :

if($_SESSION['role'] == "10" || $role == "10"){ }//comparare rol
else { header("Location: https://$ip/index.php "); }

, unde $_SESSION['role'] reprezintă rolul utilizato rului, valoare transmisă prin intermediul
sesiunii create în urma autentificării. În cazul în care valoarea rolului din sesiune este diferită de
10, utilizatorul va fi redirecționat pe pagina web de autentificare prin metoda:
header("Location: http s://$ip/index.php"); .
2.3 Func ții implementate
2.3.1 Controlul dispozitivelor
Una din func țiile disponibile utilizatorilor o reprezintă controlul dispozitivelor din
interiorul casei, cum ar fi becuri, încuietorile ușilor sau chiar ușa de la garaj. Această fun cție

29

permite utilizatorului s ă manipuleze aceste dispozitive din aplicaț ia web, accesibilă de pe orice
terminal ce suportă accesul la pagini web(telefon inteligent , tabletă, calculator, etc.). Pagina web
a fost realizată să fie cât mai simplă și cât mai intuitivă pe ntru a ajuta utilizatorul s ă folosească
aceste funcții cât mai ușor. După cum putem observa din interfață, fiecare dispozitiv pe care
utilizatorul îl poate controla este reprezentat printr -o imagine care reflectă pe cât posibil funcția
care o îndeplinește. Fiecărei imagini din pagina web îi este asociat un buton care prin acționarea
lui închide/deschide dispozitivul cărui îi este destinat. Butoanele Turn On All și Turn Off
All din interiorul paginii web sunt destinate închiderii/deschiderii tuturor becurilo r. (Figura 7)

Figura 7. Controlul dispozitivelor
Reprezentarea becurilor în pagina web s -a realizat cu ajutorul codului HTML :

<figure><img src="icons/redshift.png " alt="Light"/> <figcaption> Light I
</figcaption></figure>

Tag-ul <figure> determină apariția unei figuri în pagina web în interiorul cărui am
integrat o imaginea reprezentativă unui bec prin tag -ul <img> unde sursa imaginii este dată de
parametrul src="icons/redshif t.png". Tag-ul <figcaption> determină apariția textului
sub imaginea din interiorul figurii . Fiind o aplicație demonstrativă, în aplicație sunt introdus e
doar două becuri controlabile pentru a demonstra funcționalitatea, însă acest număr de becuri nu
este limit at, utilizatorul poate adăuga un număr mai mare de astfel de componente.
Butonul prin care se poate controla un bec este reprezentat prin dou ă imagini, una când
este închis și are culoarea verde, cealaltă când este deschis și are culoarea roșie. Pen tru acest
lucru a fost nevoie suprapunerea acestor două imagini, apariția lor fiind determinată de starea
curentă a becului. Codul HTML asociat acestor butoane este:

<form action="phpscripts/file.php" method="POST"><input type="image"
src="icons/system -logout.png" name="lighton1"/></form>

Aceast cod HTML determină apariția butonului reprezentat prin imaginea system-
logout.png atunci când starea becului este închisă, deci va apărea un buton de culoare verde.

<form action="phpscripts/file.php" method="POS T"><input type="image"
src="icons/system -shutdown.png" name="lighton1"/></form>

Codul de mai sus este similar cu cel prin care se reprezintă butonul de culoare verde, doar
că de data aceasta sursa este imaginea system-logout.png care determină culoarea ro șie a
butonului atunci când starea becului se modfică din închis în deschis. Un parametru foarte
important al acestui buton este parametrul name , deoarece prin acest parametru butonul poate fi
identificat în urma acționării lui. În urma acționării butonulu i se rulează un script PHP <form
action= "phpscripts/file.php" method="POST"> . Acest script are rolul de a scrie
starea actuală a butonului acționat într -un fișier de tip text , file.txt . Atunci când unul dintre

30

butoane este acționat acesta este identificat în script după parametrul name specific fiecărui
buton . Fișierul file.txt conține șase caractere, fiecare caracter fiind o stare a unui buton din
aplicația web. Componentele controlate din interiorul acestei pagini web sunt: două becuri și un
servomotor ca re în urma acționării lui închide/deschide o încuietoare de ușă. Aceste caractere po t
avea doar două valori prin care se determină starea dispozitivelor: valoarea “0” pentru starea
închis a dispozitivului, respectiv valoarea “1” pentru starea deschis a dis pozitivului. Primul bec
are ca identificator parametrul name="lighton1" prin care este identificat în script -ul PHP. La
acționarea butonului, script -ul PHP va fi rulat și va deschide fișierul file.txt cu ajutorul liniei
de cod:

$file=fopen("file.txt","r") or die("not ok"); //deschide fisier
$line=fgets($file); //stocarea continutului fisierului
fclose($file); //inchide fisier
$file=fopen("file.txt","w") or die("not ok");

Parametrul “r” face ca fișierul să fie deschis doar pentru citire. În variabila $line
stocăm valorile din fișierul file.txt , după care fișierul este î nchis. Fișierul este redeschis dar
de data aceasta în modul de scriere(parametrul “w”) pentru a putea modifica valorile din fișier.
Modificările valorilor se fac pe baza identificatorului unui buton și a valorii curente a stării
butonului din fișierul file.txt .

if (isset($_POST["lighton1_x"]) && $line[0] == '1'){
$line[0] = '0'; //modificare valoare pe prima pozitie
fwrite($file,$line); //scriere in fisier
fclose($file);
header("Location: http s://$ip/admin/home.php"); //redirectionare
exit;
}
elseif (isset($_POST["lighton1_x"]) && $line[0] == '0 '){
$line[0] = '1';
fwrite($file,$line);
fclose($file);
header("Location: http s://$ip/admin/home.php");
exit;
}

În liniile de cod de mai sus sunt prezentate modificările aduse fișierului în cazul în care
este acționat un buton . Metoda isset($_POST["lighton1_x"]) determină dacă a fost
acționat butonul cu identificatorul lighton1 din POST . Fiind primul bec din pagina web, în
fișierul file.txt valoarea stării butonului va fi pe prima poziție din fișier. Astfel, dacă butonul
primului bec este acționat și valoarea stării becului este '1' atunci se vor executa următoarele
acțiuni : valoarea stării primului bec va lua valoarea $line[0] = '0' , variabila $line este
scrisă în fișier fwrite($file,$line) , fișierul este închis, după care utilizatorul va fi
redirecționat către aceeași pagina pentru a actualiza modificările aduse header("Location:
https://$ip/admin/home.php "). În cazul în care la momentul comparării valoarea stării
primului bec este $line[0] == '0' procesul va fi aproximativ același, doar că de data aceasta
valoarea stării becului se va modifica în $line[0] == '1' .
Același proces va avea loc la acționarea oricărui buton din pagina web, doar că
modificările se fac pe baza identificatorului butonului acționat, valoarea stării butonului acționat
și poziției în fișier a acestei valori. Becului al doilea îi va corespund e parametrul de identificare
name=”lighton2” , valo rii stării becului îi va corespunde poziția a doua din fișier, iar
servomotorului destinat încuietorii îi va corespunde parametrul de identificare name=”lockon” ,
și poziția a treia din fișier pentru valo area stării butonului.

31

La acționarea butonului Turn On All va duce la modificarea valorii stărilor becurilor în
starea '1', deci se vor aprinde toate becurile, iar în cazul acționării butonului Turn Off All
valorile stărilor corespunzătoare becurilor vor fi modificate în starea '0', deci toate becurile se
vor stinge.
Fișierul file.txt a fost creat cu scopul de a stoca stările curente a tuturor
componentelor. Acest fișier este tratat cu ajutorul unui script scris în limbajul Python prin care se
pot manipul a pinii de intrare/ieșire GPIO corespondenți fiecărei component e care poate o fi
controlată. Acest script a fost denumit readFile.py și este plasat în folder -ul
pythonscripts . Fișierul readFile.py este rulat odată cu pornirea server -ului și va rula atâta
timp cât server -ul este pornit. Acest lucru este posibil prin adăugarea comenzii sudo python
/var/www/admin/pythonscripts/readFile.py în fișierul /etc/rc.file care la
pornirea server -ului, sistemul de operare va executa toate comenzile adăugate în acest fi șier.
Pentru a putea manipula pinii de intrare/ieșire GPIO cu ajutorul script -ului, în primul rând
trebuie importată librăria RPi.GPIO destinată acestor pini.

import RPi.GPIO as GPIO

Pinii folosiți pentru fiecare componentă sunt activați și setați în funcție de tipul
pinilor(intrare/ieșire). Fiecărui pin îi corespunde un număr prin care acesta este identificat atât pe
placa de dezvoltare cât și în librăria RPi.GPIO .

GPIO.setup(11, GPIO.OUT)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)

Prin lin iile de cod de mai sus sunt setați pinii identificați prin numerele 11, 13, 15. Al
doilea parametru GPIO.OUT determină caracterul unui pin ca fiind un pin de ieșire. Pinul 11 este
asociat primului bec, pinul 13 este asociat celui de -al doilea bec, iar pinul 15 este asociat
servomotorului.
Condiția ca un bec să poată fi aprins este că becul trebuie să fie controlat prin intermediul
unui releu, deoarece pinii de ieșire nu oferă suficientă putere pentru a aprinde un bec. Astfel,
pentru fiecare bec în parte vom avea nevoie de un releu.
Servomotorul este manipulat printr -un semnal de intrare PWM (Pulse Width Modulation)
care atunci când la intrarea acestuia se aplică un impuls PWM de durată de 1 ms, se va realiza o
mișcare de rotație a servomotorului și va poziț iona servomotorul tot timpul la 0 °. Atunci când
durata impulsului PWM de la intrarea servomotorului este de 1,5 ms, va determina o mișcare de
rotație a servomotorului tot timpul la 90 ° față de starea inițial ă a servomotorului . În cazul în care
la intrarea servomotorului se aplică un impuls PWM de durată de 2,5 ms, poziția servomotorului
se va modifica la 180 ° față de starea inițială a servomotorului. [25]
Pentru a furniza un impuls PWM pe pinul de ieșire 15 destinat servomotorului, pinul a
fost configurat c u următoarele linii de cod:

p = GPIO.PWM(15,50)
p.start(2.5)

Primul parametru din cadrul metodei reprezintă numărul pinului cărui îi este atribuită
caracteristica PWM, iar cel de -al doilea parametru reprezintă frecvența în Hz a impulsului PWM.
Linia de co d p.start(2.5) aplică pe intrarea servomotorului un impuls PWM, unde valoarea
2,5 reprezintă 2,5% din 20 ms, deci durata impulsului va fi de 0,5 ms ceea ce determină mișcarea
de rotație a servomotorului la 0 °.
Modificarea stărilor tuturor pinilor se face î ntr-o buclă while infinită pentru a putea
gestiona stările pinilor atunci când apar modificări la nivelul fișierului file.txt . Codul acestei

32

bucle while infinită poate fi observat mai jos împreună cu modificările aduse pinilor 11, 13, 15
pe parcursul bucle i.

while True:
f = open('../phpscripts/file.txt', 'r+') //citire fisier
s = f.read() //stocarea informatiilor din fisier
GPIO.output(11, int(s[0])) //modificare valoare pin
GPIO.output(13, int(s[1])) //modificare valoare pin
if int(s[2]) == 1:
p.ChangeDutyCy cle(12.5) //aplicare impuls 2,5 ms
elif int(s[2]) == 0:
p.ChangeDutyCycle(2.5) //aplicare impuls 0,5 ms
f.close()
time.sleep(2)

Se deschide fișierul file.txt pentru a citi valorile stărilo r componentelor f =
open('../phpscripts/file.txt', 'r+') . În variabila s se stochea ză conținutul
fișierului : s = f.read() . Pinului 11 , corespondent primului bec , i se atribuie valoarea de pe
prima poziție din conținutul fișierului care pentru va loarea “1” pinul 11 va fi activ ceea ce
determină aprinderea becului, iar pentru valoarea “0” , pinul 11 va fi inactiv ceea ce determină
stingerea becului. Linia de cod prin care se realizează acest lucru: GPIO.output(11,
int(s[0])) . Al doilea bec este controlat prin pinul 13 unde procesul este similar cu procesul de
control al primului bec, doar că s tarea celui de -al doilea bec este dată de poziția a doua din
conținutul fișierului. Linia de cod care determină aprinderea/stingerea celui de -al doilea bec este:
GPIO.output(13, int(s[1])) .
Similar se procedează și în cazul servomotorului, unde valoarea stăr ii servomotorului se
află pe poziția a treia din conținutul fișierului. Diferența între controlul servomotorului și
controlul becurilor este că servomotorului i se aplică la intrare un impuls PWM. Astfel, în funcție
de starea servomotorului din fișier se d etermină mișcarea de rotație pe care servomotorul o va
face. În cazul în care valoarea stării servomotorului din fișier este “1” if int(s[2]) == 1: ,
durata impulsului PWM de la intrarea servomotorului va avea valoare de 2,5 ms, ce va determina
o mișcare de rotație a servomotorului la 180° față de starea inițială a servomotorului, deci
închiderea încuietorii. Linia de cod care realizează acest lucru este:
p.ChangeDutyCycle(12.5) , unde valoarea 12,5 reprezintă 12,5% din 20 ms, deci durata
impulsului de 2,5 ms .
Dacă valoarea stării servomotorului este “0”, durata impulsului PWM va avea valoarea
0,5 ms și va determina o mișcare de rotație a servomotorului către starea inițială 0°, deci
deschiderea încuietorii. Linia de cod care determină acestă mișcare de rotaț ie este:
p.ChangeDutyCycle(2.5) , unde valoarea 2,5 reprezintă 2,5% din 20 ms, deci durata
impulsului de 0,5 ms.
După aceste acțiuni, se va introduce o întârziere de 2 secunde, time.sleep(2) . Datorită
acestei întârzieri, pinii de intrare/ieși re GPIO vor fi actualizați odată la 2 secunde.
2.3.2 Supraveghere video
Aplicația web oferă utilizatorului posibilitatea de a -și monitoriza casa prin intermediul
unor camera web, care furnizează imagini în timp real din locația server -ului. Aceste imagini în
timp real pot fi accesate și vizualizate de utilizator pe interfața web destinată acestei
funcționalități. (Figura 8)
Pentru a implementa aceast ă funcționalitate sunt folosit e două camere web conectate prin
porturile USB ale plăcii de dezvoltare și un program adiț ional numit „Motion”. Instalarea
programului Motion s -a realizat cu ajutorul comenzii: sudo apt -get install motion . [26]

33

Figura 8. Supraveghere video
Motion este un utilitar care face posibilă trasmiterea imaginilor în timp rea l preluate de la
mai multe camera web prin Internet. Utilitarul Motion oferă o multitudine de opțiuni legate de
dimensiunea imaginilor, claritatea imaginilor, detecție de mișcare, dar oferă și opțiunea de
videostreaming. Datorită acestei op țiuni de videost reaming este posibilă transmiterea imaginilor
prin Internet. Acest videostream presupune deschiderea unui port de conexiune prin care
imaginile preluate de la camerele web sunt transmise în Internet. Imaginile pot fi accesate foarte
ușor cu ajutorul unui b rowser și este nevoie de cunoașterea IP -ului sursei și a portului pe care se
transmit imaginile.
Fiecărei camere web îi corespunde un port pe care se transmit imaginile, primei camere
web îi este asociat portul 8081, iar celei de -a doua camere web îi este asociat portul 8082.
Integrarea imaginilor în interiorul paginii web s -a realizat cu ajutorul liniilor de cod:

<img src="&ip:8081 "></img> <!–prima cameră web –>
<img src="&ip:8082 "></img> <!–a doua cameră web –>

Această funcționalitate este foarte ușor de implementat, dar în același timp este foarte
benefică utilizatorului deoarece cu această funcționalitate utilizatorul poate supraveghea foarte
rapid și foarte ușor casa de pe orice terminal care suportă accesul paginilor web.
2.3.3 Controlul temperaturii
Controlul temperaturii reprezintă o altă funcționalitate a sistemului implementat . Această
funcționalitate permite utilizatorului să controleze valoarea temperaturii atât manual cât și
automat din interiorul paginii web. (Figura 9)
Valoarea temperaturii este dat ă de un senz or digital de temperatu ră DS18B20 prin
intermediul interfaței W1 aflate pe pinul 7 al plăcii. Inițierea și sincronizarea transmisiei dintre
senzor și placa de dezvoltare se face cu ajutorul comenzilor modprobe w1 -gpio și modprobe
w1-therm . După sincronizarea transmisiei , senzorul începe transmisia informațiilor de
temperatură [ 27]. Toate aceste informații sunt stocate într -un fișier specific senzorului în sistemul
de operare /sys/bus/w1/devices/28 -000006080f5d/w1_slave .
În fișier există mai multe informații , printre care și informația de temperatură. Valoarea
temperatu rii este selectată din fișier și este copiată în alt fișier , tempa.txt . Selectarea și
copierea se r ealizează cu un script Python, readTemp.py , unde selectarea temperaturii din
fișierul informațiilor legate de temperatură se face prin liniile de cod:

temp_sensor = '/sys/bus/w1/devices/28 -000006080f5d/w1_slave'
f = open(temp_sensor,'r')
text = f.read() //stocare continut fisier

34

data = text.split(" \n")[1].split(" ")[9] //preluarea valori i
temperature = float(data[2:])
temperature = temperature /1000

Copierea în fișierul tempa.txt , se face astfel:

tempa = '/var/www/admin/phpscripts/tempa.txt'
f1 = open(tempa,'w')
f1.write(str(temperature))

Afișarea în pagina web se face cu ajutorul unui script PHP care citește valoarea curentă
din fișierul tempa.txt și o afișează în pagină . Liniile de cod care determin ă această acțiune:

$file1=fopen("phpscripts/tempa.txt","r") or die("gg");
$line1 = intval(floatval(fgets($file1)));
echo "<p>$line1&#8451</p>";

Figura 9. Controlul temperaturii
Pe lângă afișarea temperaturii, în interiorul pag inii web sunt integrate niște butoane care
permit manipularea dispozitivelor care pot modifica temperatura casei.
Butoanele folosite pentru controlul manual sunt butoanele Heat, Cool, Poweroff . La
acțiunea unui buton din cele trei menționate se rulează u n script PHP file.php care determină
modificări ale fișierului file.txt , principiul fiind similar cu cel al aprinderii/stingerii becurilor,
valoarea stărilor dispozitivelor controlate prin aceste butoane fiind pe pozițiile 5 și 6 din fișierul
file.txt .
Pentru a identifica dacă acest sistem va funcționa în modul manual sau automat, în fișierul
file.txt , pe poziția a treia este valoarea care determină modul de lucru al sistemului de
încălzire/răcire. Dacă valoarea poziției a treia este “0” atunci sistemul va funcț iona în modul
manual, respectiv dacă valoarea poziției este “1” atunci sistemul va funcționa în modul automat.
Atunci când butonul Heat este acționat scriptul PHP va determina modificarea valorii
stării dispozitivului de încălzire în fișierul file.txt, de pe poziția a patra, dar va modifica
inclusiv și valoarea de pe poziția a treia pentru modul manual, dar și valoarea sistemului de răcire
de pe poziția a cince a.

if (isset($_POST["Heat"])) {
$line[3] = '0'; //modul manual
$line[4] = '1 '; //pornire s istem inca lzire
$line[5] = '0'; //oprire sistem ra cire
fwrite($file,$line); //rescrierea fisierului file.txt
}

Analog se procedează și în cazul acționării butonului Cool , doar că de data aceasta
valorile modificate vor fi diferite:

if (isset( $_POST["Cool"])) {
$line[3] = '0'; $line[4] = '0'; $line[5] = '1';
fwrite($file,$line);

35

}

Atunci când butonul Poweroff este acționat, va determina oprirea dispozitive lor de
încălzire/răcire .

if (isset($_POST["Poweroff"])) {
$line[3] = '0'; line[4] = '0'; $line[5] = '0';
fwrite($file,$line);
}

Utilizatorul beneficiază și de un mod automat de gestionare a temperaturii. Utilizatorului i
se permite în interfața web să introducă valoarea temperaturii la care dorește să ajungă
temperatura casei. Câmpul de intrare al acestei funcții este transpus în pagina we b prin:

<form action="phpscr ipts/tempset.php" method="POST">
<input id= "tempset" name="tempset" type= "text"/>
<input type="submit" value="Set"/>
</form>

Identificatorul id="tempset" reprezintă identificatorul câmpului de intrare destinat
valorii de temperatură. Acest c âmp de intrare este însoțit de un buton, numit Set, care la
acționar ea lui se va rula un script PHP phpscripts/tempset.php . Acest script va modifica
valoarea de pe pozi ția a treia din fișierul file.txt , valoare ce determină modul de lucru a
sistemului de încălzire/răcire. Modul automat se identifică prin valoarea “1”.

$file1 = fopen("file.txt","w") or die("gg"); //deschide fisier
$line1[3] = '1'; //modul automat

În urm a modificărilor apărute în fișierul file.txt , scriptul Python readFile.py va
gestiona aceste modificări. Porțiunea din scriptul realizat care gestionează acest sistem este
următoarea:

if int(s[3]) == 1: //verificare daca modul este automat
if int(tempset) < int(temp): //daca temperatura setata este
GPIO.output(23, 0) //mai mica decat temperatura
GPIO.output(29, 1) //data de sensor, atunci va fi
//pornit sistemul de racire
elif int(tempset) == int(temp): //in cazul in care
GPIO.output(23, 0) //valoarea este aceeasi
GPIO.output(29, 0) //se opresc ambele sisteme
else: //in cazul in care valoarea
GPIO.output(23, 1) //data de sensor este mai mare
GPIO.output(29, 0) //decat temperatura setata, se
//porneste sistemul de incal zire
else:
GPIO.output(23, int(s[4])) GPIO.output(29,
int(s[5]))

În această lucrare sistemu l de răcire este reprezentat de un ventilator care este acționat
atunci când temperatura trebuie scăzută, iar sistemul de căldură este reprezentat de un LED de
culoare roșie care ne semnalizează funcționarea acestei funcți i.

36

2.3.4 Centrul multimedia
Integrarea unui centru multimedia într-o platformă destinată unei ca se inteligente este
necesară și simplifică mult modu l de acces al fișierel or media. Platforma conține atât fișierele
video pe care utilizatorul le poa te accesa folosind orice tip de terminal (smartphone, tabletă, PC,
laptop, etc.) datorită funcț iilor media HTML5 utilizate în platformă, cât și control la distanț ă a
televizorului. (Figura 10) Datorită tag -ului <video> oferit de HTML5 este posibil ă integrarea
fișierelor video în pagina web . [28]

<video width="800px" preload="" controls=""><source
src="video/Wings uit 2014 [best moments] HD.mp4"
type="video/mp4"></video>

Figura 10. Centru multimedia

Pe sistemul de operare al plăcii de dezvoltare a fost integrat un program adițional numit
Kodi . Kodi este o aplicație centru multimedia , ce ne oferă posibilitatea de a a sculta muzică, a
vedea filme și a vedea poze din memoria mașinii sursă, prin conectarea acesteia la un telev izor
prin portul HDMI disponibil pe placa de dezvoltare. Pe lângă aceste funcții de bază, Kodi oferă și
funcție de control la distanță prin deschiderea comunicării pe un port de conexiune specificat de
utilizator, dar și funcția de AirPlay( utilizatorul poate vizualiza pe propriul televizor atâ t imagini,
muzică sau video de pe propriul telefon inteligent , cât și videoclipuri de pe difer ite site -uri sau
aplicații: YouTube, Vimeo, etc.). Instalarea programului s -a rea lizat cu ajutorul comenzii: apt-
get install kodi . [29]
Accesul la funcția de control la distanță se realizează pe portul de conexiune 8100.
2.3.5 Sistem audio
Această funcționalitate prezintă două funcții importante: control la distanță a melodiilor
prin intermediul unui terminal(telefon, tablet, etc.) și o funcție numită “follow me music”.
Principiul funcției “follow me music” este că atunci când utilizatorul trece dintr -o încăpere în alta
a casei, muzica va porni în înc ăperea în care se află utiliz atorul. Sistemul audio folosește
programul adițional VLC pentru a reda melodii, dar și pentru control la distanță a pr ogramului
folosind un terminal . VLC a fost integrat în sistemul de operare cu ajutorul comenzii: apt-get
install vlc . [30]
Funcția de cont rol la distanță este integrată pe platforma utilizatorului și poate fi folosită
de acesta pentru a manipula programul VLC . Pentru a oferi această funcție de control la distanță,
server -ul deschide un port de conexiune, și anume portul 8080.

37

Pentru realiza rea funcției “follow me music ” a fost nevoie de următoarele componente:
relee, senzori de prezență și cabluri audio.
Semnalul de pe ieșirea audio/video a plăcii de dezvoltare este aplicat releelor. Ieșirea
fiecărui releu este câte un conector mamă jack 3.5mm, l a care terminalele audio sunt conectate.
Senzorii sunt conectați la placa de dezvoltare ca și intrări pe pinii 35 și 37. Fiecărui senzor
îi corespunde câte un pin de ieșire: pinii 36 și 38. Acești pini de ieșire, 36 și 38, sunt utilizați cu
scopul de a c ontrola releele la care sunt conectate terminalele audio.

GPIO.setup(35, GPIO.IN)
GPIO.setup(37, GPIO.IN)
GPIO.setup(36, GPIO.OUT)
GPIO.setup(38, GPIO.OUT)

Atunci când senzor ul conectat la pinul 35 detectează mișcare se va activa pinul de ieșire
36 asociat senz orului ce a detectat mișcare. Liniile de cod care fac posibil acest lucru sunt
următoarele:

if GPIO.input(35):
GPIO.output(36, 0)

Odată cu această activare se va activa și releul asociat acestui pin de ieșire. Fiind activ
releul, va permite ca semnalul audio provenit din placa de dezvoltare să ajungă la terminalul
audio asociat releului. Analog se procedează și în cazul celui de -al doilea senzor de pe pinul 37 .

if GPIO.input(37 ):
GPIO.output(38 , 0)

38

39

3. Rezultate experimentale
În c adrul testării aplicației s -au realizat două tipuri de testare, o testare asupra
funcționalității aplicației și o testare asupra securității aplicației.
3.1 Interfața aplicației web și conectivitatea
În primul rând s -a testat accesul la aplicația web realizată. Accesul la aplicația web se
realizează prin conectarea la IP -ul serve r-ului care deține aplicația , printr -un browser. I P-ul
server -ului în momentul testării a fost 192.168.1.103 . (Figura 11) . Conexiunea la server
reprezintă o vulnerabilitate de securitate deoarece comunicația între client și server se face pe o
cone xiune de tip HTTP. Conexiunea HTTP este o conexiu ne nesigură deoarece parametrii sunt
transmiși în clar. Un atacator poate capta traficul de date dintre client și server și poate intra în
posesia credențialelelor utilizatorului (cont și parolă). Soluția prin care se poate evita un astfel de
atac este de a se face comunicarea între client și server pe o conexiune de tip HTTPS. Pentru a
configura o astfel de conexiune s -au realizat următoarele comenzi:

#apt-get install openssl ssl -cert
#openssl req $@ -new -x509 -days 365 -nodes –out
/etc/apache2/apache.pem -keyout /etc/apache2/apache.pem
#chmod 600 /etc/apache2/apache.pem
#a2enmod ssl
#/etc/init.d/apache2 restart

În fișierul /etc/apache2/sites -available/default s-a modificat VirtualHost
*:80 cu VirtualHost *:443 pentru a avea doar o conexiune de tip HTTPS și au fost
introduse liniile de configurare următoare : SSLEngine on și SSLCertificateFile
/etc/apache2/apache.pem . După toate aceste configurări toată conexiunea la aplicația web
va fi de tip HTTPS. ( Figura 12)

Figu ra 11. Accesul la aplicație
Dacă accesarea aplicației web s -a realizat cu succes, următoarea pagină web este pagina
de autentificare a utilizatorilor. (Figura 13 )

40

Figura 12. Conexiune HTTPS

Figura 13. Pagina de autentificare
Autentificarea se face cu un cont de utilizator admin și parola asociată utilizatorului
loading13 . Selectarea opțiunii Pastreaza -ma autentificat va genera utilizatorului un
cookie de sesiune care va expir a în 24 de ore de la momentul autentificării. (Figura 14 ) Cooki e-ul
de sesiune atribuit utilizatorului este:

Figura 14. Cookie de sesiune
În cazul în care utilizatorul nu selectează această opțiune, i se va atribui un token de
sesiune care va expira după 5 minute de inactivitate sau dacă utilizatorul părăsește aplicația web.
(Figura 15 )

Figura 15. Token de sesiune

41

Din punct de vedere al securității aplicației, funcția de autentificare prezintă vulnerabi lități
de securitate. Aceste vulnerabilități se pot exploata cu un atac de tip “SQL Injection” prin care
atacatorul poate evita autentificarea și poa te obține acces la aplicația web. Un astfel de atac se
poate realiza prin introducerea în câmpul de intrare a următoarei exp resii: ‘ OR ‘1’=’1 . În
momentul autentificării, un guery este trimis către baza de date și va fi interpretat. În cazul
introducerii expresiei ‘OR ‘1’=’1 în câmpul de intrare query -ul trimis către baza de date va fi
următorul: SELECT * FRO M users WHERE username = ‘ ‘ OR ‘1’=’1’ and
password = ‘’; . Acest query selectează informații din baza de date în funcție de câmpurile de
intrare. Dacă aceste câmpuri se potrivesc , baza de date va returna informațiile dorite. În urma
primiri acestui guery b aza de date va returna tot timpul informațiile asociate câmpurilor introduse
username = ‘ ‘ OR ‘1’=’1’ , deoarece expresia introdusă este tot timpul adevărată datorită
operației logice SAU introdusă în query. Această operație SAU are doi parametrii: username și
‘1’=’1’ , unde parametrul ‘1’=’1’ va fi tot timpul adevărat, deci baza de date va returna o
informație corectă și va permite evitarea autentificării a aplicației.
Pentru a evita un astfel de atac , construirea unui query trebuie făcută astfel: $con-
>prepare("SELECT * FROM login WHERE username = ? and password = ?") ,
unde metoda prepare() construiește un query parametrizat care mai târziu va fi interpretat de
baza de date. Semnele ? sunt puse deoarece introducerea datelor de intrare în query se va face
abia la apelarea metodei: bind_param('ss', $username, $password); , unde în locul
primului semn ? va fi introdusă variabila $username , iar în locul semnului al doilea ? va fi
introdusă variabila $password . Executarea acestui query construit se realizează la a pelarea
metodei: execute(); . În cazul în care prin executarea acestui query rezultatul va fi unul pozitiv,
datele introduse de utilizator se regăsesc în baza de date ceea ce rezultă că autentificarea a avut
loc cu succes. Prin construirea unui astfel de qu ery un atac de tip SQL Injection nu mai p oate
fi realizat.
3.2 Controlul dispozitivelor
În cazul în care autentificarea a fost realizată cu success, utilizatorul va fi redirecționat pe
pagina principală a aplicației web. Această pagină web permite utili zatorului controlul
dispozitivelor prezente în pagina web. (Figura 16 )

Figura 16. Controlul dispozitivelor
În colțul din dreapta sus există butoane prin care se realizează navigarea între toate
funcționalitățile oferite de apli cația web.

42

În mijlocul paginii web sunt prezente butoanele prin care utilizatorul poat e manipula
dispozitivele: lumină bucăt ărie, lumin ă sufragerie și închiderea/ deschiderea ușii. Culoarea verde a
butoanelor arată starea de inactivitate a dispozitivelor.
Atunci când utilizatorul va apăsa butonul, culoarea butonului se transformă în roșu, starea
activă a dispozitivului și va determina activarea releului asociat dispozitivului . În pagina web mai
exist ă două butoane specifice luminilor: Aprinde toate becurile și Stinge toate
becurile . La apăsarea butonului Aprinde toate becurile , releele asociate becurilor vor
deveni active și determină aprinderea becurilor, iar la apăsarea butonului Stinge toate
becurile releele asociate becurilor vor deveni inactive și deter mină stingerea becurilor.
Butoanele, stările butoanelor și rezultatul în urma acționării butoanelor prezentate mai
sus, sunt prezentate în Figura 17 .

Figura 17. Controlul dispozitivelor. I: aprinderea/stingerea luminii din bucă tărie; II:
aprinderea/stingerea luminii din sufragerie; III: aprinderea tuturor becurilor; IV: stingerea
tuturor becurilor

43

Același principiu se aplică și în cazul butonului destinat închiderii/deschiderii ușii, doar că
de data aceasta la acționarea butonu lui se va determina o mișcare de rotație a unui servomotor.
Astfel, pentru starea deschis , servomotorul va determina o mișcare de rotație la poziția inițială,
0°, iar pentru starea închis , servomotorul va determina o mișcare de rotație la poziția 180° față d e
poziția inițială . Aceste stări și rezultatul acționării butonului sunt prezentate în Figura 18 .

Figura 18. Închiderea/deschiderea ușii
3.3 Supraveghere video
Pentru a oferi funcționalitatea Supraveghere video s-au folosit d ouă camere web
conectate pe porturile USB disponibile pe placa de dezvoltare. (Figura 19 )

Figura 19. Conectarea camerelor web la Raspberry Pi B+

44

Cu ajutorul programului adițional Motion, imaginile preluate de camerele web pot fi
accesate pe porturi de conexiune deschise de pro gramul Motion pentru fiecare cameră web.
Astfel, pentru camera 1 este deschis portul de conexiune 8081, iar pentru camera 2 este deschis
portul de conexiune 8082.
În pagina web sunt integrate imaginile prel uate de camerele web prin liniile de cod:

<img src="&ip:8081 "></img> <!–camera 1 –>
<img src="&ip:8082 "></img> <!–camera 2 –>

Rezultatul obținut poate fi vizualit at în Figura 20 .

Figura 20. Supraveghere video
Din punct de vedere al securității , această funcție prezintă vulnerabilități de securitate
deoarece imaginille preluate de camerele web sunt transmise prin porturi de conexiune. Ast fel un
atacator poate scana server -ul și poate descoperi foarte ușor porturile pe care se transmit
imaginile. Odată cunoscut portul și IP -ul server -ului, atacatorul poate accesa imaginile preluate
de camerele web.
Pentru a securiza transmisia imaginilor s-a folosit următoarea metodă: r ularea
progra mulului Motion doar local pe mașina sursă , fără a deschide o conexiune înafara mașinii.
Imaginiile tra nsmise pe portul specificat, de data aceasta doar local, sunt direcționate într -un
director creat pe mașin ă, acestui director atribuindu -se o permisiune de acces.
Datorită permisiunii de acces, atacatorul nu poate vizualiza imaginile transmise numai
dacă cunoaște numele și parola utilizatorului căruia i -a fost destinată transmisia.
Această soluție a fost posibilă datorită APACHE2, u nde direcționarea traficului de pe
portul deschis către folder a fost făcută cu aj utorul configurărilor:

ProxyPass /webcam1 http s://localhost:8081
ProxyPassReverse /webcam1 https://localhost:8081
ProxyPass /webcam2 https://localhost:8082
ProxyPassReverse /webcam2 https://localhost:8082

, iar atribuirea permisiunii de acces directorului a fost făcută prin utilizarea e xtensiei htpasswd.

<Proxy *>
AuthType Basic
AuthName "Dev Server"
AuthUserFile "/var/www/admin/.htpasswd"
Require valid -user
</Proxy>

45

3.4 Controlul temperaturii
Această funționali tate permite utilizatorului să controleze temperatura casei atât manual,
cât și automat. Componentele utilizate pentru implementarea acestei funcționalități se găsesc în
Figura 21 .

Figura 21. Componente control temperatură
Vent ilatorul este utilizat pentru a simula un sistem de răcire, LED -ul este utilizat pentru a
semnaliza starea sistemului de încălzire, bateria de 9V este utilizată pentru a alimenta
ventilatorul, senzorul digital de temperatur ă DS18B20 este utilizat pentru a prelua informația
despre temperatur ă. Toate aceste componente sunt conectate și sunt controlate de Raspberry Pi
B+.
Interfața web destinată acestei funcționalități este prezentată în Figura 22 .

Figura 22. Controlul temperaturii
Butoanele Incalzire , Racire , Oprire sunt utilizate pentru modul manual. La
acționarea butonului Incalzire , LED -ul va semnaliza pornirea sistemului de răcire. Atunci
când butonul Racire va fi acționat, va determina pornirea ventilatorului și oprirea sistem ului de
încălzire . Butonul Oprire este destinat opriri tuturor sistemelor care sunt pornite. În Figura 23
se pot vizualiza efectele aduse în urma acționării butoanelor.

46

Figura 23. Controlul manual al temperaturii
Pentru modul a utomat componentele din interiorul paginii web utilizate sunt: butonul Set
și câmpul de intrare în care utilizatorul poate introduce o valoare a temperaturii la care sistemul
să ajungă automat.
Dacă utilizatorul setează o temperatură mai mică decât tempe ratura afișată de senzorul
digital de temperatură, atunci se va pune în funcțiune sistemul de răcire, în acest caz, ventilatorul.
Dacă utilizatorul setează o temperatură mai mare decât cea afișată de senzorul de temperatură,
atunci se va pune în funcțiune sistemul de î ncălzire, în acest caz se va semnaliza posibila
funcționare a sistemului de încălzire cu ajutorul unui LED. Atunci când temperatura afișată de
senzor este egală cu temperatura setată de utilizator, ambele sisteme vor fi închise. Modul
automat este prezentat în Figura 24 .

47

Figura 24. Controlul automat al temperaturii
3.5 Centrul multimedia
Centrul multimedia este o funționalitate care oferă utilizatorului posibilitatea de a viziona
fișiere video pe orice terminal ca re suportă accesul la paginile web, dar oferă și control la distanță
a televizorului pe care este integrat un centru multimedia. Interfața web a acestei funcționalități
este prezentată în Figura 25 .

Figura 25. Interfața web a fu ncționalității multimedia
Pentru ca utilizatorul să poată reda fișierele video în pagina web trebuie să acționeze unul
dintre fișierele listate în pagina web. Dacă utilizatorul acționeată unul din tre fișierele din pagina
web, acesta va fi redirecționat pe o altă pagină în care va fi redat fișierul video ales (Figura 26 ).

48

Figura 26. Redarea fișierelor video în pagina web

Dacă utilizatorul va a cționa elementul din pagina web căruia îi este asociat controlul la
distanță, utilizatorul va fi redirecționat pe o pagina web ce îndeplinește funcția de control la
distanță a centrului multimedia.
Centrul multimedia este integrat pe placa de dezvoltare și este conectată la televizor prin
portul HDMI disponibil pe placă. Integrarea centrului multim edia în sistemul de operare a fost
posibilă cu ajutorul programului adițional Kodi, care oferă posibilitatea de a reda fișiere audio,
fișiere video, poze și oferă multe alte funcționalități precum AirPlay(funcție care permite redarea
fișierelor multimedia de pe terminal pe televizor prin acest centru multimedia). În Figura 27 este
prezentat centrul multimedia Kodi care rulează pe televizor prin portul HDMI.

Figura 27. Kodi – Centru multimedia
Controlul la distanță se face printr -o extensie oferită de programul additional Kodi și se
poate accesa pe portul de conexiune 8100 , deschis de Kodi pentru a putea controla la distanță
centrul multimedia. Intefața controlului la distanță este prezentată în Figura 28 . [31]
Din punct de vedere a l securității, această funcționalitate prezintă vulnerabilități datorită
portului de conexiune deschis. Astfel atacatorul poate scana server -ul și poate descoperi foarte
ușor portul pe care se face comunicația. Kodi oferă posibilitatea de a seta permisiune de acces pe
portul deschis, autentificarea făcându -se cu cont de utilizator și parole.

49

Figura 28. Kodi – interfața funcției control la distanță
3.6 Sistem audio
Această funcțională prezintă două funcții importante: control la distanță a melodiilor prin
intermediul unui terminal(telefon, tablet, etc.) și o funcție numită “follow me music”. Principiul
funcției “follow me music” este că atunci când utilizatorul trece dintr -o încăpere în altă încăpere a
casei, muzica va porni în încaper ea în care se află utilizatorul. Sistemul audio folos ește programul
adițional VLC pentru a reda melodii, dar și pentru control la distanță a pr ogramului folosind un
terminal . Funcția de control la distanță este integrată pe platforma utilizatorului și poate f i folosită
de acesta pentru a manipula programul VLC (Figura 29 ). [32]

Figura 29. Control la distanță audio
Pentru a oferi această funcție de control la distanță , server -ul deschide un port de
conexiune, și anume portul 8080.

50

Din punct de vedere al securității, această funcționalitate prezintă vulnerabilități datorită
portului de conexiune deschis. Astfel atacatorul poate scana server -ul și poate descoperi foarte
ușor portul pe care se face comunicația. VLC oferă posibilitatea d e a seta permisiune de acces pe
portul deschis, autentificarea făcându -se cu cont de utilizator și parol ă.
Pentru realizarea funcției “follow me music ” a fost nevoie de următoarele componente:
relee, senzori de prezență și cabluri audio. Conectarea componentelo r se poate vizualiza în
Figura 30 .

Figura 30. Componentele utilizat în implementarea funcției “follow me music”. Componentele
din stânga imaginii: relee. Componentele din dreapta imaginii: senzori de prezență.
Astfel, semnalul de pe ieșirea audio/video a plăcii de dezvoltare este aplicat releelor.
Ieșirea fiecărui releu este câte un conector mamă jack 3.5mm, la care terminalele audio sunt
conectate.
Senzorii sunt conectați la placa de dezvoltare ca și intrări pe pinii 35 și 37 . Fiecărui senzor
îi corespunde câte un pin de ieșire: pinii 36 și 38. Acești pini de ieșire, 36 și 38, sunt utilizați cu
scopul de a controla releele la care sunt conectate terminalele audio.
Atunci când un senzor detectează mișcare , se va activa pinul de ieșire asociat senzorului
ce a detectat mișcare și odată cu aceast a se va activa și releul asociat acestui pin de ieșire. Fiind
activ releul, va permite ca semnalul audio provenit din placa de dezvoltare să ajungă la terminalul
audio asociat rele ului. Analog se procedează și în cazul celui de -al doilea senzor.

51

4. Concluzii
Datorită popularității Internetului și a ușurinței prin care oamenii obțin acces la Internet cu
ajutorul telefoanelor inteligente, tablete și alte dispozitive, s -a dezvoltat un concept numit
“Internet Of Things” prin care se încearcă interconectarea prin Internet a tuturor obiectelor
deținute de utilizatori. Datorită acestui concept, popularitatea caselor inteligente este în continuă
creștere.
În această lucrare este prezentată implementarea unui sistem pentru o casă inteligentă prin
care obiectele și dispozitivele din interiorul casei pot fi controla te prin Internet cu ajutorul unui
telefon inteligent. La baza acestui sistem a fost dezvoltată o aplicație web care ofe ră următoarele
funcții : Control al dispoziti velor (becuri, încuietori uși), Supraveghere video, Controlul
temperaturii, Centru multimedia și Sistem audio inteligent.
Costul implementării s -a ridicat la o sumă de 450 lei, o sumă foarte mică comparativ cu
cele existente pe piață, de exemplu sistemul dezvoltat de firma Loxone poate fi achiziționat la un
preț de aproximativ 2300 lei.
Costul scăzut al implementării reprezintă unul dintre cele mai importante avantaje a le
sistemului implementat în lucrare. Faptul că sistemul este unul Open -Source reprezintă un alt
avantaj d eoarece utilizatorului i se acordă libertatea de a modifica, crea funcții după bunul plac.
Un alt avantaj îl reprezintă și multitudinea de comp onente și programe software car e pot fi
utilizate pe ntru realizarea aplicațiilor, însă dezavantajul este că placa de dezvoltare nu dispune de
o putere mare de procesare a informației astfel complexitatea și numărul de aplicații care pot fi
executate sunt limitate. Acest dezavantaj se poate contracara prin i nvestirea în suport fizic pentru
a crește puterea de procesare și a numărului de porturilor fizice disponibile.
Aplicația web este securizată din punct de vedere software, pentru a stopa posibilile
atacuri provenite din Internet . Dacă un astfel de sistem nu este securizat și este compromis de
către persoane rău intenționate, daunele pot fi foarte mari și afectează direct utilizatorul
sistemului.
Vulnerabilitățile de securitate descoperite pe parcursul testării aplicației au fost
următoarele: pasibil la SQL Injection, expunerea datelor sensibile, p orturi de conexiune
nesecurizate și comunicarea nesigură a datelor.
Vulnerabilitatea la SQL Injecti on a fost rezolvată cu metoda “prepare statements” oferită
de limbajul de programare PHP. Folosirea acestei metode oferă sistemului imunitate împotriva
unui atac de tip “SQL Injection”.
Expunerea datelor sensibile a fost o vulnerabilitate de securitate deoarece informațiile
sensibile din baza de date erau stocate în clar. Pentru rezolvarea acestei vulnerabilități soluț ia a
fost criptarea informaț iilor stocate în baza de date cu ajutorul unei funcții criptografice de tip hash
numită MD5.
Porturile de conexiune ne securizate prezentau o altă vulnerabilitate deoarece un posibil
atacator putea obține acces pe portul de conexiune fără a fi restricționat. Soluția în c azul acestei
vulnerabilități a fost de a asocia fiecărui port de conexiune deschis o permisiune de acces.
Folosirea unei con exiuni de tip HTTP pentru trasmiterea datelor între client și server este
o metodă nesigură . Datele transmise pe o astfel de conexi une sunt trimise în clar și există
posibilitatea de a fi captate de un a tacator. Pentru a evita acest lucru, soluția implementată a fost
de a utiliza o conexiune de tip HTTPS, care stabilește o conexiune sigură datorită certificatului
SSL aplicat deasupr a protocolului HTTP.
Acest sistem pentru casă inteligentă poate fi îmbunătățit și poate fi extins pentru a oferi
mai multe funcții utilizatorului. O îmbunătățire ar putea fi realizarea unei aplicații native pentru
diferite sisteme de operare utilizate d e telefoanele inteligente, precum Apple iOS, Android,
Windows Mobile, prin care se poate crește rapiditatea și modul de operare a utilizatorului. Acest
sistem prezintă posibilitatea de a fi extins , prin care se pot obține mai multe porturi de acces și o
putere de procesare mai mare.

52

53

5. Bibliografie
[1] (2015) Nikola Tesla Remote Control – http://www.fiercetelecom.com/special -reports/nikola –
tesla-remote -control
[2] (2015) Integer Millenium House – http://www.e cbcs.org/docs/Annex_38_UK_Watford.pdf
[3] (2015) http://iotworldnews.com/2014/01/home -sweet -smart -home -keep -the-fire-burning/
[4] (2015) Smart Home System – http://www.loxone.com/enen/start.html
[5] (2015) Central Functions – http://www.loxone.com/enen/sma rt-home/more/central –
functions.html
[6] (2015) History of Raspberry Pi – https://www.raspberrypi.org/about/
[7] (2015) Pi Specs – https://www.adafruit.com/datasheets/pi -specs.pdf
[8] (2015) Operating system – https://www.raspberrypi.org/downloads/
[9] (2015) Pins diagram – http://www.rs –
online.com/designspark/electronics/eng/blog/introducing -the-raspberry -pi-b-plus
[10] (2015) Apache – http://httpd.apache.org/
[11] (2015) HTTP – http://searchwindevelopment.techtarget.com/definition/HTTP
[12] (2015) HTML – http://www.w3schools.com/html/html_intro.asp
[13] (2015) PHP – http://php.net/
[14] (2015) Python – https://www.python.org/
[15] (2015) MySQL – https://www.mysql.com/
[16] (2015) SQL Injection – https://www.owasp.org/index.php/Top_10_2013 -A1-Injection
[17] (2015) OWASP – https://www.owasp.org/index.php/Top_10_2013 -A2-
Broken_Authentication_and_Session_Management
[18] (2015) OWASP – https://www.owasp.org/index.php/Top_10_2013 -A3-Cross –
Site_Scripting_(XSS)
[19] (2015) OWASP – https://www.owasp.org/index.php/Top _10_2013 -A6-
Sensitive_Data_Exposure
[20] (2015) SSL Certificat – https://www.domreg.ro/ce -este-ssl.shtml
[21] (2015) Raspbian – https://www.raspberrypi.org/downloads/
[22] (2015) GPIO Library – https://pypi.python.org/pypi/RPi.GPIO
[23] (2015) Install Apac he2 – https://www.raspberrypi.org/documentation/remote -access/web –
server/apache.md
[24] (2015) Install MySQL – https://dev.mysql.com/doc/refman/5.1/en/linux -installation.html
[25] (2015) Servomotor PWM Control – http://razzpisampler.oreilly.com/ch05.html
[26] (2015) Motion – http://motion.sourceforge.net/
[27] (2015) DS18B20 – http://www.reuk.co.uk/DS18B20 -Temperature -Sensor -with-Raspberry –
Pi.htm
[28] (2015) HTML 5 – http://www.w3.org/TR/html5/
[29] (2015) Kodi – http://kodi.tv/
[30] (2015) VLC – http://www .videolan.org/vlc/
[31] (2015) Kodi Web Interface – http://kodi.wiki/view/Web_interface
[32] (2015) VLC Web Interface – https://wiki.videolan.org/Documentation:Modules/http_intf/

54

55

6. Anexe
Codul sursă
În acest capi tol este prezentat codul sursă al aplicației web.
Index.ph p
<?php
session_start(); //start sesiune
$ip = $_SERVER['SERVER_ADDR']; //atribuire IP variabilei $ip
if(isset($_COOKIE["cookie"])) //daca cookie a fost setat
{
$pieces = explode(",",$_COOKIE[ "cookie"]);
$role = $pieces[1]; //$role preia valoarea de pe pozitia a2a
//din cookie
}
if($_SESSION['role'] == "5" || $role == "5"){header("Location:
https://$ip/admin/home.php") ;} //limitarea accesului pe baza rolului
elseif($_SESSION['role'] == "10" || $role ==
"10"){header("Location: https://$ip/admin/home.php") ;} //limitarea
//pe baza rolului utilizatorului
?>
<!DOCTYPE html >
<html>
<title> SmartPI </title>
<link rel="shortcut icon" href="icons/pii.png"/>
<!–icoana siteului –>
<body>
<style>
body {
position: absolute;
top: 20%;
left: 40%;
margin-right: 50%;
background -color: #d0cbc8;
font-family: "T rebuchet MS", Helvetica, sans -serif;
opacity: 1
}
</style>
<!–caracteristici body –>
<div align="center"><?php echo "<img STYLE= \"WIDTH: 120px;
HEIGHT: 170px \" src=\"icons/piii.png \"/>"; ?></div>
<div align="center"><form action="phpscripts/login. php"
method="POST" autocomplete="on">
<!–afisare logo si crearea formului –>
<p>
<input id="username" name="username" required="required"
type="text" placeholder="Numele utilizatorului" STYLE="text –
align:center;color:#5E274F"/>
</p>
<!–campurile de intrare destinate autentificarii –>
<p>

56

<input id="password" name="password" required="required"
type="password" placeholder="Parola" STYLE="text –
align:center;color:#5E274F;"/>
</p>
<input type="checkbox" id="remember _me" name="remember_me"
checked value='1' " />
<label for="remember_me" STYLE="text –
align:center;color:#5E274F;font -size:15px">Pastreaza -ma
autentificat</label>
<p class="login button">
<input type="submit" value="Autentificare"
STYLE="color:#5E274F;"/>
<!–butonul de autentificare –>
</p>
</form>
</div>
</body>
</html>

Următorul fișier prezentat este script -ul folosit pentru autentificarea utilizatorilor, numit
login.php .

<?php
$ip = $_SERVER['SERVER_ADDR'];
$con=new mys qli("localhost","smartpi","lego","users"); //conectare baza
//de date
//verificarea conexiunii
if (mysqli_connect_errno()) {
printf("Connect failed: %s \n", mysqli_connect_error());
exit();
}
//atribuire parametrii primiti prin POST
$username = $_P OST['username'];
$password = md5($_POST['password']);
$remember_me = $_POST['remember_me'];
//verificare optiune Keep me logged in
if($remember_me == '1')
{
if(!empty($username) && !empty($password))
{
//construirea query -ului
if ($stmt = $con ->prepare ("SELECT * FROM login WHERE
username = ? and password = ?"))
{
//atasarea parametrilor query -ului
$stmt->bind_param('ss', $username, $password);
$stmt->execute(); //executare query
$stmt->bind_result($id, $user, $pass, $role);
//rezultatele in urma executarii
$stmt->fetch();
//setare cookie
setcookie('cookie',$user . "," .
$role,time()+3600*24,'/');

$stmt->close();
//inchidere conexiune
mysqli_close($con);
//redirect

57

header("Location: http s://$ip/admin/home.php");
}
else
{
$stmt->close();
mysqli_close($con);
header("Location: http s://$ip/index.php");
}
}
}

else
{
if(!empty($username) && !empty($password))
{
//construire query
if ($stmt = $con ->prepare("SELECT * FROM login WHERE
username = ? an d password = ?"))
{
//start sesiune
session_start();
//atasare parametrii la query
$stmt->bind_param('ss', $username, $password);
//executare query
$stmt->execute();
$stmt->bind_result($id, $user, $pass, $role);
/* fetch value */
$stmt->fetch();
//atribuire parametrii de sesiune
$_SESSION['username'] = $user;
$_SESSION['role'] = $role;

$stmt->close();
mysqli_close($con);
header("Location: http s://$ip/admin/home.php");
}
else
{
$stmt->close();
//inchidere conexiune
mysqli_close($con);
header("Location: http s://$ip/index.php");
}
}
}
?>
Home.php
<?php
//includerea fisierului php in pagina
include 'phpscripts/role.php';
?>
<!Doctype html>
<html>
<title> SmartPI </title>
<link rel="shortcut icon" href="icons/pii.png"/>

58

<head>
<style>
#topBar
{position:fixed;top:0;left:0;width:100%;height:75px;opacity:0.95;backgr
ound-color:#5E274F;}
</style>
</head>
<body>

<style>
body {
background -color: #d0cbc8;
font-family: "Trebuchet MS", Helvetica, sans -serif;
opacity: 1
}
</style>
<div id="topBar"></div>

<div>

<!–construirea butoanelor de navigare ; butonul control –>

<a href="home.php"><figure STYLE="position : absolute; opacity:
1; TOP: -12px; LEFT:10%; text -align: center; WIDTH: 80px; HEIGHT:
65px"><img STYLE="WIDTH: 50px; HEIGHT: 70px" src="icons/pi.png"/>
</figure></a>
<a title="home" href="home.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 900px; text -align: center;
WIDTH: 60px; HEIGHT: 50px"><img STYLE="WIDTH: 45px; HEIGHT: 45px"
src="icons/workspace -switcher -right-bottom.png" alt="Home"/>
<figcaption STYLE="font -weight: bold;"> <font color="#ff6600"
size="2px">control</font> </fi gcaption>
</figure></a>

<!–construirea butoanelor de navigare ; butonul supraveghere video –>

<a title="security" href="security.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 980px; text -align: center;
WIDTH: 60px; HEIGHT: 50px "><img STYLE="WIDTH: 45px; HEIGHT: 45px"
src="icons/accessories -camera.png" alt="Security"/>
<figcaption STYLE="font -weight: bold;"> <font color="white"
size="2px">securitate</font> </figcaption>
</figure></a>

<!–construirea butoanelor de navigare ; butonul control al temp –>

<a title="climate" href="climate.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 1060px; text -align:
center;WIDTH: 60px; HEIGHT: 50px "><img STYLE="WIDTH: 45px; HEIGHT:
45px" src="icons/psensor.png" alt="Clima te"/>
<figcaption STYLE="font -weight: bold;"> <font color="white"
size="2px">temperatura</font> </figcaption>
</figure></a>
<!–construirea butoanelor de navigare ; buton sistem audio –>
<a title="audio" href="audio.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 1140px; text -align: center;

59

WIDTH: 60px; HEIGHT: 50px"><img STYLE="WIDTH: 45px; HEIGHT: 45px"
src="icons/appicns_iTunes.png" alt="Audio"/>
<figcaption STYLE="font -weight: bold;"> <font color="white"
size="2px">audio</font> </ figcaption>
</figure></a>
<!–construirea butoanelor de navigare ; buton media center –>
<a title="video" href="video.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 1220px; text -align:
center;WIDTH: 60px; HEIGHT: 50px "><img STYLE=" WIDTH: 45px; HEIGHT:
45px" src="icons/video.png" alt="Video"/>
<figcaption STYLE="font -weight: bold;"> <font color="white"
size="2px">video</font> </figcaption>
</figure></a>
</div>

<?php include 'phpscripts/buttons.php'; //includerea fisierului
buttons. php?>
<div>

<!–construirea butoanelor de control al dispozitivelor si atribuire
unei actiuni butoanelor –><!–lumina bucatarie –>

<figure STYLE="position: absolute; opacity: 1; TOP: 188px; LEFT:
250px; text -align: center; WIDTH: 70px; HEIGHT: 60px "> <img
STYLE="WIDTH: 40px; HEIGHT: 40px" src="icons/redshift.png"
alt="Light"/>
<figcaption STYLE="font -weight: bold;"> <font color="#5E274F"
size="2px">Lumina bucatarie</font> </figcaption>
</figure>

<!–construirea butoanelor de control al dispozitivelor si atribuire
unei actiuni butoanelor –><!–lumina sufragerie –>

</div>
<form action="phpscripts/logout.php" method="POST"
autocomplete="off"><input type="submit" name="Logout" value="Logout"
STYLE="position:absolute; top: 360px;left: 90%;color:#5E274F;"/>
</form>
<div>
<figure STYLE="position: absolute; opacity: 1; TOP: 288px;
LEFT: 250px; text -align: center; WIDTH: 70px; HEIGHT: 60px "><img
STYLE="WIDTH: 40px; HEIGHT: 40px" src="icons/redshift.png"
alt="Light"/>
<figcaption STYLE="font -weight: b old;"> <font color="#5E274F"
size="2px">Lumina sufragerie</font> </figcaption>
</figure>
</div>

<!–construirea butoanelor de control al dispozitivelor si atribuire
unei actiuni butoanelor –><!–stinge toate becurile –>

<div STYLE="position: absolute; top:430px; left:250px">
<form action="phpscripts/file.php" method="POST"><input
name="lightonall" type="submit" value="Aprinde toate becurile"
STYLE="color:#5E274F;"/>
<form action="phpscripts/file.php" method="POST"><input
name="lightoffall" type="subm it" value="Stinge toate becurile"
STYLE="color:#5E274F;"/>

60

</div>

<!–construirea butoanelor de control al dispozitivelor si atribuire
unei actiuni butoanelor –><!–buton incuietoare –>

<div>
<figure STYLE="position: absolute; opacity: 1; TOP: 188px; LE FT:
750px; text -align: center ;WIDTH: 70px; HEIGHT: 60px "><img
STYLE="WIDTH: 40px; HEIGHT: 40px" src="icons/stock_keyring.png"
alt="Light"/>
<figcaption STYLE="font -weight: bold;"> <font color="#5E274F"
size="2px">Usa</font> </figcaption>
</figure>
</div>
</body>
</html>
Role.php
<?php
session_start();
$ip = $_SERVER['SERVER_ADDR']; //preia IP
//daca este setat cookie
if(isset($_COOKIE["cookie"]))
{
$pieces = explode(",",$_COOKIE["cookie"]);
$role = $pieces[1]; //atribuire ro l din cookie
}
//comparare rol acces
if($_SESSION['role'] == "5" || $role == "5"){}
elseif($_SESSION['role'] == "10" || $role == "10"){}
else
{
//redirect
header("Location: http s://$ip/index.php");
}
?>
File.php
<?php
$ip = $_SERVER['SERVER_ADDR']; //preia IP
$file=fopen("file.txt","r") or die("gg"); //deschide fisier
$line=fgets($file); //preia continutul fisierului
fclose($file); //inchide fisier
$file=fo pen("file.txt","w") or die("gg ");
if (isset($_POST["ligh ton1_x"]) && $line[0] == '1')
{
//daca a fost actionat butonul primit ca parametru din post
//becul 1
$line[0] = '0'; //modificare valorii de pe pozitia 0 din $line
fwrite($file,$line); //scrie $line in fisier
fclose($file); //inchide
header("Location: ht tps://$ip/admin/home.php");
exit;
}
elseif (isset($_POST["lighton1_x"]) && $line[0] == '0')

61

{
//becul 1

$line[0] = '1'; //modificarea valorii de pe pozitia 0 din $line
fwrite($file,$line); //scrie in fisier
fclose($file); //inchide fisier
header("Location: http s://$ip/admin/home.php");
exit;
}
if (isset($_POST["lighton2_x"]) && $line[1] == '1')
{
//becul 2
$line[1] = '0'; //modificarea valorii de pe pozitia 1 din $line
fwrite($file,$line);
fclose($file);
header("Location: https://$ip/admin/home.php");
exit;
}
elseif (isset($_POST["lighton2_x"]) && $line[1] == '0')
{
//becul 2
$line[1] = '1'; //modificarea valorii de pe pozitia 1 din $line
fwrite($file,$line);
fclose($file);
header("Location: http s://$ip/admin/home.php");
exit;
}
if (isset($_POST["lightonall"]))
{
//toate becurile
$line[0] = '1'; //modificarea valorii de pe pozitia 0 din $line
$line[1] = '1'; //modificarea valorii de pe pozitia 1 din $line
fwrite($file,$line);
fclose($file);
header("Location: http s://$ip/admin/home.php");
exit;
}
if (isset($_POST["lightoffall"]))
{
//toate becurile
$line[0] = '0'; //modificarea valorii de pe pozitia 0 din $line
$line[1] = '0'; //modificarea valorii de pe pozitia 1 din $line
fwrite($file,$line);
fclose($file);
header("Location: http s://$ip/admin/home.php");
exit;
}

if (isset($_POST["lockon_x"]) && $line[2] == '1')
{
//inchuietoare usa
$line[2] = '0'; //modificarea valorii de pe pozitia 2 din $lin e
fwrite($file,$line);
fclose($file);
header("Location: http s://$ip/admin/home.php");
exit;
}
if (isset($_POST["lockon_x"]) && $line[2] == '0')

62

{
//incuietoare usa
$line[2] = '1'; //modificarea valorii de pe pozitia 2 din $line
fwrite($file,$line);
fclose($file);
header("Location: http s://$ip/admin/home.php");
exit;
}

if (isset($_POST["Heat"]))
{
//sistem de incalzire
$line[3] = '0';
$line[4] = '1';
$line[5] = '0';
fwrite($file,$line);
fclose($file);
header("Location: http s://$ip/admin/climate.php");
exit;
}
if (isset($_POST["Cool"]))
{
//sistem de racire
$line[3] = '0';
$line[4] = '0';
$line[5] = '1';
fwrite($file,$line);
fclose($file);
header("Location: http s://$ip/admin/climate.php");
exit;
}
if (isset($_POST["Poweroff"]))
{
//buton oprire sisteme
$line[3] = '0';
$line[4] = '0';
$line[5] = '0';
fwrite($file,$line);
fclose($file);
header("Location: http s://$ip/admin/climate.php");
exit;
}
fclose($file);
exit;
?>
Security.php
<?php
include 'phpscripts/role.php'; //include fisier
?>
<!Doctype html>
<html>
<title> SmartPI </title>
<link rel="shortcut icon" href="icons/pii.png"/>
<head>
<style>

63

#topBar
{position:fixed;top:0;left: 0;width:100%;height:75px;opacity:0.95;backgr
ound-color:#5E274F;}
</style>
</head>
<body>
<style>
body {
background -color: #d0cbc8;
font-family: "Trebuchet MS", Helvetica, sans -serif;
opacity: 1
}
</style>
<div id="topB ar"></div>

<div>
<a href="home.php"><figure STYLE="position: absolute; opacity:
1; TOP: -12px; LEFT:10%; text -align: center; WIDTH: 80px; HEIGHT:
65px"><img STYLE="WIDTH: 50px; HEIGHT: 70px" src="icons/pi.png"/>
</figure></a>
<a title="home" href="ho me.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 900px; text -align: center;
WIDTH: 60px; HEIGHT: 50px"><img STYLE="WIDTH: 45px; HEIGHT: 45px"
src="icons/workspace -switcher -right-bottom.png" alt="Home"/>
<figcaption STYLE="font -weight: bold;"> <font color="white"
size="2px">control</font> </figcaption>
</figure></a>

<a title="security" href="security.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 980px; text -align: center;
WIDTH: 60px; HEIGHT: 50px "><img STY LE="WIDTH: 45px; HEIGHT: 45px"
src="icons/accessories -camera.png" alt="Security"/>
<figcaption STYLE="font -weight: bold;"> <font color="#ff6600"
size="2px">securitare</font> </figcaption>
</figure></a>

<a title="climate" href="climate.php"><figure STYLE= "position:
absolute; opacity: 1; TOP: -12px; LEFT: 1060px; text -align:
center;WIDTH: 60px; HEIGHT: 50px "><img STYLE="WIDTH: 45px; HEIGHT:
45px" src="icons/psensor.png" alt="Climate"/>
<figcaption STYLE="font -weight: bold;"> <font color="white"
size="2px" >temperatura</font> </figcaption>
</figure></a>

<a title="audio" href="audio.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 1140px; text -align: center;
WIDTH: 60px; HEIGHT: 50px"><img STYLE="WIDTH: 45px; HEIGHT: 45px"
src="icons/ appicns_iTunes.png" alt="Audio"/>
<figcaption STYLE="font -weight: bold;"> <font color="white"
size="2px">audio</font> </figcaption>
</figure></a>

<a title="video" href="video.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 1220px; text-align:
center;WIDTH: 60px; HEIGHT: 50px "><img STYLE="WIDTH: 45px; HEIGHT:
45px" src="icons/video.png" alt="Video"/>
<figcaption STYLE="font -weight: bold;"> <font color="white"
size="2px">video</font> </figcaption>

64

</figure></a>

</div>
<?php
$ip=$_SERVER['SERVER_ADDR'];
echo "<div><img STYLE= \" position: absolute; opacity: 1; TOP: 150px;
LEFT: 170px; WIDTH: 500px; HEIGHT: 400px \"
src=\"../webcam1/ \"></img></div> ." ;
?>
<?php
$ip=$_SERVER['SERVER_ADDR'];
echo "<div><img STYLE= \" position: absolute; opacity: 1; TOP: 150px;
LEFT: 770px; WIDTH: 500px; HEIGHT: 400px \"
src=\"../webcam2/ \"></img></div> ." ;
?>
</body>
</html>
Climate.php
<?php
include 'phpscripts/role.php';
?>
<!Doctype html>
<html>
<title> SmartPI </title>
<link rel="s hortcut icon" href="icons/pii.png"/>
<head>
<style>
#topBar
{position:fixed;top:0;left:0;width:100%;height:75px;opacity:0.95;backgr
ound-color:#5E274F;}
</style>
</head>
<body>
<style>
body {
background -color: #d0cbc8;
font-family: "Trebuchet MS", Helvetica, sans -serif;
opacity: 1
}
</style>
<div id="topBar"></div>

<div>
<a href="home.php"><figure STYLE="position: absolute; opacity:
1; TOP: -12px; LEFT:10%; text -align: center; WIDTH: 80px; HEIGHT:
65px"><img STYLE="WIDTH: 50px; HEIGHT: 70px" src="icons/pi.png"/>
</figure></a>
<a title="home" href="home.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 900px; text -align: center;
WIDTH: 60px; HEIGHT: 50px"><img STYLE="WIDT H: 45px; HEIGHT: 45px"
src="icons/workspace -switcher -right-bottom.png" alt="Home"/>
<figcaption STYLE="font -weight: bold;"> <font color="white"
size="2px">control</font> </figcaption>
</figure></a>

65

<a title="security" href="security.php"><figure STYLE="p osition:
absolute; opacity: 1; TOP: -12px; LEFT: 980px; text -align: center;
WIDTH: 60px; HEIGHT: 50px "><img STYLE="WIDTH: 45px; HEIGHT: 45px"
src="icons/accessories -camera.png" alt="Security"/>
<figcaption STYLE="font -weight: bold;"> <font color="white"
size="2px">securitate</font> </figcaption>
</figure></a>

<a title="climate" href="climate.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 1060px; text -align:
center;WIDTH: 60px; HEIGHT: 50px "><img STYLE="WIDTH: 45px; HEIGHT:
45px" src="icons/psensor.png" alt="Climate"/>
<figcaption STYLE="font -weight: bold;"> <font color="#ff6600"
size="2px">temperatura</font> </figcaption>
</figure></a>

<a title="audio" href="audio.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 1140px; text -align: center;
WIDTH: 60px; HEIGHT: 50px"><img STYLE="WIDTH: 45px; HEIGHT: 45px"
src="icons/appicns_iTunes.png" alt="Audio"/>
<figcaption STYLE="font -weight: bold;"> <font color="white"
size="2px">audio</font> </figcaption>
</figure></ a>

<a title="video" href="video.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 1220px; text -align:
center;WIDTH: 60px; HEIGHT: 50px "><img STYLE="WIDTH: 45px; HEIGHT:
45px" src="icons/video.png" alt="Video"/>
<figcaption STYLE="f ont-weight: bold;"> <font color="white"
size="2px">video</font> </figcaption>
</figure></a>

</div>

<div>
<form action="phpscripts/tempset.php" method="POST" autocomplete="off">
<p>
<?php
//deschide fisier
$file=fopen("phpscripts/temp.txt","r") o r die("gg");
//preia continutul fisierului
$line=fgets($file);
//deschide fisier
$file1=fopen("phpscripts/tempa.txt","r") or die("gg");
$line1 = intval(floatval(fgets($file1)));
//afisare in pagina web a temperaturii din fisierul tempa.txt
echo "<p STYLE= \"position:absolute;
top:100px;left:300px; color:#5E274F; font –
size:80px \">$line1&#8451</p>";
//afisare in pagina web a temperaturii din fisierul temp.txt
echo "<input id= \"tempset \" name=\"tempset \"
type=\"text\" placeholder= \"$line&#8451 \" STYLE=\"position:absolute;
top: 200px;left:550px; width: 57px;text –
align:center;color:#5E274F; \"/>";
fclose($file);
?>
</p>

66

<p class="tempset button">
<input type="submit" value="Seteaza temperatura"
STYLE="position:absolute; top: 230px;left: 550px;color:#5E274F;"/>
</p>
</form>
<!–construirea butoanelor si atribuirea actiunilor fiecarui buton –>
<form action="phpscripts/file.php" method="POST"
autocomplete="off"><input type="submit" name="Heat" value="Incalzire"
STYLE="posi tion:absolute; top: 200px;left: 750px;color:#5E274F;"/>
</form>
<form action="phpscripts/file.php" method="POST"
autocomplete="off"><input type="submit" name="Cool" value="Racire"
STYLE="position:absolute; top: 230px;left: 750px;color:#5E274F;"/>
</form>
<form action="phpscripts/file.php" method="POST"
autocomplete="off"><input type="submit" name="Poweroff" value="Oprire"
STYLE="position:absolute; top: 260px;left: 750px;color:#5E274F;"/>
</form>
</div>

</body>
</html>
Tempset.php
<?php
$ip = $_SERVER['SERV ER_ADDR'];
if($_POST["tempset"] != "")
{
$file = fopen("temp.txt","w") or die("gg");
$line = $_POST["tempset"]; //valoarea temperaturii setata din POST
fwrite($file,$line); //se scrie in fisier
fclose($file);
}
$file1 = fopen("file.txt","r") or die("gg");
$line1 = fgets($file1);
fclose($file1);
$file1 = fopen("file.txt","w") or die("gg");
$line1[3] = '1'; //se scriu in fisier starile componentelor, “1” automat
$line1[4] = '0'; //”0” => inactiv
$line1[5] = '0'; //”0” => inactiv
fwrite($file1,$line1);
fclose($file 1);
header("Location: http s://$ip/admin/climate.php");
exit;
?>
Video.php
<?php
include 'phpscripts/role.php';
?>
<!Doctype html>
<html>
<title> SmartPI </title>
<link rel="shortcut icon" href="icons/pii.png"/>

67

<head>
<style>
#topBar
{position:fixed;top:0;left:0;width:100%;height:75px;opacity:0.95;backgr
ound-color:#5E274F;}
</style>
</head>
<body>
<style>
body {
background -color: #d0cbc8;
font-family: "Trebuchet MS", Helvetica, sans -serif;
opacity: 1
}
form input[type=submit] {
background : url("icons/video2.png") no -repeat center
center;
width : 100px;
height :90px;
border : none;
color : transparent;
}
</style>
<div id="topBar"></div>

<div>
<a href="home.php"><figure STYLE="position: absolute; opacity:
1; TOP: -12px; LEFT:10%; text -align: center; WIDTH: 80px; HEIGHT:
65px"><img STYLE="WIDTH: 50px; HEIGHT: 70px" src="icons/pi.png"/>
</figure></a>
<a title="home" href="home.php"><figure STYLE= "position:
absolute; opacity: 1; TOP: -12px; LEFT: 900px; text -align: center;
WIDTH: 60px; HEIGHT: 50px"><img STYLE="WIDTH: 45px; HEIGHT: 45px"
src="icons/workspace -switcher -right-bottom.png" alt="Home"/>
<figcaption STYLE="font -weight: bold;"> <font color ="white"
size="2px">control</font> </figcaption>
</figure></a>

<a title="Security" href="security.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 980px; text -align: center;
WIDTH: 60px; HEIGHT: 50px "><img STYLE="WIDTH: 45px; HEIGH T: 45px"
src="icons/accessories -camera.png" alt="Security"/>
<figcaption STYLE="font -weight: bold;"> <font color="white"
size="2px">securitate</font> </figcaption>
</figure></a>

<a title="climate" href="climate.php"><figure STYLE="position:
absolute; opa city: 1; TOP: -12px; LEFT: 1060px; text -align:
center;WIDTH: 60px; HEIGHT: 50px "><img STYLE="WIDTH: 45px; HEIGHT:
45px" src="icons/psensor.png" alt="Climate"/>
<figcaption STYLE="font -weight: bold;"> <font color="white"
size="2px">temperatura</font> </fi gcaption>
</figure></a>

<a title="audio" href="audio.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 1140px; text -align: center;
WIDTH: 60px; HEIGHT: 50px"><img STYLE="WIDTH: 45px; HEIGHT: 45px"
src="icons/appicns_iTunes.png" alt= "Audio"/>

68

<figcaption STYLE="font -weight: bold;"> <font color="white"
size="2px">audio</font> </figcaption>
</figure></a>

<a title="video" href="video.php"><figure STYLE="position:
absolute; opacity: 1; TOP: -12px; LEFT: 1220px; text -align:
center;WIDT H: 60px; HEIGHT: 50px "><img STYLE="WIDTH: 45px; HEIGHT:
45px" src="icons/video.png" alt="Video"/>
<figcaption STYLE="font -weight: bold;"> <font color="#ff6600"
size="2px">video</font> </figcaption>
</figure></a>

</div>
<p STYLE="position: absolute; top: 150px; left: 22%;font -weight:
bold"><font color="#5E274F" size="4px">Vizualizeaza fisierele video in
pagina</font>
<?php
$number = 0;
$x= 200;
$position = $x . "px";
if ($handle = opendir('./video')) {
while (false !== ($entry = readdir($handle))) {

if ($entry != "." && $entry != "..") {
$number += 1;
echo "<div STYLE= \"position:absolute;text -align:
center;LEFT: 20%; TOP: $position \">";
echo "<form action= \"playvideo.php \" method= \"POST\"><figure
STYLE=\"opacity: 1; text -align: center; WIDTH: 300px; HEIGHT:
50px\"><input type= \"submit\" STYLE= \"WIDTH: 90px; HEIGHT: 80px \"
src=\"icons/video.png \" name=\"playvideo \" value= \"$entry\"/>
<figcaption STYLE= \"font-weight: bold; \"> <font color= \"#5E274F \"
size=\"2px\">$entry</font> </figcaption>
</figure></form>";
echo "</div>";
$x += 120;
$position = $x . "px";
}
}
$number = 0;
$position = "";
$x = 120;
closedir($handle);
}
?>
<?php
echo "<a title= \"TV\"
href=\"https://$ip:8100/addons/webinterface.chorus/ \"><figure
STYLE=\"position: absolute; opacity: 1; TOP: 150px; LEFT: 750px; text –
align: center; WIDTH: 300px; HEIGHT: 50px \"><img STYLE= \"WIDTH: 300px;
HEIGHT: 300px \" src=\"icons/tv.png \" alt=\"Home\"/>
<figcaption STYLE= \"font-weight: bold; \"><font color= \"#5E274F \"
size=\"4px\">Control la distanta TV</font> </figcaption></figure></a>";
?>
</body>
</html>

69

ReadFile.py
import RPi.GPIO as GPIO //importare librarie RPi.GPIO
import time //importare librarie time

GPIO.setmode(GPIO.BOARD) //setarea placii
GPIO.setup(7, GPIO.O UT) //setarea pinului 7 ca pin de iesire
GPIO.setup(11, GPIO.OUT) // setarea pinului 11 ca pin de iesire
GPIO.setup(13, GPIO.OUT) //setarea pinului 13 ca pin de iesire
GPIO.setup(15, GPIO.OUT) // setarea pinului 15 ca pin de iesire
p = GPIO.PWM(15,50) //setare caracteristica semnal PWM pinului 15
GPIO.setup(23, GPIO.OUT) //setare pini 23 si 29 ca pini de iesire
GPIO.setup(29, GPIO.OUT)
try:
//exceptie
while True:
//bucla infinita
f = open('../phpscripts/file.txt', 'r+')
//deschide fisier
s = f.read()
//s preia continutul fisierului
f1 = open('../phpscripts/temp.txt', 'r+')
tempset = float(f1.read())
//tempest este valoarea temperaturii setate preluata din temp.txt
f2 = open('../phpscripts/tempa.txt', 'r+')
temp = float(f2.read())
//temp este val oarea temperaturii setate preluata din tempa.txt
GPIO.output(11, int(s[0]))
//pinul 11 ia valoarea primei pozitii din variabila s
GPIO.output(13, int(s[1]))
//pinul 13 ia valoarea celei de -a doua pozitie din variabila s
if int(s[2]) == 1:
p.Change DutyCycle(12.5)
elif int(s[2]) == 0:
p.ChangeDutyCycle(2.5)
if int(s[3]) == 1:
//daca temperatura setata este mai mica decat valoarea data de senzor
if int(tempset) < int(temp):
GPIO.output(23, 0)
//pinul 23 devine inactiv iar pinu 29 devine activ
GPIO.output(29, 1)
elif int(tempset) == int(temp):
GPIO.output(23, 0) //inactiv
GPIO.output(29, 0) //inactiv
else:
GPIO.output(23, 1) //activ
GPIO.output(29, 0) //inactiv
else:
GPIO.output(23, int(s[4]))
GPIO.output(29, int(s[5]))
f.close()
f1.close()
f2.close()
time.sleep(2)
except KeyboardInterrupt: //intrerupere de la tastatura
pass

GPIO.cleanup() //eliberare pini de iesire

70

ReadTemp.py
import os
import time
os.system('modprobe w1 -gpio')//executare comenzi in li nia de comanda
os.system('modprobe w1 -therm')//executare comenzi in linia de comanda
temp_sensor = '/sys/bus/w1/devices/28 -000006080f5d/w1_slave'
/*calea absoluta unde se afla valoarea senzorului*/
tempa = '/var/ www/admin/phpscripts/tempa.txt'
/*calea abso luta unde se afla valoarea temp setate*/
while True:
f = open(temp_sensor,'r')
text = f.read()
f.close()
//impartirea textului in cuvinte
data = text.split(" \n")[1].split(" ")[9]
//preluarea valorii temperaturii din fisier
temperature = float(data[2:] )
temperature = temperature /1000
f1 = open(tempa,'w')
f1.write(str(temperature))
f1.close()
time.sleep(1)
Pir.py
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD) //setare placa
GPIO.setup(35, GPIO.IN) //setare pini 35 si 37 pini int rare
GPIO.setup(37, GPIO.IN)
GPIO.setup(36, GPIO.OUT) //setare pini 36 si 38 pini iesire
GPIO.setup(38, GPIO.OUT)
try:
//exceptie
time.sleep(2) //asteptare 2 secunde
while True: //bucla infinita
if GPIO.input(35): //daca pinul 35 este activ
GPIO.output(38, 1) //devine activ
time.sleep(1)
GPIO.output(36, 0) //devine inactiv
elif GPIO.input(37): //daca pinul 37 este activ
GPIO.output(36, 1) //devine activ
time.sleep(1)
GPIO.output(38, 0 )//devine inactiv
time.sleep(1)
except KeyboardInterrupt:
GPIO.cleanup()

71

72

7. CV Europass
Curriculum vitae

Informații personale
Nume / Prenume Oniga Bogdan -Vasile

Adresă(e) Tudor Vladimirescu, nr.12, Sancel, 517670, ROMANIA
Telefon(oane) 0747679754
E-mail(uri) bogdan.oniga@gmail.com
Naționalitate( -tăți) romana
Data nașterii 09 01 1993
Sex masculin

Locul de muncă vizat /
Domeniul ocupațional

Graduate Program me – Security

Educație, titular disciplina Fiabilitate și mentenabilitate

Experiența profesională

Perioada 18 mai 2015 – prezent
Funcția sau postul ocupat Graduate Security Application
Activități și responsabilități
principale Studierea vulnera bilităților aplicațiilor
Numele și adresa angajatorului SC Betfair Development România SRL Cluj , Blvd. 21 Decembrie 1989,
no. 77 , jud. Cluj
Tipul activității sau sectorul de
activitate Penetration testing

Perioada
02 iulie 2013 – 02 august 2013
Funcț ia sau postul ocupat Practicant
Activități și responsabilități
principale Stagiu de practica în domeniul Automatizarilor. Scopul stagiului de practica a
fost
în a înțelege și a realiza proiecte cu ajutorul automatelor PLC.
Numele și adresa angajatorului SC Bosch Rexroth SA Blaj , Str. Aurel Vlaicu, nr. 2 , jud. Alba.

Perioada
21 iulie 2014 – 25 august 2014
Funcția sau postul ocupat Practicant
Activități și responsabilități
principale Stagiu de practica în domeniul Automatizarilor. Scopul stagiului de practica a
fost proiectarea și semiautomatizarea unei prese cu ajutorul unui PLC.
Numele și adresa angajatorului SC Bosch Rexroth SA Blaj , Str. Aurel Vlaicu, nr. 2 , jud. Alba.

73

Tipul activității sau sectorul de
activitate
Automatizare circuite cu PLC.

Educație și formare

Perioada 01 octombrie 2011 – prezent
Calificarea / diploma obținută Student – anul IV.
Disciplinele principale studiate /
competențe profesionale dobândite Ingineria Programării (Java); Programarea calculatoarelor (C/C++);
Protocoale de Internet; Sisteme de comutatie și rutare; Retele de calculatoare;
Comunicatii Mobile; MicroProcesoare (limbaj de asamblare); Telefonie;
Radiocomunicatii; Tehnici de modulatii; Televiziune; Sisteme
Optoelectronice; Prelucrarea numerica a semnale lor; Prelucrarea numerica a
imaginilor.
Numele și tipul instituției de
învățământ / furnizorului de formare Universitatea Tehnica din Cluj -Napoca; Facultatea de Electronica,
Telecomunicații și
Tehnologia Inormatiei (specializare: Tehnologii și Sisteme de
Telecomunicații).

Perioada 15 septembrie 2007 – 15 iunie 2011
Calificarea / diploma obținută Absolvent nivel liceal.
Disciplinele principale studiate /
competențe profesionale dobândite
Matematica -Informatica.
Numele și tipul instituției de
învățămâ nt / furnizorului de formare Colegiul Național „I.M. Clain” Blaj.

Competențe și abilități sociale Integrare socială bună, spirit de echipa dezvoltat, creativitate.

r
Competențe și aptitudini de
utilizare a calculatorului Java, C/C++, HTML, PHP, Python, MySQL, Burp Suite, ZAP, Android,
Asterisk, Assembly Language, SIMATIC, OrCAD, Pascal .

Cunoștințe de utilizare al sistemelor de operare:
LINUX (Ubuntu, CentOS, Raspbian, Xorcom , Kali )
Windows (98/ME/2000/XP/Vi sta/7)

Similar Posts