This shows you the differences between two versions of the page.
pm:prj2023:ncaroi:aquarium-device [2023/05/26 12:24] ana_corina.rafaila [Software Design] |
pm:prj2023:ncaroi:aquarium-device [2023/05/27 00:34] (current) ana_corina.rafaila [Descriere generală] |
||
---|---|---|---|
Line 9: | Line 9: | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | {{ :pm:prj2023:ncaroi:untitled_diagram.jpg?200 |}} | + | {{ :pm:prj2023:ncaroi:diagrama_pm_raf.png?200 |}} |
Senzorul va monitoriza în permanență nivelul apei. Odată cu schimbarile apărute și detectate, culoarea LED-ului RGB se va modifica. Atunci când o limită prestabilită va fi depașită, utilizatotul va fi notificat in cadrul aplicatiei, dar si prin email. Astfel, i se va pune la dispozitie un API ce poate controla pompa de apa. Pompa de apa va reumple acvariul cu o cantitate de apă afalata in parametrii admisi. În tot acest timp, ecranul LED va afișa mesaje sugestive. Mecanismul de notificare va fi realizat prin integrarea cu un client de MQTT si Apache Kafka în cadrul aplicației Web dezvoltate în framework-ul Spring. | Senzorul va monitoriza în permanență nivelul apei. Odată cu schimbarile apărute și detectate, culoarea LED-ului RGB se va modifica. Atunci când o limită prestabilită va fi depașită, utilizatotul va fi notificat in cadrul aplicatiei, dar si prin email. Astfel, i se va pune la dispozitie un API ce poate controla pompa de apa. Pompa de apa va reumple acvariul cu o cantitate de apă afalata in parametrii admisi. În tot acest timp, ecranul LED va afișa mesaje sugestive. Mecanismul de notificare va fi realizat prin integrarea cu un client de MQTT si Apache Kafka în cadrul aplicației Web dezvoltate în framework-ul Spring. | ||
Line 28: | Line 28: | ||
* Tehnologii si tool-uri: Spring Framework, Mosquitto, Apache Kafka, Docker | * Tehnologii si tool-uri: Spring Framework, Mosquitto, Apache Kafka, Docker | ||
* Medii de dezvoltare: Arduino IDE, IntelliJ IDEA | * Medii de dezvoltare: Arduino IDE, IntelliJ IDEA | ||
+ | * Librarii Arduino IDE utilizate pentru: LCD, MQTT Client, ESP32 | ||
</note> | </note> | ||
+ | |||
+ | Proiectul se bazeaza, in principal, pe comunicarea prin intermediul protocolului MQTT. Aplicatia scrisa pentru Arduino realizeaza conexiunea wireless prin utilizarea modulului ESP32. Odata stabilita conexiunea la internet, se creeaza clientul MQTT care trimite/primeste mesaje pe topicuri predefinite: "mqtt/waterlevel" & "mqtt/waterpump". | ||
+ | |||
+ | Senzorul de nivel al apei monitorizeaza constant valorile nivelului apei si le trimite broker-ului de MQTT - Mosquitto - care ruleaza pe un container. Valorile trimise sub forma de mesaje catre broker sunt, la randul lor, "consumate" si prelucrate de un alt client de MQTT dezvoltat in framework-ul Spring. Mai departe, valorile sunt manipulate de un producer de Kafka, ce publica mesaje pe topicele corespunzatoare. | ||
+ | |||
+ | Consumer-ul de Kafka este construit in cadrul unei noi aplicatii de Spring. Legatura dintre producer si consumer se realizeaza prin broker-ul de Kafka ce ruleaza pe un container. Pentru un management mai bun al situatiei interne in ceea ce priveste folosirea de Apache Kafka, am utilizat, de asemenea, un container pentru Zookeeper. | ||
+ | |||
+ | Aplicatia ce sustine consumer-ul de Kafka realizeaza si business-ul notificarilor. Sistemul de notificare dispune de trimitere de email-uri si de afisarea unor mesaje intr-o pagina html. Pentru management-ul notificarilor cu privire la posibilele nereguli legate de acvariu, am folosit o baza de date PostgreSQL. | ||
+ | |||
+ | Astfel putem concluziona un model arhitectural bazat pe microservicii. | ||
+ | |||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | Rezultatele obtinute in urma finalizarii si conectarii componentelor Hardware si Software: |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | {{ :pm:prj2023:ncaroi:pm_proj_img1.jpeg?200 |}} |
- | </note> | + | |
- | ===== Concluzii ===== | + | {{ :pm:prj2023:ncaroi:pm_proj_img2.jpeg?200 |}} |
- | ===== Download ===== | + | {{ :pm:prj2023:ncaroi:pm_proj_html_page.jpeg?300 |}} |
- | <note warning> | + | {{ :pm:prj2023:ncaroi:pm_proj_email.jpeg?200 |}} |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | ===== Concluzii ===== |
- | </note> | + | In urma realizarii acestui proiect, am realizat munca din spatele proiectelor IoT si dificultatile ce pot aparea la fiecare pas, fie ca este vorba de componentele Hardware utilizate sau chiar de sistemul de operare folosit pentru procesul de development. |
- | ===== Jurnal ===== | + | A fost o experienta interesanta care a venit cu multe provocari si care a necesitat cunostinte dobandite pe parcursul celor 3 ani de facultate, dar si mult research pe cont propriu. |
+ | ===== Download ===== | ||
- | <note tip> | + | {{:pm:prj2023:ncaroi:aquariummonitoringdevice.zip|}} |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
- | </note> | + | |
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * https://docs.spring.io/spring-kafka/reference/html/ |
+ | * https://randomnerdtutorials.com/esp32-mqtt-publish-bme680-arduino/#more-99496 | ||
+ | * https://drive.google.com/file/d/1JTzyLH7v0MgjwvOnUrzih87RpIXkxrZg/view?usp=sharing | ||
+ | * https://docs.spring.io/spring-integration/reference/html/mqtt.html | ||
</note> | </note> | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||