Compare commits

...

6 Commits

Author SHA1 Message Date
a458ad1712 Added birdnetes introduction 2020-11-27 15:37:25 +01:00
030b259d32 Added introduction 0.1 2020-11-26 19:44:53 +01:00
022852b163 Added abtract 0.4 2020-11-26 17:33:49 +01:00
2d5eca233e Added abtract 0.3 2020-11-26 16:28:33 +01:00
9d6e0cd453 Added abtract 0.2 2020-11-26 16:24:02 +01:00
a2c3112f81 Added abtract 0.1 2020-11-26 15:35:03 +01:00
17 changed files with 343 additions and 47 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

@ -1,9 +1,9 @@
\relax \relax
\providecommand\hyper@newdestlabel[2]{} \providecommand\hyper@newdestlabel[2]{}
\@writefile{toc}{\select@language{magyar} \contentsline {chapter}{Kivonat}{i}{chapter*.2}\protected@file@percent } \@writefile{toc}{\select@language{magyar} \contentsline {chapter}{Kivonat}{i}{chapter*.2}\protected@file@percent }
\@writefile{toc}{\select@language{english} \contentsline {chapter}{Abstract}{ii}{chapter*.3}\protected@file@percent } \@writefile{toc}{\select@language{english} \contentsline {chapter}{Abstract}{iii}{chapter*.3}\protected@file@percent }
\@setckpt{content/abstract}{ \@setckpt{content/abstract}{
\setcounter{page}{3} \setcounter{page}{4}
\setcounter{equation}{0} \setcounter{equation}{0}
\setcounter{enumi}{0} \setcounter{enumi}{0}
\setcounter{enumii}{0} \setcounter{enumii}{0}
@ -43,5 +43,5 @@
\setcounter{theorem}{0} \setcounter{theorem}{0}
\setcounter{section@level}{0} \setcounter{section@level}{0}
\setcounter{lstlisting}{0} \setcounter{lstlisting}{0}
\setcounter{romanPage}{3} \setcounter{romanPage}{4}
} }

View File

@ -8,8 +8,24 @@
%---------------------------------------------------------------------------- %----------------------------------------------------------------------------
\chapter*{Kivonat}\addcontentsline{toc}{chapter}{Kivonat} \chapter*{Kivonat}\addcontentsline{toc}{chapter}{Kivonat}
Jelen dokumentum egy diplomaterv sablon, amely formai keretet ad a BME Villamosmérnöki és Informatikai Karán végző hallgatók által elkészítendő szakdolgozatnak és diplomatervnek. A sablon használata opcionális. Ez a sablon \LaTeX~alapú, a \emph{TeXLive} \TeX-implementációval és a PDF-\LaTeX~fordítóval működőképes. Adott egy tanszéken fejlesztett felhő alapú elosztott rendszer, melynek eszközei madárhangok azonosítására képesek.
Ha a rendszer úgy észleli, hogy az egyik álatala vezérelt eszköz mikrofonja felvételén madárhang található,
akkor riasztást kezdeményez az eszközön ezzel elijesztve a madarat ezáltal megóvva a növényzetet.
A rendszernek több kisebb komponense van, amelyek rengeteg adatot dolgoznak fel és nincs jelenleg egy olyan egységes grafikus felület ahol a rendszer teljes állapotát
át lehetne tekinteni, illetve ahol a feldolgozott adatokat vizualizálni lehetne.
A piacon létezik már több olyan szoftver csomag, amely hasonló problémákra próbál megoldást nyújtani, de ezek sem mindig
tudják kielégíteni azokat a speciális igényeket, amelyek egy ilyen rendszernél felmerülnek.
Jelen szakdolgozat célja egy olyan vizualizációs megoldás bemutatása, amelynek segítségével a rendszer könnyedén áttekinthető
és kezelhető. A tanszéki rendszer által kezelt eszközök a felületen is vezérelhetők
és azok működéséről különböző statisztikákat felhasználva egyszerűen értelmezhető diagrammok generálódnak.
A backend megvalósítására az ASP.NET Core-t választottam, mely platformfüggetlen megoldást nyújt a web kérések kiszolgálására.
A frontend-et a React.js használatával készítettem, mely segítségével egyszerűen és gyorsan lehet reszponzív felhasználói felületeket készíteni.
Dolgozatomban bemutatom a tanszéken fejlesztett rendszert, a mikroszolgáltatások vizualizálásának alternatíváit,
ismertetem az általam választott technológiákat és a készített alkalmazás felépítését.
\vfill \vfill
\selectenglish \selectenglish
@ -20,8 +36,24 @@ Jelen dokumentum egy diplomaterv sablon, amely formai keretet ad a BME Villamosm
%---------------------------------------------------------------------------- %----------------------------------------------------------------------------
\chapter*{Abstract}\addcontentsline{toc}{chapter}{Abstract} \chapter*{Abstract}\addcontentsline{toc}{chapter}{Abstract}
This document is a \LaTeX-based skeleton for BSc/MSc~theses of students at the Electrical Engineering and Informatics Faculty, Budapest University of Technology and Economics. The usage of this skeleton is optional. It has been tested with the \emph{TeXLive} \TeX~implementation, and it requires the PDF-\LaTeX~compiler. There is a department developed cloud-based distributed system whose devices are capable of identifying bird sounds.
If the system detects a bird's voice on the recording of a microphone on one of the devices, it will trigger
an alarm on the device scaring the bird away thereby protecting the vegetation.
The system has several smaller components that process a lot of data and currently there is no unified graphical user interface where the overall state of the system
could be reviewed or where the processed data could be visualized.
There are already several software packages on the market that try to solve similar problems,
however they aren't always able to meet the special needs that arise with such a system.
The purpose of this thesis is to present a visualization solution that allows the users to easily review
and manage the system. The devices maintained by the department developed system can be controlled on the interface
and easy-to-understand diagrams are generated using statistics about their operation.
I chose ASP.NET Core as the backend framework, which provides a platform-independent solution for serving web requests.
The frontend was created using React.js, which allows for an easy and quick way to create responsive user interfaces.
In my thesis I present the system developed at the department, the alternatives of visualization of microservices,
I describe the technologies I have chosen and the structure of the application I have created.
\vfill \vfill
\selectthesislanguage \selectthesislanguage

View File

@ -1,17 +1,17 @@
\relax \relax
\providecommand\hyper@newdestlabel[2]{} \providecommand\hyper@newdestlabel[2]{}
\@writefile{toc}{\select@language{magyar} \contentsline {chapter}{Függelék}{18}{appendix*.10}\protected@file@percent } \@writefile{toc}{\select@language{magyar} \contentsline {chapter}{Függelék}{9}{appendix*.6}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {F.1}A TeXstudio felülete}{18}{section.F.1}\protected@file@percent } \@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {F.1}A TeXstudio felülete}{9}{section.F.1}\protected@file@percent }
\@writefile{lof}{\select@language{magyar} \contentsline {figure}{\numberline {F.1.1.}{\ignorespaces A TeXstudio \LaTeX -szerkesztő.\relax }}{18}{figure.caption.11}\protected@file@percent } \@writefile{lof}{\select@language{magyar} \contentsline {figure}{\numberline {F.1.1.}{\ignorespaces A TeXstudio \LaTeX -szerkesztő.\relax }}{9}{figure.caption.7}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {F.2}Válasz az ,,Élet, a világmindenség, meg minden'' kérdésére}{19}{section.F.2}\protected@file@percent } \@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {F.2}Válasz az ,,Élet, a világmindenség, meg minden'' kérdésére}{10}{section.F.2}\protected@file@percent }
\@setckpt{content/appendices}{ \@setckpt{content/appendices}{
\setcounter{page}{20} \setcounter{page}{11}
\setcounter{equation}{2} \setcounter{equation}{2}
\setcounter{enumi}{11} \setcounter{enumi}{0}
\setcounter{enumii}{0} \setcounter{enumii}{0}
\setcounter{enumiii}{0} \setcounter{enumiii}{0}
\setcounter{enumiv}{0} \setcounter{enumiv}{0}
\setcounter{footnote}{9} \setcounter{footnote}{3}
\setcounter{mpfootnote}{0} \setcounter{mpfootnote}{0}
\setcounter{part}{0} \setcounter{part}{0}
\setcounter{chapter}{6} \setcounter{chapter}{6}
@ -21,29 +21,29 @@
\setcounter{paragraph}{0} \setcounter{paragraph}{0}
\setcounter{subparagraph}{0} \setcounter{subparagraph}{0}
\setcounter{figure}{0} \setcounter{figure}{0}
\setcounter{table}{1} \setcounter{table}{0}
\setcounter{footnote@add}{0} \setcounter{footnote@add}{0}
\setcounter{footnote@ch}{0} \setcounter{footnote@ch}{0}
\setcounter{parentequation}{0} \setcounter{parentequation}{0}
\setcounter{Item}{14} \setcounter{Item}{0}
\setcounter{Hfootnote}{11} \setcounter{Hfootnote}{3}
\setcounter{bookmark@seq@number}{26} \setcounter{bookmark@seq@number}{24}
\setcounter{lstnumber}{14} \setcounter{lstnumber}{1}
\setcounter{endNonectr}{15} \setcounter{endNonectr}{5}
\setcounter{currNonectr}{0} \setcounter{currNonectr}{0}
\setcounter{caption@flags}{0} \setcounter{caption@flags}{0}
\setcounter{continuedfloat}{0} \setcounter{continuedfloat}{0}
\setcounter{NAT@ctr}{8} \setcounter{NAT@ctr}{0}
\setcounter{currexamplectr}{1} \setcounter{currexamplectr}{0}
\setcounter{endexamplectr}{0} \setcounter{endexamplectr}{0}
\setcounter{example}{1} \setcounter{example}{0}
\setcounter{currdefinitionctr}{1} \setcounter{currdefinitionctr}{0}
\setcounter{enddefinitionctr}{0} \setcounter{enddefinitionctr}{0}
\setcounter{definition}{1} \setcounter{definition}{0}
\setcounter{currtheoremctr}{1} \setcounter{currtheoremctr}{0}
\setcounter{endtheoremctr}{0} \setcounter{endtheoremctr}{0}
\setcounter{theorem}{1} \setcounter{theorem}{0}
\setcounter{section@level}{1} \setcounter{section@level}{1}
\setcounter{lstlisting}{0} \setcounter{lstlisting}{0}
\setcounter{romanPage}{3} \setcounter{romanPage}{4}
} }

View File

@ -0,0 +1,45 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@setckpt{content/bir}{
\setcounter{page}{3}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{0}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{1}
\setcounter{section}{3}
\setcounter{subsection}{0}
\setcounter{subsubsection}{0}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{0}
\setcounter{table}{0}
\setcounter{footnote@add}{0}
\setcounter{footnote@ch}{0}
\setcounter{parentequation}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{0}
\setcounter{bookmark@seq@number}{6}
\setcounter{lstnumber}{1}
\setcounter{endNonectr}{2}
\setcounter{currNonectr}{0}
\setcounter{caption@flags}{0}
\setcounter{continuedfloat}{0}
\setcounter{NAT@ctr}{0}
\setcounter{currexamplectr}{0}
\setcounter{endexamplectr}{0}
\setcounter{example}{0}
\setcounter{currdefinitionctr}{0}
\setcounter{enddefinitionctr}{0}
\setcounter{definition}{0}
\setcounter{currtheoremctr}{0}
\setcounter{endtheoremctr}{0}
\setcounter{theorem}{0}
\setcounter{section@level}{1}
\setcounter{lstlisting}{0}
\setcounter{romanPage}{3}
}

View File

@ -0,0 +1,65 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\@writefile{toc}{\select@language{magyar} \contentsline {chapter}{\numberline {2}A Birdnetes részletes bemutatása}{3}{chapter.2}\protected@file@percent }
\@writefile{lof}{\select@language{magyar} \addvspace {10\p@ }}
\@writefile{lot}{\select@language{magyar} \addvspace {10\p@ }}
\newlabel{chapt:birdnetes-introduction}{{2}{3}{A szakdolgozat felépítése}{chapter.2}{}}
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {2.1}Gyors elméleti összefoglaló}{3}{section.2.1}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {subsection}{\numberline {2.1.1}Cloud, felhő}{3}{subsection.2.1.1}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {subsubsection}{\numberline {2.1.1.1}Mikroszolgáltatások}{3}{subsubsection.2.1.1.1}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {subsubsection}{\numberline {2.1.1.2}Konténerek}{4}{subsubsection.2.1.1.2}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {subsubsection}{\numberline {2.1.1.3}Kubernetes}{4}{subsubsection.2.1.1.3}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {subsection}{\numberline {2.1.2}MQTT}{4}{subsection.2.1.2}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {subsection}{\numberline {2.1.3}Open API}{4}{subsection.2.1.3}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {2.2}Rendszerszintű architektúra}{5}{section.2.2}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {subsection}{\numberline {2.2.1}Főbb komponensek}{5}{subsection.2.2.1}\protected@file@percent }
\@writefile{lof}{\select@language{magyar} \contentsline {figure}{\numberline {2.1.}{\ignorespaces A Birdnetes rendszer architektúrája\relax }}{5}{figure.caption.4}\protected@file@percent }
\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
\newlabel{fig:birdnetes-components}{{2.1}{5}{A Birdnetes rendszer architektúrája\relax }{figure.caption.4}{}}
\@writefile{toc}{\select@language{magyar} \contentsline {subsubsection}{\numberline {2.2.1.1}Input Service}{5}{subsubsection.2.2.1.1}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {subsubsection}{\numberline {2.2.1.2}AI Service}{6}{subsubsection.2.2.1.2}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {subsubsection}{\numberline {2.2.1.3}Guard Service}{6}{subsubsection.2.2.1.3}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {subsubsection}{\numberline {2.2.1.4}Command and Control Service}{6}{subsubsection.2.2.1.4}\protected@file@percent }
\@setckpt{content/birdnetes-introduction}{
\setcounter{page}{7}
\setcounter{equation}{0}
\setcounter{enumi}{0}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{3}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{2}
\setcounter{section}{2}
\setcounter{subsection}{1}
\setcounter{subsubsection}{4}
\setcounter{paragraph}{0}
\setcounter{subparagraph}{0}
\setcounter{figure}{1}
\setcounter{table}{0}
\setcounter{footnote@add}{0}
\setcounter{footnote@ch}{0}
\setcounter{parentequation}{0}
\setcounter{Item}{0}
\setcounter{Hfootnote}{3}
\setcounter{bookmark@seq@number}{20}
\setcounter{lstnumber}{1}
\setcounter{endNonectr}{3}
\setcounter{currNonectr}{0}
\setcounter{caption@flags}{0}
\setcounter{continuedfloat}{0}
\setcounter{NAT@ctr}{0}
\setcounter{currexamplectr}{0}
\setcounter{endexamplectr}{0}
\setcounter{example}{0}
\setcounter{currdefinitionctr}{0}
\setcounter{enddefinitionctr}{0}
\setcounter{definition}{0}
\setcounter{currtheoremctr}{0}
\setcounter{endtheoremctr}{0}
\setcounter{theorem}{0}
\setcounter{section@level}{3}
\setcounter{lstlisting}{0}
\setcounter{romanPage}{4}
}

View File

@ -0,0 +1,122 @@
%----------------------------------------------------------------------------
\chapter{A Birdnetes részletes bemutatása}
\label{chapt:birdnetes-introduction}
%----------------------------------------------------------------------------
Ebben a fejezetben ismertetem a Birdnetes mikroszolgáltatás rendszerének architektúráját.
Részletesen kifejtem az alkalmazásom szempontjából fontos komponensek feladatát és működését.
Majd egy példával ábrázolom a rendszer hangfelismerő folyamatát.
%----------------------------------------------------------------------------
\section{Gyors elméleti összefoglaló}
%----------------------------------------------------------------------------
Ez a szakasz nem azt a célt szolgálja, hogy minnél részletesebb képet mutasson az itt leírt technológiákról.
Ez csupán egy rövid összefoglaló a Birdnetes működésének megértése szempontjából elengedhetetlen technológiákról és elvekről,
hogy valamilyen szinten tisztában legyünk a fejezetben elhangzó kifejezésekkel.
%----------------------------------------------------------------------------
\subsection{Cloud, felhő}
%----------------------------------------------------------------------------
A cloud lényegében annyit jelent, hogy a szervert, amin az alkalmazás fut, nem a fejlesztőnek kell üzemeltetnie,
hanem valamilyen másik szervezet\footnotemark által vannak karban tartva.
Ez több okból is hasznos:
\begin{itemize}
\item Olcsóbb. Nem kell berendezéseket vásárolni, nincs üzemeltetési díj. Az egyetlen költség a bérlés, ami általában töredéke annak, amit akkor fizetnénk ha magunk csinálnánk az egészet.
\item Gyorsabb fejlesztés. Az alkalmazás futtatására használt szervereket általában a fejlesztő nem látja, ezekkel nem kell foglalkoznia. Ha az alkalmazásnak hirtelen nagyobb erőforrás igénye lesz, a rendszer automatikusan skálázódik.
\item Nagyobb megbízhatóság. Az ilyen szolgáltatást nyújtó szervezeteknek ez az egyik legnagyobb feladata. Az alkalmazás bárhol és bármikor elérhető.
\end{itemize}
\footnotetext{Ilyenek például a Microsoft Azure, az Amazon Web Services vagy a Google Cloud.}
%----------------------------------------------------------------------------
\subsubsection{Mikroszolgáltatások}
%----------------------------------------------------------------------------
A mikroszolgáltatások nem sok mindenben különböznek egy általános szolgáltatástól.
Ugyan úgy valamilyen kéréseket kiszolgáló egységek, legyen az web kérések kiszolgálása HTTP-n keresztül
vagy akár parancssori utasítások feldolgozása. Az egyetlen fő különbség az a szolgáltatások felelősségköre.
A mikroszolgáltatások fejlesztésénél a fejlesztők elsősorban arra törekednek, hogy egy komponensnek minnél kevesebb feladata és függősége legyen,
ezzel megnő a tesztelhetőség és könyebb a skálázhatóság.
%----------------------------------------------------------------------------
\subsubsection{Konténerek}
%----------------------------------------------------------------------------
A konténer technikailag semmivel sem több mint egy Linux-on futó processz amelyre különböző korlátozásokat szabtak.
Ilyen korlátozások lehetnek például, hogy a konténer nem látja a teljes fájlrendszert, annak csak egy kijelölt részét,
megadható a konténer által használható processzor és memória igény vagy akár korlátozható az is, hogy a konténer hogyan használhatja a hálózatot.
Léteznek eszközök, például a Docker\footnote{https://www.docker.com/}, mely lehetővé teszi a fejlesztők számára az ilyen konténerek könnyed létrehozását és futtatását.
%----------------------------------------------------------------------------
\subsubsection{Kubernetes}
%----------------------------------------------------------------------------
A Kubernetes\footnote{https://kubernetes.io/} az ilyen komplex konténerizált mikroszolgáltatás rendszerek menedzselésének könnyítését szolgálja.
Kihasználja és ötvözi az imént említett technológiák előnyeit, hogy egy robosztus rendszert alkosson.
Használatával felgyorsulhat és automatizált lehet az egyes konténerek telepítése, futtatása, de talán a legfőbb előnye,
hogy segítségével könnyedén megoldható a rendszert ért terhelési igények szerinti dinamikus skálázódás.
Azok a mikroszolgáltatások, amikre a rendszernek épp nincs szüksége, nem futnak, nem igényelnek erőforrást a szerveren,
így nem kell utánnuk fizetni sem. Ezzel ellentétben, ha valamely szolgáltatás után hirtelen megnő az igény,
akkor az könnyedén duplikálható.
%----------------------------------------------------------------------------
\subsection{MQTT}
%----------------------------------------------------------------------------
Az MQTT (Message Queue Telemetry Transport) az egy kliens-szerver publish/subscribe üzenetküldő protokoll. Könnyű implementálni és alacsony a sávszélesség igénye,
mellyel tökéletes jelöltje a Machine to Machine (M2M), illetve az Internet of Things (IoT) kommunikáció megvalósítására.
Működéséhez szükség van egy szerverre, amelynek feladata a beérkező üzenetek továbbküldése témák alapján. Egyes kliensek fel tudnak iratkozni bizonyos témákra, míg más kliensek publikálnak
és a szerver levezényli a két fél között a kommunikációt.
%----------------------------------------------------------------------------
\subsection{Open API}
%----------------------------------------------------------------------------
Az Open API egy nyilvános alkalmazás-programozási leíró, amely a fejlesztők számára hozzáférést biztosít egy másik alkalmazáshoz.
Az API-k lírják és meghatározzák, hogy egy alkalmazás hogyan kommunikálhat egy másikkal,
melyet használva a fejlesztők könnyedén képesek a kommunikációra képes kódot írni vagy generálni.
%----------------------------------------------------------------------------
\section{Rendszerszintű architektúra}
%----------------------------------------------------------------------------
A Birdnetes fejlesztése során kifejezetten fontos szerepe volt a mikroszolgáltatás alapú rendszerek elvei követésének.
A rendszer egy Kubernetes klaszterben van telepítve és több kisebb komponensből áll, melyek egymás között a HTTP és az MQTT protokollok segítségével kommunikálnak.
A rendszer összes szolgáltatásának van egy Open API leírója, melyet használva hamar volt egy olyan kódbázisom, amely képes volt a rendszerrel való kommunikációra.
%----------------------------------------------------------------------------
\subsection{Főbb komponensek}
%----------------------------------------------------------------------------
A \ref{fig:birdnetes-components}-es ábrán láthatóak a rendszer komponensei, melyek mind egy-egy mikroszolgáltatás.
Az egymás mellett lévő kék levélborítékok az MQTT kommunikációt jelölik,
amellyel például a természetben elhelyezett eszközök felé irányuló kommunikációja is történik.
A következő alszakaszokban bemutatom az alkalmazásom szempontjából fontosabb komponenseket.
\begin{figure}[!ht]
\centering
\includegraphics[width=150mm, keepaspectratio]{figures/architecture-redesigned.png}
\caption{A Birdnetes rendszer architektúrája}
\label{fig:birdnetes-components}
\end{figure}
%----------------------------------------------------------------------------
\subsubsection{Input Service}
%----------------------------------------------------------------------------
A kihelyezett IoT eszközök által felvett hangfájlok ezen a komponensen keresztül érkeznek be a rendszerbe.
Itt történik a hanganyaghoz tartozó metaadatok lementése az Input Service saját adatbázisába.
Ilyenek például a beküldő eszköz azonosítója, a beérkezés dátuma vagy a hangüzenet rendszerszintű egyedi azonosítója.
Amint a szolgáltatás a berékezett üzenettel kapcsolatban elvégezte az összes feladatát,
publikál egy üzenetet az MQTT üzenetsorra a többi kliensnek feldolgozásra.
%----------------------------------------------------------------------------
\subsubsection{AI Service}
%----------------------------------------------------------------------------
Az AI Service példányai fogadják az Input Service-től érkező üzeneteket és elkezdik klasszifikálni az abban található hanganyagot.
Meghatározzák, hogy a hanganyag mekkora valószínűséggel volt seregély hang vagy sem.
Ennek eredményét a hangminta egyedi azonosítójával együtt publikálják egy másik üzenetsoron.
%----------------------------------------------------------------------------
\subsubsection{Guard Service}
%----------------------------------------------------------------------------
A Guard Service feliratkozik az AI Service által publikált üzenetek témájára
és valamilyen valószínűségi kritérium alapján eldönti, hogy a hangminta tartalmaz-e seregély hangot.
Ha igen, akkor az üzenetsoron küld egy riasztás parancsot a hanganyagot küldő eszköznek.
%----------------------------------------------------------------------------
\subsubsection{Command and Control Service}
%----------------------------------------------------------------------------
A Command and Control Service az előzőekkel ellentétben nem vesz részt a minták fogadásában, feldolgozásában vagy kezelésében.
Felelősége az eszközök és azok szenzorai állapotának menedzselése és követése.
Ezen keresztül lehet az egyes eszközöket ki- és bekapcsolni.

View File

@ -3,8 +3,11 @@
\@writefile{toc}{\select@language{magyar} \contentsline {chapter}{\numberline {1}Bevezetés}{1}{chapter.1}\protected@file@percent } \@writefile{toc}{\select@language{magyar} \contentsline {chapter}{\numberline {1}Bevezetés}{1}{chapter.1}\protected@file@percent }
\@writefile{lof}{\select@language{magyar} \addvspace {10\p@ }} \@writefile{lof}{\select@language{magyar} \addvspace {10\p@ }}
\@writefile{lot}{\select@language{magyar} \addvspace {10\p@ }} \@writefile{lot}{\select@language{magyar} \addvspace {10\p@ }}
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {1.1}A probléma}{1}{section.1.1}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {1.2}A megoldás}{1}{section.1.2}\protected@file@percent }
\@writefile{toc}{\select@language{magyar} \contentsline {section}{\numberline {1.3}A szakdolgozat felépítése}{2}{section.1.3}\protected@file@percent }
\@setckpt{content/introduction}{ \@setckpt{content/introduction}{
\setcounter{page}{2} \setcounter{page}{3}
\setcounter{equation}{0} \setcounter{equation}{0}
\setcounter{enumi}{0} \setcounter{enumi}{0}
\setcounter{enumii}{0} \setcounter{enumii}{0}
@ -14,7 +17,7 @@
\setcounter{mpfootnote}{0} \setcounter{mpfootnote}{0}
\setcounter{part}{0} \setcounter{part}{0}
\setcounter{chapter}{1} \setcounter{chapter}{1}
\setcounter{section}{0} \setcounter{section}{3}
\setcounter{subsection}{0} \setcounter{subsection}{0}
\setcounter{subsubsection}{0} \setcounter{subsubsection}{0}
\setcounter{paragraph}{0} \setcounter{paragraph}{0}
@ -26,7 +29,7 @@
\setcounter{parentequation}{0} \setcounter{parentequation}{0}
\setcounter{Item}{0} \setcounter{Item}{0}
\setcounter{Hfootnote}{0} \setcounter{Hfootnote}{0}
\setcounter{bookmark@seq@number}{3} \setcounter{bookmark@seq@number}{6}
\setcounter{lstnumber}{1} \setcounter{lstnumber}{1}
\setcounter{endNonectr}{2} \setcounter{endNonectr}{2}
\setcounter{currNonectr}{0} \setcounter{currNonectr}{0}
@ -42,7 +45,7 @@
\setcounter{currtheoremctr}{0} \setcounter{currtheoremctr}{0}
\setcounter{endtheoremctr}{0} \setcounter{endtheoremctr}{0}
\setcounter{theorem}{0} \setcounter{theorem}{0}
\setcounter{section@level}{0} \setcounter{section@level}{1}
\setcounter{lstlisting}{0} \setcounter{lstlisting}{0}
\setcounter{romanPage}{3} \setcounter{romanPage}{4}
} }

View File

@ -1,7 +1,38 @@
%---------------------------------------------------------------------------- %----------------------------------------------------------------------------
\chapter{\bevezetes} \chapter{\bevezetes}
%---------------------------------------------------------------------------- %----------------------------------------------------------------------------
Szőlőtulajdonosoknak éves szinten jelentős kárt okoznak a seregélyek, akik előszeretettel választják táplálékul a megtermelt szőlőt.
Erre a problémára dolgoztak ki a tanszéken diáktársaim egy felhő alapú konténerizált rendszert, a Birdnetes-t
mely a természetben elkelyezett eszközökkel kommunikál, azokat vezérli.
Az eszközök bizonyos időközönként hangfelvételt készítenek a környezetükről,
majd valamilyen formában elküldik ezeket a felvételeket a központi rendszernek,
amely egy erre a célra kifejlesztett mesterséges intelligenciát használva eldönti
a felvételről, hogy azon található-e seregély hang vagy sem.
Ha igen akkor jelez a felvételt küldő eszköznek, hogy szólaltassa meg a riasztó
berendezését, hogy elijessze a madarakat.
A bevezető tartalmazza a diplomaterv-kiírás elemzését, történelmi előzményeit, a feladat indokoltságát (a motiváció leírását), az eddigi megoldásokat, és ennek tükrében a hallgató megoldásának összefoglalását. %----------------------------------------------------------------------------
\section{A probléma}
%----------------------------------------------------------------------------
A jelen rendszer használata során nincs vizuális visszacsatolás az esetleges riasztásokról azok gyakoriságáról
és a rendszer állapotáról sem. Különböző diagnosztikai eszközök ugyan implementálva lettek mint például
a logolás vagy a hiba bejelentés, de ezek használata nehézkes, nem kézenfekvő.
Szükség van valamire amivel egy helyen és egyszerűen lehet kezelni és felügyelni a rendszer egyes elemeit.
A bevezető szokás szerint a diplomaterv felépítésével záródik, azaz annak rövid leírásával, hogy melyik fejezet mivel foglalkozik. %----------------------------------------------------------------------------
\section{A megoldás}
%----------------------------------------------------------------------------
A jelen szakdolgozat egy olyan webes alkalmazás elkészítését dokumentálja, melyel a felhasználók képesek
a természetben elhelyezett eszközök állapotát vizsgálni, azokat akár ki és bekapcsolni igény szerint.
Az egyes rendszer eseményeket vizsgálva a szoftver statisztikákat készít, melyeket különböző diagrammokon ábrázolok.
Ilyen statisztikák például, hogy időben melyik eszköz mikor észlelt madár hangot, vagy hogy hány hang üzenet érkezik
az eszközöktől másodpercenként.
%----------------------------------------------------------------------------
\section{A szakdolgozat felépítése}
%----------------------------------------------------------------------------
A szakdolgozatom első részében, a \ref{chapt:birdnetes-introduction}. fejezetben, bemutatom a Birdnetes felépítését, az egyes komponensek közötti kapcsolatokat és a technológiát, amire épült.
A 3. fejezetben ismertetem a jelenleg az iparban is használt mikroszolgáltatás működését vizualizáló alternatívákat, majd a saját megoldásom tervezetét, az arra vonatkozó elvárásokat.
A 4. fejezetben az alkalmazásom által használt technológiákat mutatom be, ezzel előkészítve az 5. és 6. fejezetet, ahol ismertetem a szerver- és kliensalkalmazások felépítését.
A 7. és 8. fejezet az alkalmazás teszteléséről és telepítéséről szól.
Az utolsó fejezetben értékelem a munkám eredményét, levonom a tapasztalatokat és bemutatok néhány továbbfejlesztési lehetőséget.

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -26,6 +26,7 @@ Forma
- SignalR - SignalR
- EFCore 5 - EFCore 5
- Frontend - Frontend
- material-ui
- React.js - React.js
- Apexcharts - Apexcharts
- google-map-react - google-map-react

View File

@ -37,7 +37,7 @@
\usepackage[hang]{caption} \usepackage[hang]{caption}
\singlespacing \onehalfspacing
\newcommand{\selecthungarian}{ \newcommand{\selecthungarian}{
\selectlanguage{magyar} \selectlanguage{magyar}

View File

@ -1,7 +1,7 @@
\relax \relax
\providecommand\hyper@newdestlabel[2]{} \providecommand\hyper@newdestlabel[2]{}
\@setckpt{include/titlepage}{ \@setckpt{include/titlepage}{
\setcounter{page}{1} \setcounter{page}{2}
\setcounter{equation}{0} \setcounter{equation}{0}
\setcounter{enumi}{0} \setcounter{enumi}{0}
\setcounter{enumii}{0} \setcounter{enumii}{0}

Binary file not shown.

View File

@ -2,8 +2,8 @@
% !TeX encoding = UTF-8 % !TeX encoding = UTF-8
% !TeX program = xelatex % !TeX program = xelatex
% TODO Change language to en_GB (recommended) or en_US for English documents % TODO Change language to en_GB (recommended) or en_US for English documents
\documentclass[11pt,a4paper,oneside]{report} % Single-side %\documentclass[11pt,a4paper,oneside]{report} % Single-side
%\documentclass[11pt,a4paper,twoside,openright]{report} % Duplex \documentclass[11pt,a4paper,twoside,openright]{report} % Duplex
\input{include/packages} \input{include/packages}
@ -16,8 +16,8 @@
\newcommand{\vikkonzulensAKeresztnev}{Csaba} \newcommand{\vikkonzulensAKeresztnev}{Csaba}
\newcommand{\vikkonzulensBMegszolitas}{} \newcommand{\vikkonzulensBMegszolitas}{}
\newcommand{\vikkonzulensBVezeteknev}{Konzulens} \newcommand{\vikkonzulensBVezeteknev}{}
\newcommand{\vikkonzulensBKeresztnev}{Kettő} \newcommand{\vikkonzulensBKeresztnev}{}
\newcommand{\vikkonzulensCMegszolitas}{} \newcommand{\vikkonzulensCMegszolitas}{}
\newcommand{\vikkonzulensCVezeteknev}{} \newcommand{\vikkonzulensCVezeteknev}{}
@ -44,12 +44,11 @@
% Table of contents and the main text % Table of contents and the main text
%-------------------------------------------------------------------------------------- %--------------------------------------------------------------------------------------
\begin{document} \begin{document}
\pagenumbering{gobble} \pagenumbering{gobble}
%TODO These includes define guidelines -- remove these %TODO These includes define guidelines -- remove these
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\include{include/guideline} %\include{include/guideline}
%\include{include/project} %\include{include/project}
\selectthesislanguage \selectthesislanguage
@ -78,12 +77,7 @@
%TODO import your own content %TODO import your own content
\include{content/introduction} \include{content/introduction}
\include{content/birdnetes-introduction}
% Acknowledgements
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\include{content/acknowledgement}
% List of Figures, Tables % List of Figures, Tables
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~