Prof.univ.dr.ing. Elvira Popescu Iulie 2019 CRAIOVA ii UNIVERSITATEA DIN CRAIOVA FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI ELECTRONICĂ DEPARTAMENTUL… [624137]

UNIVERSITATEA DIN CRAIOVA
FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI
ELECTRONICĂ

DEPARTAMENTUL DE CALCULATOARE ȘI TEHNOLOGIA
INFORMAȚIEI

PROIECT DE DIPLOMĂ
Ionuț -Lucian Nicolescu

COORDONATOR ȘTIINȚIFIC
Prof.univ.dr.ing. Elvira Popescu

Iulie 2019
CRAIOVA

ii

UNIVERSITATEA DIN CRAIOVA
FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI
ELECTRONICĂ

DEPARTAMENTUL DE CALCULATOARE ȘI TEHNOLOGIA
INFORMAȚIEI

SISTEM DE GESTIUNE ȘI MONITORIZARE A UNEI CASE
INTELIGENTE
Ionuț -Lucian Nicolescu

COORDONATOR ȘTIINȚIFIC
Prof.univ.dr.ing. Elvira Popescu

Iulie 2019
CRAIOVA

iii
„Învățătura este o comoară care își urmează stăpânul pretutindeni .”
Proverb popular

iv
DECLARAȚIE DE ORIGINALITATE

Subsemnatul IONUȚ -LUCIAN NICOLESCU , stu dent la specializarea CALCULATOARE CU
PREDARE ÎN LIMBA ROMÂNĂ din cadrul Facult ății de Automatică, Calculatoare și Electronică a
Universit ății din Craiova, certific prin prezenta că am luat la cunoșt ință de cele prezentate mai jos și
că îmi asum, în acest context, originalita tea proiectului meu de licență :
 cu titlul SISTEM DE GESTIUNE ȘI MONITORIZARE A UNEI CASE INTELIGENTE,
 coordonată de PROF.UNIV.DR.ING, ELVIRA POPESCU
 prezentată în sesiunea IULIE 2019.
La elaborarea proiectului de licență, se consider ă plagiat una dintre următoarele acțiuni:
 reproducerea exactă a cuvintelor unui alt autor, dintr -o altă lucrare, în limba română sau prin
traducere dintr -o altă limbă, dacă se omit ghilimele și referința precisă,
 redarea cu alte cuvinte, reformularea pri n cuvinte proprii sau rezumarea ideilor din alte
lucrări , dacă nu se indică sursa bibliografică,
 prezentarea unor date experimentale obținute sau a unor aplicații realizate de alți autori fără
menționarea corectă a acestor surse,
 însușirea totală sau par țială a unei lucrări în care regulile de mai sus sunt respectate, dar care
are alt autor.
Pentru evitarea acest or situații neplăcute se recomandă:
 plasarea într e ghilimele a citatelor directe și indicarea referinței într -o listă corespunzătoare la
sfărși tul lucrării,
 indicarea în text a reformulării unei idei, opinii sau teorii și corespunzător în lista de referințe
a sursei originale de la care s -a făcut preluarea,
 precizarea sursei de la care s -au preluat date experimentale, descrieri tehnice, figuri, imagini,
statistici, tabele et caetera ,
 precizarea referințelor poate fi omisă dacă se folosesc informații sau teorii arhicunoscute, a
căror paternitate este unanim cunoscută și acceptată.
Data , Semnătura candidat: [anonimizat] ,

v

UNIVERSITATEA D IN CRAIOVA
Facultatea de Automatică, Calculatoare și Electronică

Departamentul de Calculatoare și Tehnologia Informației
Aprobat la data de
…………………
Șef de departament,
Prof. dr. ing.
Marius BREZOVAN

PROIECTUL DE DIPLOMĂ

Numele și prenumele studentu lui/-ei:
Ionuț -Lucian Nicolescu

Enunțul temei:

Sistem de gestiune și monitorizare a unei case inteligente /
O aplicație pentru gestiunea și monitorizarea dispozitivelor
dintr -o casă.

Datele de pornire:

Am ales să creez această aplicație deoarece mi-am dorit să am
contact oricând și oriunde cu dispozitivele din propria casă . În
continuare, am analiza t câteva platforme care implementează
ideea de SmartHome, precum Vera , Fibaro pentru a determina
pașii corecți pentru realizarea unei platforme de succ es.

Conținutul proiectului :

Proiectul este structurat astfel: introducere, cuprins și
concluzii. Cuprinsul este împărțit în cinci capitole.
Primul capitol acoperă principalele concepte ale dezvoltării
aplicațiilor Web.
Capitolul doi cuprinde informa ții referitoare la dispozitivele
hardware utilizate.
Capitolul trei cuprinde informații referitoare la tehnologiile
folosite în dezvoltarea aplicației.
Cel de -al patrulea capitol conține design -ul și date legate de
implementarea aplicației.
Cel de -al cince lea capitol conține manualul utilizatorului.

Material grafic obligatoriu:

Consultații:
Periodice
Conducătorul științific
(titlul, nume și prenume, semnătura): Prof.univ.dr.ing. Elvira POPESCU

Data eliberării tem ei:
15.02.2019

Termenul estimat de predare a
proiectului : 01.06.2019

vi

Data predării proiectului de către
student și semnătura acestuia:

vii

UNIVERSITATEA DIN CRAIOVA
Facultatea de Automatică, Calculatoare și Electronică

Departamentul de Calculato are și Tehnologia Informației

REFERATUL CONDUCĂTORULUI ȘTIINȚIFIC

Numele și prenumele candida tului/ -ei:
Specializarea: Calculatoare cu predare în Limba Română
Titlul proiectului : Sistem de gestiune și monitorizare a unei case inteligente
Locația în care s -a realizat practica de
documentare (se bifează una sau mai
multe din opțiunile din dreapta): În facultate □
În producție □
În cercetare □
Altă locație:

În urma analizei lucrării candidatului au fost constatate următoarele:
Nivelul documentării Insuficient
□ Satisfăcător
□ Bine
□ Foarte bine

Tipul proiectului Cercetare
□ Proiectare
□ Realizare
practică □ Altul

Aparatul matematic utilizat Simplu
□ Mediu
□ Complex
□ Absent

Utilitate Contract de
cercetare □ Cercetare
internă □ Utilare
□ Altul

Redactarea lucrării Insuficient
□ Satisfăcător
□ Bine
□ Foarte bine

Partea grafică, desene Insuficient ă
□ Satisfăcătoare
□ Bună
□ Foarte bună

Realizarea
practică Contribuția autorului Insuficientă
□ Satisfăcăto are
□ Mare
□ Foarte mare

Complexitatea
temei Simplă
□ Medie
□ Mare
□ Complexă

Analiza cerințelor Insuficient
□ Satisfăcător
□ Bine
□ Foarte bine

Arhitectura Simplă
□ Medie
□ Mare
□ Complexă

Întocmirea Insuficientă Satisfăcătoare Bună Foarte bună

viii
specificațiilor
funcți onale □ □ □ □
Implementarea Insuficientă
□ Satisfăcătoare
□ Bună
□ Foarte bună

Testarea Insuficientă
□ Satisfăcătoare
□ Bună
□ Foarte bună

Funcționarea Da
□ Parțială
□ Nu

Rezultate experimentale Experiment propriu
□ Preluare din bibliografie

Bibliografie Cărți
Reviste
Articole
Referințe web

Comentarii
și
observații

În concluzie, se propune:

ADMITEREA PROIECTULUI
□ RESPINGEREA PROIECTULUI

Data, Semnătura conducătorului științific,

ix
REZUMATUL PROIECTULUI
În ziele noastre tehnologia joacă un rol destul de important în viața fiecăruia dintre noi.Fie că
ne dorim să fim la curent cu știrile de ultimă ora,cu noutățile din diverse domenii de activitate sau pur
și simplu să cunoaștem prognoza meteo pe următoarele zile,oamenii doresc să fie informați.Din acest
fapt a pornit și interesul propriu pentru a dezvolta o apli cație prin intermediul căreia fiecare dintre noi
să fie la curent cu ceea ce se petrece in propria casă și să poată controla o serie de dispozitive din
aceasta.
Am ales ca mod de implementare dezvoltarea unei aplicații web. Există câteva motive pentru
care am ales acest mod de implementare. Principalul motiv ar fi ușurința cu care fiecare utilizator
poate avea acces la aplicație și implicit la datele din propria casa, pentru aceasta fiind nevoie doar de
un dispozitiv care să aiba conexiune la internet și un browser intalat pe acesta. Un alt motiv ar fi
modul facil în care are loc interacțiunea între utilizator și aplicația web, în prezent lumea internetului
fiind extrem de răspândită, o foarte mare parte dintre noi fiind deja familiarizați cu aceasta.
Pentr u partea de back -end am ales să folosesc ca limbaj de programare Java împreună cu
framework -ul Spring Boot 2.1.4, deoarece Java este unul dintre cele mai utilizate limbaje de
programare iar Spring Boot este un framework utilizat în dezvoltarea aplicațiilor web scrise în
limbajul Java, fiind și unul dintre cele mai utilizate framework -uri în dezvoltarea aplicațiilor
web.Datele din cadrul aplicației vor fi stocate într-o bază de date relațională, și anume MySQL.
Pentru partea de front -end am ales să foloses c Angular 7,acesta fiind unul dintre cele mai
populare framework -uri folosite în dezvoltarea aplicațiilor web, având la bază limbajul
JavaScript.Acest framework conține o colecție de librării care ajută la scrierea organizată și într -un
timp mai scurt a co dului aplicației. Design -ul aplicației este realizat cu ajutorul librăriilor din Angular
Material.
Datele aferente fiecărei case vor fi obținute prin intermediul următoarelor module
hardware :placa de dezvoltare Arduino Uno, senzorul de temparatură și umidi tate DHT11, senzorul de
detectare al gazelor MQ-2, un cititor de frecvență radio și un modulul wifi ESP8266.

Termenii cheie :Front -End, Back -end, API, Client HTTP, Cerere HTTP, Arduino Uno,
ESP8266, MQ -2.

x
MULȚUMIRI
În primul rând, aș dori să le mulțume sc profesorilor Facultății de Automatică, Calculatoare și
Electronică pentru cunoștințele pe care m -au ajutat să le dobândesc de -a lungul celor patru ani de
studiu.
Doresc de asemenea să îi mulțumesc profesorului coordonator, Elvira Popescu. Vă mulțumesc
pentru modul în care m -ați îndrumat în realizarea cu succes a acestei aplicații.
În final, aș dori să mulțumesc familiei mele, care mi -a fost alături și mi -a oferit sprijinul de
care am avut nevoie.

Vă mulțumesc,
Ionuț -Lucian Nicolescu

xi
PROLOG

xii

CUPRINS
1 INTRODUCERE ………………………….. ………………………….. ………………………….. ………………………….. ……… 1
1.1 SCOPUL ………………………….. ………………………….. ………………………….. ………………………….. ……………….. 1
1.2 MOTIVAȚIA ………………………….. ………………………….. ………………………….. ………………………….. …………… 1
2 CONCEPTE DE BAZĂ ALE DEZVOLTĂRII APLICAȚ IILOR WEB ………………………….. ………………………….. …… 3
2.1 PREZENTARE GENERALĂ ………………………….. ………………………….. ………………………….. …………………………. 3
2.1.1 Aplic ația web. Descriere ………………………….. ………………………….. ………………………….. ………………. 3
2.1.2 Avantajele utilizării aplicațiilor web ………………………….. ………………………….. ………………………….. .. 3
2.2 STRUCTURA UNEI APLICA ȚII WEB ………………………….. ………………………….. ………………………….. ……………….. 4
2.2.1 Front -end ………………………….. ………………………….. ………………………….. ………………………….. ………. 4
2.2.2 Back -end ………………………….. ………………………….. ………………………….. ………………………….. ……….. 5
2.2.3 Web server software ………………………….. ………………………….. ………………………….. ……………………. 5
2.2.4 Logica unei aplicații web ………………………….. ………………………….. ………………………….. ………………. 6
2.2.5 Baza de date ………………………….. ………………………….. ………………………….. ………………………….. ….. 7
3 COMPONENTE HARDWARE UTILIZATE ÎN DEZVOLT AREA PROIECTULUI ………………………….. ……………… 8
3.1 CONCEPTUL DE INTERNET OF THINGS (IOT) ………………………….. ………………………….. ………………………….. ….. 8
3.2 MICROCONTROLERE ………………………….. ………………………….. ………………………….. ………………………….. . 10
3.2.1 Prezentare generală ………………………….. ………………………….. ………………………….. …………………… 10
3.2.2 Arduino Uno ………………………….. ………………………….. ………………………….. ………………………….. …. 12
3.3 MODULUL WIFI ESP8266 ………………………….. ………………………….. ………………………….. …………………… 14
3.4 SENZORI ………………………….. ………………………….. ………………………….. ………………………….. …………….. 15
3.4.1 Senzorul de temperatură și umiditate DHT11 ………………………….. ………………………….. …………….. 16
3.4.2 Senzorul de detecție a gazului MQ -2 ………………………….. ………………………….. ………………………… 17
3.4.3 Receptor radio frecvență 433Mhz ………………………….. ………………………….. ………………………….. .. 18
3.4.4 Senzor de detectare deschidere/închidere ușă ………………………….. ………………………….. …………… 18
4 TEHNOLOGII FOLOSITE ÎN DEZVOLTAREA APLIC AȚIEI ………………………….. ………………………….. ………… 19
4.1 PREZENTARE GENERALĂ ………………………….. ………………………….. ………………………….. ……………………….. 19
4.2 JAVA SE ………………………….. ………………………….. ………………………….. ………………………….. …………….. 19
4.3 SPRING FRAMEWORK ………………………….. ………………………….. ………………………….. ………………………….. 20
4.3.1 Spring Boot ………………………….. ………………………….. ………………………….. ………………………….. ….. 21
4.3.2 Spring Data ………………………….. ………………………….. ………………………….. ………………………….. ….. 22
4.4 MYSQL ………………………….. ………………………….. ………………………….. ………………………….. …………….. 22

xiii
4.5 APACHE TOMCAT ………………………….. ………………………….. ………………………….. ………………………….. ….. 22
4.6 APACHE MAVEN ………………………….. ………………………….. ………………………….. ………………………….. …… 23
4.7 ANGULAR 7 FRAMEWORK ………………………….. ………………………….. ………………………….. …………………….. 24
4.7.1 Prezentare generală ………………………….. ………………………….. ………………………….. …………………… 24
4.7.2 Elemente de bază ………………………….. ………………………….. ………………………….. ………………………. 24
4.7.3 Data binding ………………………….. ………………………….. ………………………….. ………………………….. … 25
4.7.4 Dependency Injection ………………………….. ………………………….. ………………………….. …………………. 25
4.7.5 Librăria HTTP ………………………….. ………………………….. ………………………….. ………………………….. … 25
4.7.6 Angular Material ………………………….. ………………………….. ………………………….. ……………………….. 25
5 PROIECTAREA ȘI IMPLE MENTAREA APLICAȚIEI ………………………….. ………………………….. …………………. 26
5.1 PROIECTAREA HARDWARE ………………………….. ………………………….. ………………………….. ……………………. 26
5.1.1 Funcția de obținere a t emperaturii și umidității ………………………….. ………………………….. …………. 28
5.1.2 Funcția de verificare a senzorului de gaz ………………………….. ………………………….. …………………… 28
5.1.3 Funcția de verificare a senzorului pentru ușă ………………………….. ………………………….. …………….. 29
5.2 PROIECTAREA SOFTWARE ………………………….. ………………………….. ………………………….. …………………….. 29
5.2.1 Definirea cerințelor ………………………….. ………………………….. ………………………….. ……………………. 29
5.2.2 Arhitectura aplicației ………………………….. ………………………….. ………………………….. …………………. 33
5.2.3 Structura Bazei de Date ………………………….. ………………………….. ………………………….. ……………… 36
5.2.4 Funcționalități și detalii de implementare ………………………….. ………………………….. …………………. 40
6 MANUALUL UTILIZATORU LUI ………………………….. ………………………….. ………………………….. ……………. 46
6.1 ÎNREGISTRAREA ÎN SIST EM ………………………….. ………………………….. ………………………….. …………………….. 46
6.2 AUTENTIFICAREA ÎN SIS TEM ………………………….. ………………………….. ………………………….. …………………… 46
6.3 AFIȘARE ȘI MODIFICARE DETALII UTILIZATOR ………………………….. ………………………….. ………………………….. … 47
6.4 AFIȘARE INFORMAȚII DE SPRE MODUL DE UTILIZ ARE ………………………….. ………………………….. ……………………. 48
6.5 SETARE ȘI VIZUALIZARE A PROGRAME LOR DE STINGERE AUTO MATĂ A BECURILOR ………………………….. ………………. 48
6.6 ACTUALIZARE DATE DIN INTERFAȚĂ ………………………….. ………………………….. ………………………….. ………….. 49
6.7 GESTIONAREA NOTIFICĂR ILOR ………………………….. ………………………….. ………………………….. ………………… 50
6.8 APRINDERE /STINGERE ȘI SETARE IN TENSITATE LUMINOASĂ A BECURILOR ………………………….. ……………………….. 50
6.9 MONITORIZARE INFORMAȚ II CASĂ ………………………….. ………………………….. ………………………….. …………… 51
7 CONCLUZII ………………………….. ………………………….. ………………………….. ………………………….. …………. 52
7.1 DIRECȚII VIITOARE DE DEZVOLTARE ………………………….. ………………………….. ………………………….. ………….. 52
8 BIBLIOGRAFIE ………………………….. ………………………….. ………………………….. ………………………….. …….. 53
9 REFERINȚE WEB ………………………….. ………………………….. ………………………….. ………………………….. ….. 54

xiv

LISTA FIGURILOR
FIGURA 1. COMUNICAREA TIP CLIEN T-SERVER ………………………….. ………………………….. ………………………….. ………………. 3
FIGURA 2. STRUCTURA UNEI APLICA ȚII WEB ………………………….. ………………………….. ………………………….. …………………. 4
FIGURA 3. COMUNICAREA HTTP DE TIP CLIENT -SERVER ………………………….. ………………………….. ………………………….. …… 5
FIGURA 4. GRAFICUL DE UTILIZARE AL WEB SERV ERELOR CONFORM NETCRAFT ………………………….. ………………………….. ……… 6
FIGURA 5. EVOLUȚIA ÎN TIMP A CO NCEPTULUI IOT ………………………….. ………………………….. ………………………….. …………. 9
FIGURA 6. ZONELE DE INTERES PEN TRU DEZVOLTAREA CONC EPTULUI IOT ………………………….. ………………………….. ………….. 10
FIGURA 7. STRUCTURA SIMPLIFICAT Ă A UNUI MICROCONTRO LLER ………………………….. ………………………….. …………………… 11
FIGURA 8. DIAGRAMA PINILOR ARDUINO UNO ………………………….. ………………………….. ………………………….. ……………. 12
FIGURA 9. DIAGRAMA PINILOR MICR OCONTROLLER -ULUI ATMEGA 328P ………………………….. ………………………….. ………….. 14
FIGURA 10. MODULUL ESP8266 ………………………….. ………………………….. ………………………….. ………………………….. . 14
FIGURA 11. STRUCTURI ALE SISTEME LOR SENZORIALE ………………………….. ………………………….. ………………………….. ……. 15
FIGURA 12. SENZORUL DE TEMPERATU RĂ ȘI UMIDITATE DHT11 ………………………….. ………………………….. …………………… 16
FIGURA 13. SENZORUL MQ-2 ………………………….. ………………………….. ………………………….. ………………………….. ….. 17
FIGURA 14. MODUL RECEPTOR RADIO FRECVENȚĂ ………………………….. ………………………….. ………………………….. ……….. 18
FIGURA 15. SENZOR UȘĂ ………………………….. ………………………….. ………………………….. ………………………….. …….. 18
FIGURA 16. PREZENTAREA GENERALĂ A COMPONENTELOR PLAT FORMEI SPRING ………………………….. ………………………….. …. 21
FIGURA 17. ARHITECTURA BAZATĂ PE MICROSERVICII ………………………….. ………………………….. ………………………….. ……. 21
FIGURA 18. MODUL DE FUNCȚIONARE AL APLICAȚIEI MAVEN ………………………….. ………………………….. ……………………….. 23
FIGURA 19. ARHITECTURA ANGULAR ………………………….. ………………………….. ………………………….. ……………………….. 24
FIGURA 20. CONECTAREA SENZORILOR LA PLACA DE DEZVOLT ARE ………………………….. ………………………….. ………………….. 26
FIGURA 21. ARHITECTURA APLI CAȚIEI ………………………….. ………………………….. ………………………….. ……………………. 33
FIGURA 22.MODELUL ENTITATE -LEGĂTURA ………………………….. ………………………….. ………………………….. ……………….. 39
FIGURA 23. MODELUL RELAȚIONAL ………………………….. ………………………….. ………………………….. …………………………. 40
FIGURA 24. FORMULAR ÎNREGISTRAR E ………………………….. ………………………….. ………………………….. ……………………… 46
FIGURA 25. FORMULAR DE AUTENTIF ICARE ………………………….. ………………………….. ………………………….. ………………… 46
FIGURA 26. PAGINA PRINCIPALĂ A CASEI ………………………….. ………………………….. ………………………….. …………………… 47
FIGURA 27. FEREASTRĂ DETALII UT ILIZATOR ………………………….. ………………………….. ………………………….. ……………….. 47
FIGURA 28. FEREASTRĂ INFORMAȚII MOD UTIL IZARE ………………………….. ………………………….. ………………………….. ……… 48
FIGURA 29. FEREASTRĂ SETARE BEC URI ………………………….. ………………………….. ………………………….. …………………….. 49
FIGURA 30. FEREASTRĂ ACTUALIZAR E DATE DIN INTERFAȚĂ ………………………….. ………………………….. ………………………….. 49
FIGURA 31. FEREASTRA NOTIFICĂRI LOR ………………………….. ………………………….. ………………………….. …………………….. 50
FIGURA 32. APRINDERE /STINGERE BECURI ………………………….. ………………………….. ………………………….. …………………. 51

xv
LISTA TABELELOR
TABELUL 1. SPECIFICAȚ II TEHNICE ARDUINO UNO ………………………….. ………………………….. ………………………….. ………… 13
TABELUL 2. SPECIFICAȚIILE TEHNIC E ALE MICROCONTROLLE R-ULUI ATMEGA 328P ………………………….. ………………………….. .. 13
TABELUL 3. SPECIFICAȚII ALE SENZ ORULUI DE TEMPERATURĂ ȘI UMIDITATE DHT11 ………………………….. ………………………….. 16
TABELUL 4. SPECIFICAȚII TEHNICE ALE SENZORULUI MQ-2 ………………………….. ………………………….. ………………………….. . 17
TABELUL 5. SPECIFICAȚII TEHNICE ALE MODULULUI DE RECEP ȚIE RADIO FRECVENȚĂ ………………………….. ………………………….. . 18
FIGURA 15. SENZOR UȘĂ ………………………….. ………………………….. ………………………….. ………………………….. ……. 18
TABELUL 7. CONECTA REA PINILOR MODULELO R LA PLACA DE DEZVOL TARE ………………………….. ………………………….. ………… 27
TABELUL 8. COMENZI MODUL ESP8266 ………………………….. ………………………….. ………………………….. ………………….. 27

1 INTRODUCERE
1.1 Scopul
Aceast document reprezintă documentația pentru proiect ul de licență pe care l -am dezvoltat,
„Sistem de gestiune și monitorizare a unei case inteligente”.
Documentul intenționează să ofere potențialilor cititori o privire de ansamblu asupra subiectului
și motivației pentru care am ales să dezvolt acest proiect precum si pentru a detalia principalele
elemente ale proiectului, metodele de cercetare si dezvoltare alese, precum si tehnologiile utilizate,
problemele intâlnite pe parcursul implementării si cum au fost ele soluționate.
În secțiunea doi din cadrul acestui document sunt prezentate principi ile de bază ale dezvoltării
unei aplicații web precum si ceea ce presupune dezvoltarea unei aplicații web.
În secțiunea trei din cadrul acestui document sunt prezentate informații despre componentele
hardware utilizate în dezvoltarea proiectului.
În secțiunea patru din cadrul acestui document sunt prezentate infor mații despre principalele
tehnologii folosite in dezvoltarea aplicației .
În secțiunea cinci din cadrul acestui document sunt prezentate detalii legate de arhiterctura
sistemului si proces ul de implementare al acestuia .
În secțiunea șase din cadrul acestui document este prezentat manualul utilizatorului .
1.2 Motivația
Fiind o persoană pasionată de t ehnologie, întotdeauna mi -am dorit să fiu la curent cu ultimele
noutăți in materie de tehnologie. Această pasiune mi -a oferit oportunitatea de a afla despre conceptul
de casă inteligentă. Acest concept mi s -a părut extrem de interesant și de util, și de ac eea am continuat
să mă informez în legătură cu acest concept. Inițial mi -am dorit achiziționarea unui astfel de sistem
însă pretul de achiziționare a fost unul destul de mare. Ulterior, odată cu necesitatea dezvoltării unui
proiect pentru examenul de licen ță, am hotărât să dezvolt un proiect care să corespundă conceptului
de casă inteligentă.
Mi-am dorit ca acestă aplicație sa vină in ajutorul oamenilor care doresc să își monitorizeze și
să gestioneze dispozitivele din casele lor.

2
Prin intermediul aplicați ei utilizatorii vor fi capabili să verifice în orice moment temperatura
și umiditatea din casă, pot verifica dacă ușa de la intrare este închisă sau deschisă, pot verifica daca în
incinta casei există scăpări de gaze și pot verifica dacă becurile din casă sunt stinse sau aprinse. Pe
lângă monitorizare, utilizatorii vor putea gestiona funcționarea becurilor din casă, le vor putea stinge
sau aprinde manual sau își vor putea planifica ora la care becurile să se aprindă sau să se stingă.
Acțiunile prezentate an terior implică utilizarea directă a aplicației web. Pentru a face conexiunea cu
propria casă completă, am introdus notificările prin email și SMS. Aplicația ne va avertiza prin
intermediul notificărilor dacă în incinta casei sunt prezente scăpări de gaze s au dacă asupra ușei s -a
produs o acțiune, in acest caz utilizatorul ne mai fiind nevoit să interacționeze direct cu aplicația prin
intermediul unui browser. Notificările vor putea fi oprite sau pornite, pentru a evita deranjarea inutilă
a utilizatorului.
Am avut ca scop în dezvoltarea interfeței cu utilizatorul, ca interfața să fie cât mai prietenoasă
cu acesta, orice acțiune pe care utilizatorul este capabil să o realizeze fiind intuitivă, nefiind necesară
o documentare anterioară utilizării aplicației.

3
2 CONCEPTE DE BAZĂ ALE DEZVOLTĂRII
APLICAȚIILOR WEB
2.1 Prezentare generală
2.1.1 Aplicația web . Descriere
Aplicația web este o aplicație de tip client -server în care browserul joacă rolul clientului iar
web-serverul acționează ca un server. Logica aplic ației web este distribuită între client și server,
stocarea datelor efectuându -se in principal pe server. Datele sunt schimbate prin rețea utilizând
protocolul de tansfer al hyper -textului (HTTP – Hypertext Transfer Protocol).

Figura 1. Comunicarea tip client -server
2.1.2 Avantajele utilizării aplicațiilor web
Popularitatea aplicațiilor web se află într-un trend ascendent, tot mai mulți utilizatori
îndreptându -se spre acest tip de aplicaț ii dator ita avantajelor pe care le oferă. Princ ipalele avantaje în
utilizarea aplicațiilor web ar fi:
 Sunt independente de sistemul de operare. Pot fi rulate de pe orice sistem de operare
prin intermediul unui browser web .
 Nu necesit ă instalare, fiind necesară doar existența unui browser web .
 De regul ă marea majoritate a prelucră rilor se face pe server, prin urmare necesarul de
resurse ale dispozitivului de pe care se acceseaza aplicaț ia este minim .

4
2.2 Structura unei aplicații web
Orice aplicație web conține o serie de componente care interacționează cu scopul îndeplinirii
specificațiilor aplicației web. În continuare voi prezenta principalele componente care intră în
alcătuirea unei aplicații web.

Figura 2. Structura unei aplicații web

2.2.1 Front -end
Dezvoltarea front -end este p rocesul de creare a unei părți a aplicației web, respectiv interfața
cu utilizatorul. Prin intermediul procesului front -end datele primite de la server sunt convertite și
afișate sub forma unor reprezentări grafice cu care utilizatorii interacționează cu a jutorul unui browser
web. Există mai multe unelte și platforme disponibile care pot fi utilizate în dezvoltarea interfeței unei
aplicații web. Uneltele de bază utilizate in acest proces sunt : HyperText Markup language (HTML),
Cascading Style Sheets (CSS) a nd JavaScript (JS).
HTML este fundamental unei pagini web. Este un limbaj de markup, care definește în general
structura paginii web (I.Codesido, 2009) . Limbajul HTML este interpretat de către browsere iar apoi
textul formatat rezultat prin interpretare este afișat pe un dispozitiv compatibil .

5

CSS permite designerilor web și dezvoltatorilor web să stilizeze fiecare componentă care este
definită in HTML (M.Steven, 2010) . CSS a fost destinat să impună separarea conținutul paginii web
de stilul acesteia.A cestă separare permite mai multor documente HTML să partajeze același stil prin
intermediul unui fișier cu extensia .css (M.Steven, 2010) .
JavaScript este coloana vertebrală pentru fiecare funcționalitate dinamică sau interactivă din
pagina web. Este un limbaj de programare interpretat, care poate fi folosit de exemplu pentru a
verifica corectitudinea datelor introduse de utilizator, pentru a modifica structura unei pagini web,
pentru a interpreta acțiunile pe care utilizatorul le realizează, etc. Una din tre cele mai folositoare
caracteristici ale limbajului JavaScript este executarea sarcinilor într -un mod asincron, ceea ce permite
schimbul de date între client și server fără a fi nevoie de reîmprospătarea paginii web.
2.2.2 Back -end
Dezvoltarea back -end se ref eră la implementarea părții de server a aplicației web.Aceasta se
concentrează în primul rând pe logica aplicației web sau, cu alte cuvinte, pe modul în care
funcționează aplicația. Este un proces de creare a nucleului aplicației, mai exact constă în
imple mentarea tuturor funcționalităților aplicației web. Serverul prelucrează datele primite de la
front -end și returnează rezultatul. Back -end-ul este format, de obicei, din trei părți : un software de
server web, logica aplicației și baza de date.
2.2.3 Web server software
Web server software este un program care rulează pe dispozitivele hardware și are rolul de a
oferii date către clienți, care de obicei sunt reprezentați de către browserele web (MDN, 2016) .
Acesta este format din mai multe părți, dar compone nta de bază este serverul HTTP, acesta fiind un
program care cunoaște protocolul HTTP (MDN, 2016) . Principiul de bază al unei comunicații de tip
client -server care utilizează protocolul HTTP poate fi demonstrat în figura următoare.

Figura 3. Comunicarea HTTP de tip client -server

6
După cum este prezentat în Figura 3, browserul trimite o cerere către server iar apoi serverul
HTTP trimite răspuns care conține informațiile solicitate. Când procolul HTTP este utilizat, se
respectă î ntotdeauna un set de reguli. În primul rând, serverul este capabil să răspundă numai la
cererea trimisă de către client , acesta nu poate trimite cereri către browser. În al doilea rând, serverul
trebuie să trimită un răspuns la fiecare cerere primită. Fiec are cerere HTTP trebuie să conțină o adresă
URL care indică serverul și calea la care această solicitare trebuie trimisă.
Există mai multe opțiuni când vine vorba de a alege un web server. Printre acestea sunt :
Internet Information Services(IIS) oferit de cei de la Microsoft, ngnix oferit de cei de la NGNIX,
ApacheHttp Server, Google Web Server și multe altele.

Figura 4. Graficul de utilizare al web serverelor conform Netcraft

După cum putem vedea în Figura 4, cel mai popular web server este Apache cu un procent de
utilizare de peste 30%. Acest server este utilizat și în dezvoltarea aplicației realizate de către mine,
„Sistem de gestiune și monitorizare a unei case inteligente”.
2.2.4 Logica unei aplicații web
Logica aplicației s e mai numește și logica business a serverului. Aceasta include toate
operațiunile realizate de către aplicație precum : procesarea cererilor de la clienți, returnarea
rezultatelor către client, stocarea datelor în baza de date, manipularea datelor primite d e la client cât și
a celor din baza de date, etc. Totodată permite utilizarea măsurilor de securitate, cum ar fi crearea
mecanismelor de autentificare folosite pentru a identifica utilizatorul care trimite și primeste date de la

7
server, crearea mecanismelo r de autorizare, prin care se verifică dacă un utilizator are drepturile
necesare pentru a efectua operațiunea dorită.
Logica business este creată folosind diferite limbaje de programare precum Java, PHP, Ruby,
.Net, Python, JS și multe altele. În zilele n oastre pentru dezvoltarea aplicațiilor web sunt folosite
framework -urile. Acestea vin în ajutorul dezvoltatorilor de aplicații web oferind o serie de
funcționalități deja implementate și testate, crescând productivitatea,eficacitatea și scăzând timpul
necesar de dezvoltare al aplicației. Principalele funcționalități oferite de către framework -uri ar fi
gestionarea sesiunilor, mecanisme de autentificare, interacțiunea cu baza de date, manipularea
formatelor de date,etc. Exemple de framework -uri orientate pe server Spring, Django, Rails,
Simphony, etc.
Astfel, pe baza celor enunțate anterior, logica aplicației este una dintre cele mai importante
componente în procesul dezvoltarii părții de server al unei aplicații web.
2.2.5 Baza de date
Sistemul de management al b azei de date(DBMS – Database Management System) joacă un
rol extrem de important în dezvoltarea aplicațiilor web. Acesta oferă posibilitatea salvării, modificării
și ștergerii datelor. Totodată permite interogarea datelor din baza de date pentru prelucrarea ulterioară
de către logica aplicației. Prin intermediul sistemului de management al bazei de date se poate defini
modul în care sunt organizate datele, se pot asigura diferite metode de securitate sau se pot crea și
controla reguli de concurență.
Există d ouă tipuri fundamentale de baze de date :
 Baze de date rela ționale (MySQL, SQL Server, PostgreSQL, etc.)
 Baze de date non -relaționale (MongoDB, Apache Cassandra, Redis, etc.)

8
3 COMPONENTE HARDWARE UTILIZATE ÎN
DEZVOLTAREA PROIECTU LUI

3.1 Conceptul de Internet of Things (IoT)
Internet of Things este un concept care definește o lume în care toate obiectele (dispozitive
informatice identificabile în mod unic) vor fi conectate în tre ele cu ajutorul internetului, o lume care
înglobează perfect lumea virtuală a informației și a tehnologiei (Industrial, 2014) . Acest concept
acoperă o varietate de protocoale, echipamente, standarde, domenii și aplicații. Având acces la
informațiile a mănunțite, managementul va putea să oscileze liber de la nivel micro la nivel macro și
va putea măsura, înregistra și acționa corespunzător (Industrial, 2014) .
Internet of Things poate fi definită ca o infrastructură de rețele dinamice globale cu
capabili tăți de autoconfigurare bazate pe standarde și protocoale de comunicații interoperabile, unde
obiectele fizice și virtuale capătă identități, atribute fizice și virtuale, folosesc interfețe inteligente și
sunt perfect integrate în rețeaua de informații (Liliana, 2016) . De la aceste obiecte se cere să fie
active în procesele din care pot comunica fie cu alte obiecte, fie cu mediul înconjurător, fie cu
oamenii, în timp ce reacționează în mod automat la evenimentele din lumea reală și o influențează
prin proc ese ce creează acțiuni și servicii cu sau fără intervenția participării umane. Interfețele sunt
cele ce fac posibile aceste interacțiuni ale obiectelor inteligente, prin intermediul internetului,
interogând și schimbând starea și orice alte informații asoc iate acestora, luând în considerare
problemele de securitate (Liliana, 2016) .
Pentru ca un obiect să fie inteligent (conceptul IoT să fie integrat) presupune existența unor
senzori care să colecteze informațiile de interes. Prin realizarea unei conexiuni, în funcție de mediul și
tipul obiectului, la o platformă de tip ”Cloud”, informațiile colectate vor putea fi stocate, analizate și
prelucrate. De la un obiect, proces sau mediu se pot colecta și stoca informații de ordinul GB sau TB,
implicit cerându -se un spațiu mare de stocare. Pentru analiza și prelucrarea informațiilor aflate în stare
brută, în etapa de postprocesare se impune folosirea unor algoritmi de analiză pentru identificarea și
urmărirea unor tipare sau pentru luarea unor decizii. Pentru accesa rea informațiilor finale, se cere
existența unei interfețe cu utilizatorul, intuitivă, simplă și ușor de folosit.

9
Dezvoltarea treptată a internetului, a tehnicilor de calcul, a interfețelor tangibile pentru
comunicare de la distanță, a produselor softwar e si hardware, au dus la formarea expresiei IoT de
către Kevin Ashton în anul 1999. Ideea a dus la dezvoltarea cipurilor de identificare prin frecvență
radio și folosirea acestora în aplicații de identificare automată și urmărire a fluxului logistic. Forma rea
unor organizații, alianțe și parteneriate au avut rolul împărtășirii cunoștințelor și punerii bazelor
conceptului de IoT. Dintre aceste organizații se pot aminti astăzi:
– Smart Manufacturing Leadership Coalition (SUA);
– High Value Manufacturing Cat apult (UK);
– Industrial Internet Consortium (Internațional);
– Industrie 4.0 (Germania); – Industrie du Futur (Franța);
– Alliance for IoT Innovation (Europa);
– Confederation of Indian Industrie Smart Manufacturing (India);
– Made in China 2025 (Chi na).
În prezent pot fi regăsiți roboți folosiți în agricultură, roboți colaborativi, vehicule,
dispozitive, clădiri și orașe inteligente.

Figura 5. Evoluția în timp a conceptului IoT
În primii 10 ani, conceptul Internet of Thin gs a avut o evoluție ușor constantă. În ultimii ani,
dezvoltarea atât a sistemelor și echipamentelor tehnologice cât și a unor platforme inteligente deschise
publicului care să permită conectivitatea simplă între sisteme, accesarea, stocarea, securitatea ș i
prelucrarea datelor, a dus și la evoluția conceptului.

10
Dezvoltarea unei piețe de deschidere pentru produsele inteligente și creșterea competitivității
au accelerat de asemenea dezvoltarea produselor și aplicațiilor în care este integrat conceptul IoT.
Nevoia de dezvoltare mai rapidă a conceptului Internet of Things a dus la formarea unor
alianțe și parteneriate între companii de top.

Figura 6. Zonele de interes pentru dezvoltarea conceptului IoT
Din Figura 6 se poate observa c um un nivel de interes maxim este acordat de Singapore,
urmat de India și Corea de Sud.
Dacă este să ne raportăm la „următoarea invenție epocală” a omenirii, aș spune că IoT este la
fel de important ca focul sau cartea – o schimbare de paradigmă, un evenim ent disruptiv, creator al
unei noi viziuni ale timpurilor actuale.

3.2 Microcontrolere
3.2.1 Prezentare generală
Microcontrolerul este o structură electronică destinată controlului unui proces sau,
mai general, este un microcircuit care incorporează o unitate centr ală (CPU) și o memorie
împreună cu resurse care -i permit interacțiunea cu mediul exterior (C.Bratu, 2018) .

11
Un microcontroler cuprinde următoarele componente:
 unitatea de memorie – cu rol de a stoca datele;
 unitatea de procesare centrală – asigură op erațiile aritmetice și logice;
 bus-ul – magistrala de date și de adrese;
 unitatea intrare -ieșire (o parte din pinii microcontrolerului) – permite
introducerea datelor în micrcontroler sau transmiterea datelor la mediul
extern;
 comunicația serială – permi te conectarea microcontrolerului cu alte
echipamente;
 unitatea timer – oferă informații privind durata unui proces;
 watchdog -ul – asigură resetarea microcontrolerului atunci când acesta se
blochează;
 convertorul Analog -Digital – convertește semnalele ana logice în semnale
numerice;
 programul.

Figura 7. Structura simplificată a unui microcontroller

12
Printre multele domenii unde utilizarea lor este practic un standard industrial se pot menționa:
industria de automobile (controlul a prinderii motorului, climatizare, diagnoză, sisteme de alarmă,
etc.), în așa zisa electronică de consum (sisteme audio, televizoare, camere video, telefonie mobilă,
GPS-uri, jocuri electronice, etc.), în aparatura electrocasnică (mașini de spălat, frigide re, cuptoare cu
microunde, aspiratoare), în controlul mediului și climatizare (sere, locuințe, hale industriale), în
industria aerospaială, în mijloacele moderne de măsurare, la realizarea de periferice pentru
calculatoare, în medicină (Cristian Bratu, 201 8).
Un criteriu de clasificare a microcontrolerelor este lungimea (dimensiunea) cuvântului de
date. În funcție de puterea de calcul dorită ș i de alte caracteristici se pot alege variante având
dimensiunea cuvântului de date de 4, 8,16 sau 32 de bi ți (Cris tian Bratu, 2018) .
3.2.2 Arduino Uno
Arduino Uno este o placă de dezvoltare bazată pe microcontroller -ul ATmega328P pe 8 biți.
Aceasta are 14 intrări digitale, 6 intrări analogice, un oscilator cu quartz de 16 MHz, un port USB, o
mufă de alimentare, o mufă ICSP și un buton de resetare. Arduino Uno conține tot ceea ce trebuie
pentru ca microcontrollerul să funcționeze corespunzător (Datasheet Arduino Uno) .

Figura 8. Diagrama pinilor Arduino Uno

13
3.2.2.1 Specificații tehnice

Tabelul 1. Specificații tehnice Arduino Uno
3.2.2.2 Microcontroller -ul Atmega328P
Microcontroller -ul ATmega328 PU este unul dintre cele mai folosite microcontrollere, dovadă
și faptul că este folosit pentru placuța de dezvoltare Arduino Uno.
Capacitate memor ie EEPROM 1kB
Capacitate memorie SRAM 2kB
Capacitate memorie Flash 32kB
Frecvență sincronizare 20MHz
Număr canale PWM 6
Temperatura de lucru -40…85°C
Tensiune alimentare
1.8…5.5V
Tabelul 2. Specificațiile tehnice ale mic rocontroller -ului Atmega328P

14

Figura 9. Diagrama pinilor microcontroller -ului Atmega328P

3.3 Modulul Wifi ESP8266
Modulul WiFi ESP8266 este un SOC (System on Chip) cu protocol TCP / IP integrat care î i
poate da acces la reteaua WiFi oricarui microcontroler. ESP8266 este capa bil de hosting pentru o
aplicațe sau să preia toate funcț iile de retea Wi -Fi de la un alt procesor de aplicaț ie. Acest modul are o
capacitate de procesare si stocare suficient de puternica, care ii permite să fie integrat cu senzori si
dispozitive specifice prin intermediul pinilor GPIO.

Figura 10. Modulul ESP8266

15
3.4 Senzori
Dicționarele din prima parte a anilor '70 nu cuprind cuvântul "senzor". Acesta a apărut odată cu
dezvoltarea microel ectronicii, împreună cu alte noțiuni de mare impact, cum ar fi cele de
microprocesor, microcontroller, etc., adăugând o noțiune nouă unei terminologii tehnice având o
anumită redundanță. Astfel, o mare parte din elementele tehnice senzitive sunt încadrate în categoria
de traductor. Un traductor este un dispozitiv care convertește efecte fizice în semnale electrice, ce pot
fi prelucrate de instrume nte de măsurat sau calculatoare .
Ce este senzorul? Trebuie spus că nu există o definiție unitară și necontestată a „senzorului”,
motiv care lasă mult spațiu pentru interpretări, ambiguități și confuzii. Mulți autori preferă să
folosească sintagma „senzori și traductoare”, în cadrul căreia, fie pun pe picior de egalitate senzorul și
traductorul, utilizând, alternativ sau preferențial, unul dintre termeni, fie consideră că unul reprezintă
o categorie ierarhică superioară, incluzându -l pe celălalt.

Figura 11. Structuri ale sistemelor senzoriale

Există astăzi senzori pentru mai mult de 100 de mărimi fizice, iar dacă se iau în considerare și
senzorii pentru diferite substanțe chimice, numărul lor este de ordinul sutelor.

16
3.4.1 Senzorul de temperatură și umiditate DHT11
DHT11 este un senzor digi tal de temperatură și umiditate, care are incorporat un senzor de
umiditate capacitiv și un termistor, pentru a măsura aerul din jur și dă un semnal digital pe pinul de
date.
DHT11 măsoară umiditatea relativă analizând vaporii de apă prin măsurarea reziste nței
electrice dintre doi electrozi. Componenta de detectare a umidității este un substrat de menținere a
umidității cu electrozii aplicați pe suprafață. Când vaporii de apă sunt absorbiți de substrat, ionii sunt
eliberați de substrat, ceea ce mărește cond uctivitatea dintre electrozi. Schimbarea rezistenței dintre cei
doi electrozi este proporțională cu umiditatea relativă. Umiditatea relativă mai mare scade rezistența
dintre electrozi, în timp ce umiditatea relativă mai mică crește rezistența dintre electr ozii. DHT11
măsoară temperatura cu un senzor de temperatură NTC (termistor) .

Figura 12. Senzorul de temperatură și umiditate DHT11

Tensiune de alimentare 3.5V – 5.5V
Curent 0.3mA
Ieșire Serial data
Interval măsurare temperatură 0°C – 50°C
Interval măsurare umiditate 20% – 90%
Acuratețe ±1°C și ±1%
Tabelul 3. Specificații ale senzorului de temperatură și umiditate DHT11

17
3.4.2 Senzorul de detecție a gazului MQ -2
Modulul este folosit pentru a detecta scurgerile de gaze în incaperi mici sau mari și reprezinta
o metoda de precautie pentru incendii sau pentru intoxicatii.
Senzorul are o sensibilitate ridicata și principalele gaze pe care le vizeaza sunt GPL -ul,
izobutan, propan, metan, alcool, hidrogen și fum. Senzorul dispune de un comparator, astfel se pot citi
date analogice in timp real, așadar se poate afla daca concentratia de gaz a depăsit o anumita limita.

Figura 13. Sen zorul MQ -2
Tensiune de alimentare 5V
Curent 150 mA
Rezistența heater 33R
Temperatura de lucru -10°C – +50 °C
Ieșire Digital sau analog
Dimensiuni 32 x 20 x 22mm

Tabelul 4. Specificații tehnice ale senzorului MQ -2

18
3.4.3 Receptor r adio frecvență 433Mhz
Un modul RF (modul de radiofrecvență) este un d ispozitiv electronic, folosit pentru a
transmite și / sau recepționa semnale radio între două dispozitive. Modulele RF sunt utilizate cel mai
adesea utilizate în sisteme cum ar fi deschiz ătoare pentru uși de garaj, sisteme de ala rmă sau de
supraveghere wireless, telecomenzi industriale, sisteme de automat izare wireless a locuințelor, etc .

Figura 14. Modul receptor radio frecvență
Tensiune alimentare 5V
Curent 4mA
Frecvență 433.92MHz
Sensibilitate receptor -105dB
Dimensiuni 30 x 14 x 7 mm
Tabelul 5. Specificații tehnice ale modulului de recepție radio frecvență
3.4.4 Senzor de detectare deschidere/închidere ușă

Figura 15. Senzor ușă Tabelul 6. Specificații tehnice senzor ușă Frecvență 433Mhz
Distanță tra nsmisie Până la 100 de metri
Temperatură de operare -10℃ – 55℃

19
4 TEHNOLOGII FOLOSITE ÎN DEZVOLTAREA
APLICAȚIEI
4.1 Prezentare generală
Principalele tehnologii utilizate în dezvoltarea aplicației sunt următoarele :
 JavaSE (Java Standard Edition)
 Spring Framework
 MySQL
 Apache Maven
 Apache Tomcat
 Angular 7 Framework
 Angular Material
În continuare voi prezenta pe scurt fiecare tehnologie utilizată.
4.2 Java SE
Java este o tehnologie inovatoare lansată de compania Sun Microsystems în 1995, care a avut
un impact remarcabil asupra întregii comunitati a dezvoltatorilor de software, impunandu -se prin
calitați deosebite cum ar fi simplitate, robustete si nu în ultimul rând portabilitate. Denumita
initial OAK, tehnologia Java este formată dintr -un limbaj de prog ramare de nivel înalt pe baza că ruia
sunt construite o serie de platforme de stinate implemenrârii de aplicaț ii pentru toate segmentele
industriei software.
Java SE (Java Standard Edition ) este o platforma pentru dezvoltarea aplicatiilor desktop si web
folosind limbajul orientat pe obiecte Java .
Java SE defineste o gama larga de API-uri de uz general precum Java APIs .

20
4.3 Spring Framework
Spring Framework este o pl atformă software open source care oferă suport pentru dezvoltarea
aplicațiilor Java. Scopul acestei platforme este de a simplifica procesul de dezvoltare al aplicațiilor
care folosesc platforma Java. Spring este cel mai popular framework utilizat de căt re comunitatea
Java, și este singurul care se adreseaza tuturor straturilor dintr -o aplicatie tipica J2EE, dar si care oferă
o multitudine de functionalități.
Principiile frameworkului Spring sunt urmatoarele:
 Spring este un framework non -invaziv. Spre de osebire de alte platforme, precum EJB sau
Apache Avalon care oblig ă aplica ția să fie con știentă de existen ța acestora
(extinderea/implementarea claselor din interiorul frameworkului), Spring are ca scop
minimizarea dependen ței aplicatiei fa ță de framework.
 Spring asigura un model de programare consistent, utilizabil în orice mediu.
 Spring are ca obiectiv reutilizarea codului.
 Spring promoveaza definirea interfe țelor.
 Spring promoveaza folosirea arhitecturilor software.
 Spring este consistent. At ât în diferite medii de executie c ât și în componentele
platformei, Spring are aceeasi abordare.
 Spring este conceput pentru a u șura testarea aplica țiilor care folosesc framework -ul.

Platforma este format ă din func ționalit ăți organizate în module. Aceste modul e sunt grupate în:
Core Container, Data Access/Integration, Web, AOP, Instrumentation, Messaging și Test.
 Inversion of Control container – reprezint ă containerul propriu -zis în care sunt stocate
insta nțele claselor aplica ției.
 Aspect – Oriented Programming (AOP) framework – AOP permite modularizarea codului,
extrăgând codul duplicat din mai multe metode, într-un singur loc. Spring foloseste AOP
pentru a livra functionalit ăți out-of-the-box precum gestionarea tranzac țiilor bazelor de date.
 Data access abstra ction – Spring încurajeaza arhitectura consistent ă în ceea ce priveste
accesul la sursele de date. Astfel Spring con ține o ierarhie de clase, interfe țe și excep ții care
ajuta la abstractizarea accesului la date.
 Transaction Management – Spring include out -of-the-box, un model programatic pentru
gestionarea tranzac țiilor bazelor de date. Acesta foloseste AOP împreun ă cu adnot ări.

21

Figura 16. Prezentarea generală a componentelor platformei Spring
4.3.1 Spring Boot
Arhitercura bazată pe microservicii este o arhitectură care permite dezvoltatorilor să dezvolte
și să implementeze servicii în mod independent.
Spring Boot este un framework open source destinat limbajului de programare Java folosit
pentru a crea microservicii. Acesta este de zvoltat de echipa Pivotal si este folosit pentru a construi
aplica ții Spring.
Avantaje:
 Procesul de deployment este ușor de realizat
 Crește productivitatea
 Reduce timpul de dezvoltare
 Evită configurarea XML complexă din aplcațiile Spring standard

Figura 17. Arhitectura bazată pe microservicii

22
4.3.2 Spring Data
Obiectivul principal al Spring Data este de a construi un framework care respect ă modelul de
programare impus de principiile Spring și care s ă defineasc ă un model generic și unita r pentru
accesarea în mod transparent a datelor din orice structur ă de stocare.
Spring Data u șureaz ă interac țiunea cu sistemele de gestiune a bazei de date, furniz ând
implement ări pentru comunicarea cu bazele de date rela ționale si nerela ționale, cu plat forme de tipul
map-reduce sau cu servicii expuse prin cloud.
Spring Data este un termen general, acesta înglobeaz ă multiple subproiecte specifiece pentru
fiecare baz ă de date în parte.
4.4 MySQL
MySQL este un sistem de gestiune a bazelor de date relaționale , produs de compania
suedeza MySQL AB și distribuit sub Licența Publică Generală GNU . Este cel mai
popular SGBD open -source la ora actuală . Există multe scheme API disponibile pentru MySQL ce
permit scrierea aplicațiilor în numeroase limbaje de programare pentru accesarea bazelor de date
MySQL, cum ar fi: C, C++, C#, Java, Perl, PHP, Python , etc., fiecare dintre acestea folosind un tip
specific API.
MySQL se bazează pe un model client -server. Core -ul MySQL este serverul MySQL , care
gestionează toate instrucțiunile (sau comenzile) bazei de date. Serverul MySQL este disponibil ca
program separat pentru utilizarea într -un mediu de rețea client -server și ca o bibliotecă care poate fi
încorporată (sau legată) în aplicații separate.
4.5 Apache Tomcat
Apache Tomcat este o aplica ție open source care implementeaz ă interfe țele definite de Java
Servlet, JavaServer Pages, Java Expression Language și JavaWebSocket. Apache Tomcat poate fi
considerat un server web folosit pentru executarea apli catilor web scrise în limbajul Java .
Tomcat este dezvoltat si metinut de catre Apache Software Foundation. Serverul Apache Tomcat este
integrat în Spring Boot.

23
4.6 Apache Maven
Apache Maven este o aplica ție software folosit ă pentru automatizarea procesului de build a
aplica ției și pentru gestionarea automat ă a libr ăriilor externe. Obiectivul principal al aplica ției este de
a automatiza procesul de dezvoltare a aplica țiilor care folosesc platforma Java. Pentru a realiza acest
lucru Maven se concentreaz ă pe următoarele aspecte:
 simplificarea etapei de build a aplica ției
 asigurarea unui sistem de build uniform
 migrarea transparent ă a func ționalit ăților noi.
Gestionarea depende țelor este una dintre func ționalit ățile de baz ă ale aplica ției Maven, și una
dintre fu ncționalit ățile î n care Maven exceleaz ă. Aceast ă funcționalitate permite dezvoltatorilor de
aplica ții să specifice în mod explicit libr ăria extern ă, împreun ă cu versiunea acesteia, pe care dore ște
să o integreze în aplica ție, iar Maven o va gestiona în mod transparent at ât pentru dezvoltator, c ât și
pentru aplica ție.
Sistemul de build se concentreaz ă în jurul unui document XML denumit pom.xml ( Project Object
Model – POM ) și a unei mul țimi de plugin -uri gestionate de asemenea tot de catre Maven.
In Figura 18 sunt prezentate etapele parcurse de Maven pentru realizarea buildului aplica ției si
gestionarea dependentelor.

Figura 18. Modul de funcționare al aplicației Maven

24
4.7 Angular 7 Framework
4.7.1 Prezentare generală
Angular este un fram ework destinat dezvoltării aplicațiilor web ce folosește ca limbaj
TypeScript. Aplicațiile create cu ajutorul acestui framework sunt separate în template -uri HTML,
clase de componente scrise pentru a gestiona templete -urile HTML și servicii care conțin log ica
aplicației (Angular Official Website,2016).Această abordare modulară, ilustrată și în Figura 19, ajută
la o dezvoltare rapidă și eficientă a aplicațiilor web.

Figura 19. Arhitectura Angular
4.7.2 Elemente de bază
Cel mai important element din cadrul unei aplcații Angular este modulul aplicației (app –
module), care este folosit pentru a grupa celelalte module și componente pentru ca în final să formeze
un întreg. Fiecare aplicație Angular conține un modul rădăcină (root -module) care are rolul de a lansa
aplicația în execuție.
Clasese componente interacționează cu template -urile și serviciile care conțin logica
aplicației. Acestea sunt grupate împreună cu alte servicii conexe (Angular Official Website,2016).
Modul automat în care date le din HTML sunt legate cu cele din componente și servicii asigură
rapididatea în dezvoltarea aplicațiilor (Angular Official Website,2016).
Serviciile sunt și ele elemente de bază de care avem nevoie pentru a dezvolta o aplicație
Angular. În interiorul lor sunt implementate funționalități care nu au o legătura unică cu componeta, ci
care se pot folosii și în interiorul altor componente.

25
4.7.3 Data binding
Data binding este caracteristica principală a aplicațiilor Angular și este concepută în așa fel
încât sa fie ușor de folosit . Această caracteristică oferă o legătura continuă între datele din paginile
HTML și cele din compenente sau servicii fără a fi nevoie de scrierea unei logici suplimentare. În
momentul în care o dată din pagină se modifică, aceasta este mod ificată și în interiorul componentei,
și viceversa (Angular Official Website,2016).

4.7.4 Dependency I njection
Serviciile sunt inserate în interiorul componentelor prin intermediul unui mecanism numit
Dependency Injection. Este o caracteristică centrală a aplic ațiilor Angular concepută pentru a face
legatura componentă -serviciu cât mai convenabilă. Serviciile care sunt folosite în interiorul
compenentelor sunt declarare în constructorul componentei. Deci pentru a știi ce servicii sunt folosite
în interiorul unei componente este de ajuns să ne uităm la constructorul acesteia. Dependency
Injection face să fie mai ușor procesul de testare.

4.7.5 Librăria HTTP
Librăria Angular HTTP este contruită pe baza clasei din JavaScript „XMLHttpRequest”.
Această librărie suportă toa te cererile de tip HTTP (GET, POST, PUT, DELETE, etc.) . Fiind
construită pe baza „XMLHttpRequest” , caracteristica de bază este trimiterea de cereri HTTP într -un
mod asincron, ceea ce asigură faptul că aplicația nu se va bloca până în momentul în care răsp unsul de
la server va sosi.

4.7.6 Angular Material
Angular Material este o librărie Angular utilizată pentru a crea într -un mod eficient și rapid
interfețe web atractive respectând standardele moderne de dezvoltare a interfețelor aplicațiilor web.

26
5 PROIECT AREA ȘI IMPLEMENTARE A APLICAȚIEI
După cum am prezentat în capitolele anterioare, sistemul este alcătuit dintr -o parte Hardware,
formată din mai mulți senzori conectați la placa de dezvoltare Arduino Uno prin intermediul
cărora vom obține datele care ne aju ta în procesul de monitorizare a locuinței(temperatură,
umiditate, etc.) și o parte Software, reprezentând aplicația web. În continuare voi prezenta delatii
legate de proiectarea și implementarea atât a componentei Software cât și a celei Hardware.
5.1 Proiec tarea Hardware
În dezvoltarea proiectului am utilizat următoarele componente hardware :
 Placa de dezvoltare Arduino Uno
 Modul wifi ESP8266
 Senzor de temperatură și umiditate DHT11
 Senzor detectare gaz MQ -2
 Modul receptor radio frecvență
 Senzor ușă
 Becuri cu wifi integrat

Figura 20. Conectarea senzorilor la placa de dezvoltare

27
MQ-2 VCC Pin Arduino 5V Pin
MQ-2 GND Pin Arduino GND Pin
MQ-2 Analog Pin Arduino A0 Pin
DHT11 VCC Pin Arduino 5V Pin
DHT11 GND Pin Ardunino GND Pin
DHT11 Analog Pin Ardunino A1 Pin
RF Receiver VCC Arduino 5V Pin
RF Receiver GND Arduino GND Pin
RF Digital Pin Arduino Digital Pin 2
ESP8266 VCC Pin Arduino 3.3V Pin
ESP266 GND Pin Arduino GND Pin
ESP8266 EN Pin Arduino 3.3V Pin
ESP8266 RX Pin Arduin o Digital Pin 9
ESP8266 TX Pin Arduino Digital Pin 10
Tabelul 7. Conectarea pinilor modulelor la placa de dezvoltare
Întreg sistemul Hardware funcționează ca un server car e preia datele de la senzori și le
transmite prin intermediul modulului wifi ESP8266. Acesta este programat să funcționeze ca un server
prin intermediul comenzilor definite în Tabelul 8.
Tabelul 8. Comenzi modul ESP8266 Comandă Descriere
AT+CWMODE=3 Setare modul în mod AP și Station
AT+ CWJAP =<ssid>,< pwd > Conectare la rețeaua wireless
AT+ CIPMUX=1 Setare modul pentru a accepta conexiuni multiple
AT+CIPSERVER=1 Pornire server
AT+CIPSEND=<id>,<data_lenght>,<data> Trimitere pachet de date
AT+CIPCLOSE=0 Închidere conexiune

28
5.1.1 Funcția de ob ținere a temperaturii și umidității
Temperatura și umiditatea sunt obținute prin intermediul senzorului DHT11 care este conectat la
placa de dezvoltare Arduino Uno. Pentru a citii valorile respective am utilizat librăria „dht.h”.

1. #include "dht.h"
2. #define dht_apin A1
3.
4. double temperatureSensor(){
5. DHT.read11(dht_apin);
6. double temp = DHT.temperature;
7. return temp;
8. }
9. double humiditySensor(){
10. DHT.read11(dht_apin);
11. double hum = DHT.humidity;
12. return hum;
13. }

5.1.2 Funcția de verific are a senzorului de gaz
Prin intermediul acestei funcții vom afla dacă în încăpere exsită sau nu scăpări de gaze. Pentru
aceasta vom compara valoarea trimisă de către senzor cu o valoare de referință definită de către noi.
Dacă senzorul emite o valoare mai mare decât valoarea de referință atunci în încăpere sunt scăpări de
gaze, în caz contrar rezultă faptul că în încăpere nu există scăpări de gaze.

1. int sensorGasPin = A0;
2. int valoareReferintaSenzorGaz = 500;
3.
4. bool gasSensor(){
5. int analogSensor = analogRead(sensorGasPin);
6. if (analogSensor > valoareReferintaSenzorGaz){
7. return true;
8. }else{
9. return false;
10. }
11. }

29
5.1.3 Funcția de verificare a senzorului pentru ușă
Prin intermediul acestei funcții vom verifica daca ușa este închi să sau deschisă. Senzorul pentru
ușă emite două valori diferite pentru starea de deschis respectiv pentru starea de închis. Aceste valori
sunt recepționare prin intermediul senzorului de recepție a radio frecvenței. Pentru utilizarea
senzorului de recepți e am folosit librăria „RCSwitch .h”.
1. #include <RCSwitch.h>
2. RCSwitch senzorReceptie = RCSwitch();
3. bool door = false;
4.
5. void readRadioFrequencySensor(){
6. if (mySwitch.available()){
7. if(mySwitch.getReceivedValue()==2968586){
8. door = true;
9. }else if(mySwitch.getReceivedValue()==2968590){
10. door = false;
11. }
12. mySwitch.resetAvailable();
13. }
14. }

5.2 Proiectarea Software
5.2.1 Definirea cerințelor
În această secțiune voi prezenta cazurile de utilizare pentru fiecare ti p de utilizator care poate
interacționa cu aplicația. Exsită două tipuri de utilizatori care pot interacționa cu aplicația, utilizatorul
neautentificat respectiv utilizatorul autentificat.
5.2.1.1 Clasa utilizator neînregistrat
Use Case : Înregistrarea în sistem

30
Descriere :
1. Utilizatorul neautentificat trebuie să navigheze către formularul de înregistrare
2. Utilizatorul trebuie să completeze toate câmpurile formularului
3. Sistem va indica daca toate câmpurile sunt completate cu date valide
4. Dacă datele sunt valide, ut ilizatorul este capabil să se înregistreze în sistem
5. Dacă datele nu sunt valide, se va afișa un mesaj de eroare
5.2.1.2 Clasa utilizator înregistrat
Use Case : Autentificarea în sistem

Descriere :
1. Utilizatorul înregitrat trebuie sa navigheze la pagina de autentifi care
2. Utilizatorul trebuie să completeze formularul de autentificare
3. Sistemul verifică dacă datele introduce sunt corecte
4. Dacă datele introduse sunt correct, utilizatorul este redirecționat către pagina corespunzătoare
propriei case
5. Dacă datele introduse nu sunt corecte, sistemul va afișa un mesaj de eroare
Use Case :Afișare informații despre utilizarea sistemului

31
Descriere :
Pentru a afla informații despre utilizarea sistemului utilizatorul trebuie să apese butonul „Learn how
to use” din meniul din st ânga paginii. După apăsarea butonului se va deschide o fereastră care conține
informații referitoare la modul de utilizare al sistemului.
Use Case : Verificarea dispozitivelor

Descriere :
Pentru a primii informații de la dispozitivele din casă, utilizatorul tre buie să apese butonul „Check
devices” din meniul din stânga paginii.După apăsarea butonului informațiile referitoare la
dispozitivele din propria casă vor fi actualizare
Use Case : Aprindere/Stingere becuri

Descriere :
1. Pentru a aprinde unul dintre becuri, utilizatorul trebuie să apese butonul corespunzător becului
dorit astfel încât acesta să fie poziționat la dreapta.
2. Pentru a stinge unul dintre becuri, utilizatorul trebuie să apese butonul corespunzător becului
dorit astfel încât acesta să fie poziționat la stânga.
Use Case : Setare intensitate becuri

32
Descriere :
Pentru a seta intensitatea unuia dintre becuri, utilizatorul trebuie să poziționeze indicatorul de pe bara
de selecție a intensității la valoarea dorită.
Use Case : Setare program de aprindere a be curilor

Descriere :
Utilizatorul își poate seta un program de aprindere automată a becurilor. Pentru aceasta acesta trebuie
să apese butonul „Set a schedule” din meniul din stânga paginii. După apăsarea butonului sistemul va
deschide o fereastră în care u tilizatorul își va seta programul dorit de aprindere sau stingere a
becurilor.
Use Case :Gestionare notificări

Descriere :
Utilizatorul este capabil să gestioneze notificările. Pentru aceasta acesta trebuie să apese butonul din
meniul din stânga paginii „N otifications”. După apăsarea butonului sistemul va deschide o fereastră
iar utilizatorul va fi capabil sa pornească sau să oprească notificările prin sms sau prin email pentru
fiecare senzor în parte.

33
5.2.2 Arhitectura aplicației
Acest tip de arhitectură pre supune dezvoltarea unei aplicații ca o suită de servicii, unde
fiecare serviciu are rolul de a se ocupa de o arie specifică (business module). Aceste module trebuie să
comunice prin intermediul unor mecanisme simple (ex. HTTP REST) și să fie construie în j urul unor
domenii logice bine definite și delimitate. Ele trebuie să fie ușor de lansat în producție, independente
unele de altele, iar managementul acestoră să se facă la un nivel cât mai decentralizat. Arhitectura
acestui sistem corespunde arhitecturii b azate pe microservicii.

Figura 21. Arhitectura aplicației
După cum se poate observa în Figura 21, aplicația este alcătuită din cinci servicii: UserService,
BulbService, BulbScheduleService, NotificationService și SensorService.

34
UserService se ocupă cu înregistrarea utilizatorilor, autentificarea utilizatorilor și modificarea
datelor utilizatorilor. Dispune de următoarele endpoint -uri:
Cale Parametrii /Body HTTP Request Descriere
/register JSON tip UserModel POST Înregistrare în sistem
/login JSON tip UserModel POST Autentificare
/user JSON tip UserModel PUT Modificare detalii
user

BulbService se ocupă cu acțiunile care se execută asupra becurilor, precum stingerea lor,
aprinderea lor sau setarea intensității. Controlol becurilor este realizat prin intermediul unor scripturi
preluate de la adresa : https://www.npmjs.com/package/magic -home . Deci BulbService este un strat de
legătura între client(browser) și aceste scripturi. Dispune de următoarel e endpoint -uri:
Cale Parametrii/Body HTTP
Request Descriere
/bulb/{type}{bulbIp} type:0 – bec stins,
1 – bec aprins
bulbIp – ip-ul
becului GET Aprindere/Stingere
bec
/bulb/brightness/{value}{bulbIp} value – valoare
intensitate
bulbIp – ip-ul
becului GET Setare intensitate
luminoas ă

35
BulbScheduleService se ocupă cu gestionarea programelor automate de stingere sau aprindere
a becurilor setate de către utilizator. Prin intermediul acestui serviciu se inserează sau se șterge din
baza de date programul specific setat de către utilizator. Dispune de următoarele endpoint -uri:
Cale Parametrii/Body HTTP
Request Descriere
/bulb/schedule JSON tip
BulbScheduleModel POST Setare program
automat becuri
/bulb/schedule/{bulbIp} bulbIp – ip-ul
becului GET Returnar ea
programelor pentru
un anumit bec.

Notificatio nService se ocupă cu gestiunea notificărilor. Prin intermediul acestui serviciu sunt
preluate datele de la client referitoare la modul în care acesta dorește să primească notificările , sunt
salvate în baza de date iar apoi sunt puse la dispoziție logigii aplicației pentru buna funcționare a
acesteia. Dispune de următoarele endpoint -uri:
Cale Parametrii/Body HTTP
Request Descriere
/notification/{houseId} houseId – id-ul casei
din baza de date PUT Setare not ificări
pentru o anumită
casă
/notification/{houseId} houseId – id-ul casei
din baza de date GET Returnarea
notificărilor pentru
o anumită casă

SensorService se ocupă cu preluarea datelor de la serverul Arduino, salvarea lor în baza de
date și punerea la dispoziție clientului (browserului). Preluarea datelor de la serverul Arduino se
prealizează prin intermediul unei cereri HTTP GET. Dispune de următoarele endpoint -uri:
/sensor/value/{houseId} houseId – id-ul casei
din baza de date GET Returnarea valori lor
senzorilor

36
5.2.3 Structura Bazei de Date
Proiectarea unei baze de date constă din proiectarea schemei conceptuale (logice) și fizice a
acesteia, astfel încât să răspundă cerintelor utilizatorilor pentru un anumit set de aplicații. În general,
se considera c ă proiectarea unei baze de date se poate diviza în urmatoarele faze:
 Colectarea și analiza cerintelor.
 Proiectarea conceptuala a bazei de date.
 Alegerea unui SGBD.
 Proiectarea logică a bazei de date.
 Proiectarea fizică a bazei de date.
În cadrul proie ctului am folosit ca și server de baze de date MySql despre care am detaliat
câteva aspect în secțiunea 4.4. Baza de date conține sașe tabele: tabelul `user`, tabelul `smarthome`,
tabelul `sensor`, tabelul `notification`, tabelul `bulb_schedule` și tabelul `bulb`.
Tabelul user
Este tabelul corespunzător utilizatorilor. Aici sunt stocate toate informațiile referitoare la utilizatori.

Tabelul smarthome
Este tabelul de identificare al casei. Aici se stochează id -ul casei, ip -ul casei și id -ul utilizatorului.

37
Tabelul sensor
În acest tabel se stochează toate informațiile preluate de la senzori.

Tabelul notification
Acesta este tabelul de gestiune al notificărilor. În interiorul lui se salvează modul în care utilizatorul
dorește să primească notificările di n partea sistemului.

Tabelul bulb
Acesta este tabelul corespunzător becurilor. În interiorul lui sunt salvate detalii despre fiecare bec.

38
Tabelul bulb_schedule
În acest tabel se salvează programele de aprindere/stingere automată a becurilor.

5.2.3.1 Mode lul entitate -legătura
Este un model conceptual de nivel înalt al unei baze de date, care definește mulțimile de
entități și asocierile dintre ele, dar nu impune nici un mod specific de structurare si prelucrare a
datelor. Elementele esențiale ale modelului Entitate -Legătură sunt entitățile (entities) si asocierile
dintre acestea (relationships). O entitate (entity) este "orice poate fi identificat în mod distinctiv".
O entitate se refera la un aspect al realității obiective care poate fi deosebit de restul universului și
poate reprezenta un obiect fizic, o activitate, un concept, etc. Orice entitate este descrisa prin
atributele sale. Un atribut (attribute ) este o proprietate care descrie un anumit aspect al unei entitati.
O asociere (relationship ) este o corespondență între entități din două sau mai multe mulțimi
de entități. Gradul unei asocieri este dat de numărul de mulțimi de entități asociate. Asocierile pot fi
binare (de gradul 2, între 2 mulțimi de entități) sau multiple (între k multimi de entită ți, k> 2).
Asocierile binare sunt, la rândul lor, de trei categorii, după numarul elementelor din fiecare dintre cele
două mulțimi puse în corespondență de asocierea respectiva. Fiind date doua multimi de entitati, E1 si
E2, se definesc urmatoarele categor ii de asocieri binare:
Asocierea “unul -la-unul” (one -to-one) este asocierea prin care unui element (entitate) din
mulțimea E1 îi corespunde un singur element din multimea E2, ș i reciproc; se noteaza cu 1:1.
Asocierea “unul -la-multe” (one -to-many) este a socierea prin care unui element din mulț imea
E1 îi corespund unul sau mai multe elemente din mulț imea E2, dar unui element din E2 îi corespunde
un singur element în mulțimea E1; se noteaza cu 1:N.

39
Asocierea “multe -la-multe” (many -to-many) este asocierea prin care unui element din
mulțimea E1 îi corespund unul sau mai multe elemente din mulț imea E2, si reciproc; se noteaza cu
M:N.

Figura 22. Modelul entitate -legătura
5.2.3.2 Modelul relațional
Modelul relational se bazeaza pe conceptul matematic de relatie , repre zentat fizic sub forma
de tabel . Un SGBD relational necesita ca baza de date sa fie perceputa de catre utilizator doar sub
forma de tabele. Aceasta perceptie se aplica numai structurii logice a bazei de date – adica nivelurilor
externe si conceptuale ale a rhitecturii ANSI -SPARC. Nu se aplica si structurii fizice a bazei de date,
care poate fi implementata utilizand o varietate de structuri de stocare. O relatie este reprezentata de
un tabel bidimensional, in care randurile acestuia corespund inregistrarilor individuale, iar coloanele
corespund atributelor. Atributele pot aparea in orice ordine, relatia ramanand neschimbata.

40

Figura 23. Modelul relațional

5.2.4 Funcționalități și detalii de implementare
5.2.4.1 Funcția de înregistrare
Această funcție asigură înregistrare a noilor utilizatori în sistem. Utilizatorul completează
formularul de înregitrare, iar acesta este trimis la back -end unde are log inserarea în baza de date.
1. @Autowired
2. UserRepository userRepository;
3.
4. @Transactional
5. public void register(User user) {
6. if (user.getLastName() != null && user.getFirstName() != null && user.getEmail() != null
7. && user.getPassword() != null && user.getPhoneNumber() != null && user.getAdress() != null) {
8. userRepository.save(user);
9. }
10. }

41
Funcția primește ca parametru un obiect de tip User și verifică dacă toate atributele clasei user
sunt prezente urmând să aiba loc inserarea în baza de date.
În front -end se execută urmatoarea funcție. Aceasta preia datele din formular și trimite o
cerere H TTP POST la server având ca și RequestBody JSON -ul format din atributele preluate din
formular.
1. register(firstName,lastName,email,password,adress,phoneNumber){
2. this.httpClient.post( "http://localhost:8080/smarthome/register" ,
3. {
4. lastName: lastName,
5. firstName:firstName,
6. email:email,
7. password:password,
8. adress:adress,
9. phoneNumber:phoneNumber
10. }).subscribe(
11. (data:any) => {
12. console.log(data);
13. alert("Your account has been successfully created. Please log in!");
14. this.router.navigate([ '/login' ]);
15. }
16. )
17. }
5.2.4.2 Funcția de autentificare
Odată înregistrat în sistem, pentru a putea avea acces la funcționalitățile principale ale
sistemului, utilizatorul trebuie să se autentifice. Pentru aceasta, utilizatorul trebuie să completeze
formularul de autentificare. Sistemul preia datele din formular și le transmite la back -end prin
intermediul unei cereri HTTP POST ce are ca RequestBody un JSON de tip User. Pe server se
verifică dacă utilizatoru l este existent în baza de date, în caz afirmativ este direcționat către pagina
propriei, în caz contrat se va afișa un mesaj de eroare.
Implementarea funcției de autentificare este asemănătoare cu cea a funcției de înregistrare.
5.2.4.3 Funcția de aprindere/stingere a becurilor
Odată autentificat, utilizatorul are acces la toate facilitățile aplicației. Una dintre acestea este
posibilitatea de aprindere/stingere a becurilor. În momentul în care utilizatorul apasă butonul de
stingere/apri ndere al becului se apeleaza o cerere HTTP GET către server. Serverul back -end primește
cererea și are loc aprinderea/stingerea becului. Aprindere/stingerea becurilor, după cum am menționat
în capitolele anterioare, prin intermediul unor scripturi ce sunt apelate în linia de comandă prin
intermediul aplicației back -end.

42
Trimiterea cererii către server
1. public bulbOnOff(state,ip) {
2. this.httpClient.get( "http://localhost:8080/smarthome/bulb/" + state + "?bulbIp=" + ip)
3. .subscribe((data:any) =>{
4. console.log(data);
5. })
6. }

Funcția de aprindere a becului
1. @Transactional
2. public void turnOnBulb(String ip) throws Exception {
3. cmd = new CommandPromptCommands();
4. cmd.sendOnCommand(ip);
5. bulbRepository.updateBulbState(1, ip);
6. }

Funcția de apelare a scriptului din linia de comandă
1. public String sendOnCommand(String ip) throws Exception {
2. System.out.println(StaticData.CLEVER_HOME_BULB_PATH);
3. ProcessBuilder builder = new ProcessBuilder(
4. "cmd.exe" , "/c", "cd " + StaticData.CLEVER_HOME_BULB_PATH + "\" && node cli.js turnon \"" + ip
+"\"");
5. builder.redirectErrorStream( true);
6. Process p = builder.start();
7. BufferedReader r = new BufferedReader( new InputStreamReader(p.getInpu tStream()));
8. String line="";
9. String result="";
10. while (true) {
11. line = r.readLine();
12. if (line == null) { break; }
13. System.out.println(line);
14. result+=line;
15. }
16. return result;
17. }

5.2.4.4 Funcția de gestionare a notificărilor
Pentru a evita deranjarea inutilă a utilizatorilor, sistemul oferă posibilitatea opririi notificărilor pentru
fiecare senzor în parte. Pentru aceasta se realizează o cerere HTTP PUT către server, ce are în
RequestBody un JSON de tipul Notification. Serverul back -end primește cererea și updatează
informațiile din baza de date.

43
5.2.4.5 Funcția de trimitere a notificărilor
După cum am amintit în capitolele anterioare, utilizatorul primește notificări prin SMS sau email.

Funcția de trimitere a notificărilor prin email
1. @Transactional
2. public void sendEmail(String emailToSend, String type) {
3.
4. Properties prop = new Properties();
5. prop.put( "mail.smtp.host" , "smtp.gmail.com" );
6. prop.put( "mail.smtp.port" , "587");
7. prop.put( "mail.smtp.auth" , "true");
8. prop.put( "mail.smtp.starttls.enable" , "true"); // TLS
9.
10. Session session = Session.getInstance(prop, new javax.mail.Authenticator() {
11. protected PasswordAuthentication getPasswordAuthentication() {
12. return new PasswordAuthentication(StaticData.CLEVER_HOME_EMAIL, StaticData.CLEVER_HOME_PASS
WORD);
13. }
14. });
15.
16. try {
17. Message message = new MimeMessage(session);
18. message.setFrom( new InternetAddress(StaticData.CLEVER_HOME_EMAIL));
19. message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(emailToSend));
20. switch (type) {
21. case "door":
22. message.setSubject( "Notificare usa");
23. message.setText( "Salut " + emailToSend + "," + "\n\n S-
a produs o actiune asupra usei dumneavoastra!"
24. + "Va rugam sa verificati!" + "\n\n O zi buna," + "\n Echipa Clever Home");
25. Transport.send(message);
26. break;
27. case "gas":
28. message.setSubject( "Notificare senzor gaze");
29. message.setText( "Salut " + emailToSend + "," + "\n\n Senzorul de gaze a depasit valoarea no
rmala!"
30. + "Va rugam sa verificati!" + "\n\n O zi buna," + "\n Echipa Clever Home");
31. Transport.send(message);
32. break;
33. }
34. System.out.println( "Done");
35.
36. } catch (MessagingException e) {
37. e.printStackTrace();
38. }
39. }
Funcția de trimitere a notificărilor prin SMS
Pentru trimiterea notificărilor prin SMS am folosit librăria Java „com.twilio” car e este oferită de
platforma https://www.twilio.com/ .Pentru folosirea acestei platforme este nevoie de crearea unui cont
pe platforma mai sus specificată.

44
1. @Transactional
2. public void sensSMSNotification(String phoneNumber, String type) {
3. Twilio.init(StaticData.ACCOUNT_SID, StaticData.AUTH_TOKEN);
4.
5. switch (type) {
6. case "door":
7. com.twilio.rest.api.v2010.account.Message messageDoor = com.twilio.rest.api.v2010.account.Mes sa
ge
8. .creator( new PhoneNumber(phoneNumber), // to
9. new PhoneNumber(StaticData.CLEVER_HOME_PHONE_NUMBER), // from
10. "Buna ziua!S-
a produs o actiune asupra usei dumneavoastra!Va rugam sa verificati!" )
11. .create();
12. break;
13. case "gas":
14. com.twilio.rest.api.v2010.account.Message messageGas = com.twilio.rest.api.v2010.account.Messag
e
15. .creator( new PhoneNumber( phoneNumber), // to
16. new PhoneNumber(StaticData.CLEVER_HOME_PHONE_NUMBER), // from
17. "Buna ziua!Senzorul de gaze a depasit valoarea normala!Va rugam sa verificati!"
)
18. .create();
19. break;
20. }
21. }
Funcția de verificare a momentului în care trebuiesc trimise notificările

45
5.2.4.6 Funcția de setare program pentru becuri
Utilizatorul își poate seta un program automat de stingere/aprindere al becurilor. Pentru aceast a,
utilizator ul trebuie să seteze programul dorin în fereastra destinată acestei funcționalități. Odată setat
programul, acesta se va insera în baza de date iar sistemul va verifica în fiecare minut dacă există o
comandă de aprins/stins în acel moment de t imp.

1. @Transactional
2. public void startSchedule() throws Exception {
3. for(BulbSchedule bulbSchedule : bulbScheduleRepository.getAllSchedules()) {
4. if(bulbSchedule.getDays().contains(currentDay)) {
5. if(bulbSchedul e.getTime().equals(currentTime)) {
6. if(bulbSchedule.getAction().equals( "ON")) {
7. bulbService.turnOnBulb(bulbSchedule.getIp());
8. }else {
9. bulbService.turnOffBulb(bul bSchedule.getIp());
10. }
11. }
12. }
13. }
14. }

Această funcție se va executa în fiecare minut prin intemediul unui executor.
1. @Scheduled (fixedRate = 60000)
2. public void execSchedFunction() throws Exception {
3. bulbScheduler = new BulbScheduler(bulbService, bulbScheduleRepository);
4. bulbScheduler.startSchedule();
5. sendNotifications();
6. }

5.2.4.7 Funcția de deconectare
Pentru a se deconecta, utilizatorul trebuie să apese butonul „Log out” și se va executa
următoarea funcție.
1. logOut(){
2. sessionStorage.clear();
3. location.replace( "http://localhost:4200/" );
4. }

46
6 MANUALUL UTILIZATORU LUI
În această secțiune vom prezenta pas cu pas modul în care aplicația poate fi folosit ă de către
utilizatori.
6.1 Înregistrarea în sistem
Pentru ca un utilizator să se înregistreze în sistem, acesta trebuie să completeze formularul de
înregistrare și să apese butonul „Create new account”

Figura 24. Formular înregistrare
6.2 Autentificarea în sist em
Pentru ca un utilizator să se autentifice în sistem, acesta trebuie să completeze formularul de
autentificare și să apese butonul „Login”

Figura 25. Formular autentificare

47
Odată autentificat, utilizatorul va fi redirecționat către pagina propriei case . Aceasta este
asemănătoare cu cea din figura următoare.

Figura 26. Pagina principală a casei
6.3 Afișare și modificare detalii utilizator
Utilizatorul are posibilitatea de a vedea și modifica detaliile contului personal. Pentru aceasta, trebuie
să apese but onul din colțul din dreapta sus în care apare numele acestuia. După apăsarea butonului se
deschide o fereastră ca cea din figura următoare iar utilizatorul va avea posibilitatea de a vizualiza sau
modifica datele personale.

Figura 27. Fereastră detalii u tilizator

48

6.4 Afișare informații despre modul de utilizare
Utilizatorul poate să obțină serie de informații despre utilizarea aplicației chiar prin intermediul
interfeței web. Pentru aceasta trebuie să apese butonul „Learn how to use” din meniul din stânga
paginii. După apăsarea butonului se va deschide o fereastră ca cea din figura următoare.

Figura 28. Fereastră informații mod utilizare
6.5 Setare și vizualizare a programelor de stingere automată a becurilor
Utilizatorul își poate seta un anumit program pentru stingerea și aprinderea becurilor din casă. Pentru
aceasta trebuie să apese butonul „Set a schedule” din meniul din stânga paginii. După apăsarea
butonului se va deschide o fereastră ca cea din figura următoare. Utilizatorul își poate alege în ce zile
și la ce ore becurile să se stingă sau să se aprindă automat. După alegerea preferințelor, pentru ca
programul să se salveze trebuie să se apese butonul „Set” iar apoi butonul „Save”.

49

Figura 29. Fereastră setare becuri
6.6 Actualizare date din interfață
Actuali zarea datelor din interfață se realizează automat la fiecare doua minute. Totuși dacă utilizatorul
dorește să actualizeze datele manual el o poate face apasând butonul „Check devices” din meniul din
stânga paginii. După apăsarea butonului se va deschide o fereastră ca cea din figura următoare și va
dispărea în momentul în care datele sunt actualizate.

Figura 30. Fereastră actualizare date din interfață

50
6.7 Gestionarea notificărilor
Utilizatorii aplicației își pot gestiona notificările după bunul plac. Pentru aceasta trebuie să apese
butonul „Notifications” din meniul din stânga paginii. După apăsarea butonului se va deschide o
fereastră ca cea din figura următoare și prin intermediul acesteia utilizatorul este capabil să își
gestioneze notificările.

Figura 3 1. Fereastra notificărilor
6.8 Aprindere/Stingere și setare intensitate luminoasă a becurilor
Pe lângă modul de aprindere/stingere automată a becurilor, utilizatorii pot să stingă/aprindă becurile
în mod manual. Pentru aceasta trebuie să apese butonul din figu ra următoare. Totodată utilizatorii pot
seta intensitatea luminoasă a becurilor. Pentru aceasta trebuie să poziționeze indicatorul de pe slider la
valoarea dorită.

Figura 32. Aprindere/Stingere bec

51
6.9 Monitorizare informații casă
Utilizatorul are posibilita tea de a monitoriza senzorii din propria casă.
Temperatura

Umiditatea

Senzorul de detecție al gazelor

Senzor ușă

52
7 CONCLUZII
În cadrul acestui proiect am prezentat o soluție prin care oamenii își pot monitoriza și gestiona
dispozitivele din propria c asă. Datorită simplității intefeței cu utilizatorul și prin intermediul
manualului de utilizare prezenatat în Secțiunea 6, acest sistem poate fi utilizat foarte ușor de către
utilizatori nefiind nevoie de cunoștințe avansate în domeniul tehnologiei și info rmației, orice
funcționalitate a acestui sistem fiind la un „click” distanță.
Referitor la modul de implementare al aplicației web, s -au respectat standardele moderne în
dezvolta rea aplicațiilor web, s-au respectat principiile programării orientate pe obie cte și s -au utilizat
unele dintre cele mai moderne tehnologii de dezvoltare al aplicațiilor web.
Componentele hardware utilizate în dezvoltarea sistemului, prezentate pe scurt în Secțiunea 3,
sunt soluții cu un preț de achiziționare scăzut dar de o calitat e foarte bună, acest fapt oferind
sistemului un raport preț -calitate foarte bun.
Acest proiect mi -a oferit posibilitatea de a interacționa cu diferite tehnologii și de a -mi extinde
cunoștințele în dezvoltarea aplicațiilor web, în dezvoltarea aplicațiilor o rientate pe obiect cât și cele în
domeniul sistemelor integrate.

7.1 Direcții viitoare de dezvoltare
În viitorul apropiat doresc să dezvolt acest sistem prin noi funcționalități precum : controlul și
monitorizarea prizelor, controlul și monitorizarea apometrel or, controlul termostatelor centralelor
termice, închiderea/deschiderea automată a porților, închiderea/deschiderea automată a ușilor de garaj
și închiderea/deschiderea jaluzelelor de la geamuri. O altă funcționalitate pe care doresc să o
implementez în vi itoarele versiuni ale sistemului ar fi descoperirea automată și configurarea
dispozitivelor prin intermediul intefeței cu utilizatorul. În versiunile următoare sistemul va avea și o
clasă administrator care să se ocupe de gestiunea utilizatorilor și de pro blemele semnalate de aceștia.
Totodată doresc implementarea unor algoritmi de învățare automată prin care sistemul să învețe
comportamentul de zi cu zi al utilizatorului și să îî ofere acestuia programe automate de gestiune a
dispozitivelor din propria cas ă, fară a fi nevoie ca utilizatorul să definească propriile programe.

53
8 BIBLIOGRAFIE
I. Tomphson . (2014). Internet of Things for Enterprise Systems.
M.Steven. (2010). HTML, XHTML, and CSS Bible, 5th Edition. In M.Steven.

54
9 REFERIN ȚE WEB
MDN (2016). What is a web server? Disponibil la adresa:
https://developer.mozilla.org/en -US/docs/Learn/Common_questions/What_is_a_web_server.
I.Codesido (2009, September 28). What is front -end development? Disponibil la adresa:
https://www.theguardian.com/help/insideguardian/2009/sep/28/blogpost
Liliana, S. E. (2016, May). STUDIU DE FUNDAMENTARE A CONCEPTULUI "INTERNET OF
THINGS" Disponibil la adresa:
http://www.imst.pub.ro/Upload/Studenti/SSS_2016/lucrarile_sesiunii_stud_2016/STUDIU_DE_FUN
DAMENTARE_A_CONCEPTULUI_INTERNET_OF_THINGS.pdf
Cristian Bratu. (2018). Microcontrolere și aut omate programabile. Disponibil la adresa:
http://retele.elth.ucv.ro/Bratu%20Cristian/MAP/001%20 -%20Curs%20001%20 -%20MAP%20 –
%20Microcontr olerul.pdf
Datasheet Arduino Uno. Disponibil la adresa:
https://www.farnell.com/datasheets/1682209.pdf
Angular Official Website. Disponibil la adresa :
https://angular.io/docs

55
A. CODUL SURSĂ
În această anexă se adaugă codul sursă al aplicației…

56
B. SITE -UL WEB AL PROIE CTULUI
Autorul prezintă în această anexă (opțională) site -ul web asociat proiectului său.

57
C. CD / DVD
Autorul atașează în acea stă anexă obligatorie , versiunea electronică a aplicației, a acestei
lucrări, precum și prezentarea finală a tezei .

58
INDEX
B
Bibliografie ………………………….. ………………………. 9
C
CUPRINSUL ………………………….. …………………… xi
D
Dimensiuni ………………………….. ………………………. 3
F
Figuri ………………………….. ………………………….. ….. 4
Formulele matematice ………………………….. ……….. 4
I
Ilustrațiile ………………………….. …………………………. 4 L
Legenda ………………………….. ………………………….. .. 6
LISTA FIGURILOR ………………………….. ………… xii
LISTA TABELELOR ………………………….. ……… xiii
R
Referințe web ………………………….. ………………….. 10
S
Structura documentului ………………………….. ………. 2
T
Tabele ………………………….. ………………………….. …. 5

Similar Posts