aboutsummaryrefslogtreecommitdiff
path: root/docs/formal/main.tex
blob: 5d70916d59313551c4d39dbd1831a74d5abbd865 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
\documentclass[parskip=half]{scrartcl}

\usepackage[T1]{fontenc}
%\usepackage{helvet}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[left=3cm,right=3cm,top=3cm,bottom=3cm]{geometry}
\usepackage{array}
\usepackage{pgfplots}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{glossaries}
\graphicspath{ {./images/} }	

\renewcommand{\familydefault}{\sfdefault}

\newcommand{\Author}{Jan Drögehoff}
\author{\Author}
	
\hypersetup{
	colorlinks=true,
	linkcolor=black,
	urlcolor=blue,
	pdftitle={ShelSP Dokumentation},
	pdfauthor={\Author},
}

\pgfplotsset{compat=1.18}

\makeglossaries

\newglossaryentry{mdns}
{
    name=Multicast DNS (mDNS),
    description={Multicast DNS ist ein verfahren mit dem Domains zu Geräten im Gleichen Netzwerk ohne einen DNS Server bekannt gegeben und aufgelöst werden können}
}

\newglossaryentry{kicad}
{
    name=KiCad,
    description={Open-Source-Software-Suite für elektronische Schaltungen und zum Platinendesign \url{https://www.kicad.org/}}
}

\newglossaryentry{esp}
{
    name=ESP32-WROOM-32,
    description={
    		Das erste Module der ESP32 Familie des Herstellers Espressif Systems.\\
    		\href{https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32_datasheet_en.pdf}{Datenblatt}
    }
}

\newglossaryentry{cp2102}
{
    name=CP2102,
    description={
    		Ein Chip der die Kommunikation zwischen eines USB Hosts und einer UART schnittstelle ermöglicht\\
    		\href{https://www.silabs.com/documents/public/data-sheets/CP2102-9.pdf}{Datenblatt}	
    }
}

\newglossaryentry{llc}
{
	name=Logic Level Converter,
	description={
		Ein Chip oder eine Sammlung von Chips die eine Spannung zu einer anderen Referenz Spannung umwandelt. \\
		Wird für Transistor zu Transistor Logik benötigt da nicht alle Komponente mit der gleichen Spannung arbeiten
	}
}

\newglossaryentry{mongoose}
{
	name=Mongoose,
	description={
		Mongoose ist eine Plattformübergreifende Webserver Bibliothek die sich Speziell für Mikrocntroller spezialisiert ist.\\
		\url{https://mongoose.ws/}
	}
}

\newglossaryentry{ams1117}
{
	name=AMS1117,
	description={
		Ein Familie von Abwärtswandlern die ein Strom Signal in ein schwächeres Strom umwandeln. \\
		\href{http://www.advanced-monolithic.com/pdf/ds1117.pdf}{Datenblatt}
	}
}

\begin{document}
\begin{titlepage}
\begin{center}
%\Large{Abschlussprüfung \pruefungstermin}\\[3ex]

%\Large{\ausbildungsberuf}\\
%\LARGE{\betreff}\\[4ex]

\huge{\textbf{Integration eines Mikrocontrollers zur Erweiterung der Automatisierungsmöglichkeiten im Shelly
Ecosystem}}\\[1.5ex]
%\Large{\textbf{\untertitel}}\\[4ex]

\normalsize
\vspace{1.5cm}
%%Abgabetermin: abgabeOrts, den abgabeTermin\\[3em]
\textbf{Prüfungsbewerber:}\\
\Author\\
Scherlebecker Straße 300a\\
45701 Herten\\
Prüfling-Nr: 30070\\[5ex]

%\includegraphics[scale=0.4]{\betriebLogo}\\[2ex]1
\textbf{Ausbildungsbetrieb:}\\
DATATRUSTEE GmbH\\
Josef-Haumann-Str. 7a\\
44866 Bochum\\[5em]
\end{center}

\end{titlepage}

\tableofcontents
\pagebreak

% We want links to be noticable
\hypersetup{
	linkcolor=blue,
}

\section{Planung}
\subsection{Umfeld}

Das Projekt wird im Büro der DataTrustee GmbH durchgeführt für die infraTest Digital Solutions durchgeführt.

Für die Entwicklung der Firmware wird der Sublime Text Editor benutzt.

Der Schaltplan und das Platinen design werden in \gls{kicad} angefertigt.

\subsection{Anforderungen}

Wir haben die Anforderung, eine digitale Anbindung an unsere bestehenden Produkte zu entwickeln, um die Steuerung zu erleichtern und die Bedürfnisse unserer Kunden zu erfüllen.
Für die umsetzung wird ein \gls{esp} verwendet um ein Relais zu schalten mit welchen wir den Physischen schalter ersetzen können.

\subsection{Begründung}
infraTest Digital Solutions vertreibt derzeit Messgeräte mit interner Elektronik, die eine manuelle Konfiguration vor Ort erfordern. Aufgrund zunehmender Standortferne der Kunden wünschen sie sich jedoch die Möglichkeit, die Geräte aus der Distanz zu konfigurieren und einzuschalten.

Die Kunden möchten die Effizienz steigern und Kosten sparen, indem sie die Geräte fernsteuern können. Dies würde auch die Zuverlässigkeit und Genauigkeit der Messgeräte verbessern und eine nahtlose Integration in verschiedene Arbeitsumgebungen ermöglichen.

Wir arbeiten daran, diese Anforderungen zu erfüllen, indem wir eine Prototypen entwicklen womit die fernsteuerung realisiert werde kann, um die Kundenzufriedenheit.
\pagebreak

\subsection{Schnittstellen}

Zur Kompatibilität mit der Shelly IoT API werden die folgenden Schnittstellen benötigt:
Die Shelly IoT API Kompatibilität benötigt:
\begin{itemize}
	\item WiFi Access-Point zur erstmaligen Konfiguration mit den folgenden Einstellungen:
	\begin{itemize}
		\item SSID mit Gerät Typ und MAC Adresse
		\item Kein Passwort
		\item Statische IP Addresse 192.168.33.1 für das Gerät
		\item DHCP Server für zusätzliche teilnehmer
	\end{itemize}

	\item \gls{mdns} bekannt gebung zur Erkennung mit den folgenden Inhalten:
	\begin{itemize}
		\item Erkennbarkeit im Netzwerk
		\item Firmware Version
		\item Processor Architecture
		\item Geräte Identifizierung via Gerät Typ und MAC Addresse
	\end{itemize}

	\item HTTP Routen zum Abfragen und Einstellen von:
	\begin{itemize}
		\item Relay
		\item WiFi Einstellungen
		\item Cloud Integration
	\end{itemize}
\end{itemize}

\subsection{Zeitplanung}
Für das Projekt gibt es die folgende Zeitplanung 

\begin{tabular}{ | l | r | } 
  \hline

  Analyse& 3 \\
  Konzept& 10 \\
  Realiserung& 34 \\
  Tests& 8 \\
  Dokumentation& 13 \\
  Fazit& 7 \\
  Puffer& 5 \\
  \hline
  \hline
 
  \textbf{Gesamt}& 80 Stunden \\
  \hline
\end{tabular}

\pagebreak

\subsection{Ist Analyze}	

Derzeit verkaufen wir Messgeräte die intern vor-konfektionierte Elektronik besitzen und von uns nur Elektronisch verkabelt werden damit die Nutzung für den End-Nutzer vereinfacht wird.


\subsection{Kosten-Nutzen Analyse}
Mit der Kosten-Nutzen Analyse ermitteln wir die Wirtschaftlichkeit des Projektes für die Firma.
Das Projekt kommt aus Nachfragen von Kunden, ist aber kein direktes Kunden Projekt.

\begin{tabular}{ | l | r | } 
  \hline
  Projektstunden& 80\\
  Auszubildener Stundenlohn& 35,00 €\\
  \hline
  \hline
  Arbeitslohn& 2.800,00 €\\
  \hline
\end{tabular}

Der berechnete Arbeitslohn bezieht sich auf Durchschnittliche Werte und ist nicht unbedingt Personen bezogen.

\begin{tabular}{ | l | r | } 
  \hline
  Lohn& 2.800,00 €\\
  Hardware Pauschale& 100,00 €\\
  Ressourcen-Pauschale& 100,00 €\\
  \hline
  \hline
  Projektkosten& 3.000,00 €\\
  \hline
\end{tabular}

Mit dem Projekt würde sich ein möglicher Kunde die mehrfache Anfahrt zu einem Ort sparen in dem des Gerät Ferngesteuert werden kann.

Da wir nicht genau wissen können wie der Kunden anfährt vermuten wir die Nutzung eines PKWs mit durchschnittlichen Verbrauch sowie durchschnittliche Spritkosten und eine Entfernung die der Realität entspricht.
 
\begin{tabular}{ | l | r | } 
  \hline
  Entfernung& 160 km\\
  Spritkosten pro Liter& 1,90 €\\
  Verbrauch / 100km& 7 l\\
  \hline
  \hline
  Anfahrkosten& 21.28 €\\
  \hline
\end{tabular}

\begin{tikzpicture}
\begin{axis}[
    title={Wirtschaftsrechnung},
    xlabel={Anfahrten},
    ylabel={Kosten},
    xmin=0, xmax=200,
    ymin=0, ymax=5000,
    xtick={0,50,100,150,200,250,300},
    ytick={0,500,1000,1500,2000,2500,3000,3500,4000,4500},
    legend pos=north west,
    ymajorgrids=true,
    grid style=dashed,
]

\addplot [
    domain=0:200, 
    samples=100, 
    color=blue,
    ]
    {x * 21.28};
\addlegendentry{Anfahrkosten}

\addplot [
	domain=0:200,
    samples=12, 
    color=red,
    ]
    {3000};
\addlegendentry{Projektkosten}

\end{axis}
\end{tikzpicture}

Das Projekt würde nach \textit{141} Anfahrten billiger sein als die Anfahrkosten.
Bei Kunden die eine Großzahl an Geräten verwenden würde sich das Projekt schnell lohnen.

\subsection{Nicht Monitäre Vorteile}
Eine Digital Anbindung würde Automatisierung Möglichkeiten erzeugen wo ein Messsensor zu bestimmten Bedingungen eingeschaltet werden kann.

\pagebreak

\section{Konzept}
\subsection{Soll-Konzept}
Für ein Soll-Konzept müssen verschiedene Eigenschaften des Projektes entschieden werden.

Einige Elemente wurden schon im Projektantrag entscheiden, wie zum Beispiel die Auswahl von C++ für die Programmiersprache und den \gls{esp} für den Mikrocntroller.
Diese Entscheidungen werden trotzdem noch einmal übergangen um herauszufinden ob es nicht bessere Alternativen gäbe.

\subsubsection{Programmiersprache}

Für Embedded Software Projekte eignen sich meist Kompilierte Sprachen da diese Quellcode in effizienten Maschinen Code konvertieren und damit Speicherbedarf und Rechnenleistung gespart werden können.
Die Sprachen die zur Wahl stehen sind:
\begin{itemize}
	\item C
	\item C++
	\item Rust
	\item Zig
\end{itemize}

\paragraph{C}
C biete sich am besten an da es Offiziell vom Hersteller Unterstützt wird

\paragraph{C++}
Wie C werden Offizielle Compiler angeboten dazu bietet C++ eine umfangreiche Standardbibliothek sowie Kompatibilität mit C-Bibliotheken, wodurch das Projekt leicht erweitert und angepasst werden kann.

\paragraph{Rust}
Rust ist eine LLVM basierte Programmiersprache und LLVM hat derzeit keine Unterstützung für die Xtensa Architektur des ESP32.
Die Community arbeitet daran Rust für diese Architektur bereitzustellen, jedoch gibt es noch viel was erarbeitet werden muss.

\paragraph{Zig}
Zig ist eine relative neue Programmier Sprache mit noch keinen Stabilen Versionen.
Sie ist zwar nicht an LLVM gebunden, hat derzeit aber noch keine unterstützung für die ESP32 Architektur \\

Erstaunlicher weiße gibt es auch eine beliebte interpretierte Programmiersprache für den ESP32: \textbf{Micropython}

Micropython hat jedoch den Nachteil dass das Programm während der Laufzeit interpretiert werden muss und somit viel langsamer ist als Kompilierte alternative.
Dazu bring die Standardbibliothek nicht viele Funktionalitäten die man vom Hersteller kriegen würden.

Sommit fällt die entscheidung weiterhin auf \textbf{C++}.

\subsection{Mikrocntroller}

In der Mikrocontroller Industrie gibt es viele zur Auswahl, am Ende sind die folgenden Chips in die Engere Auswahl gekommen:

\begin{itemize}
	\item ESP32
	\item ESP8266
	\item RP2040
\end{itemize}

Bei der Auswahl war es wichtig einen Mikrocontroller zu verwenden die in einem praktisch Modul Formfaktor vorhanden sind.
Die eigentlichen Integrierten Chips brauchen meist sehr genaue Anforderungen an passiven Komponenten.

\paragraph{ESP32}
Die ESP32 Familie von Mikrocontrollern ist weit beliebt durch ihre Performanz sowie ihr Kleiner Form Faktor und Netzwerk Fähigkeiten, sei es WiFi, Bluetooth oder sogar Zigbee.
Der Mikrocontroller selbst ist meist als sogenannter System on a Chip, Modul und als Entwicklung Einheit vorhanden.

\paragraph{ESP8266}
Älterer Chipsatz welcher auch Netzwerk fähig ist, wurde jedoch Funktional von der ESP32 Familie ersetzt.

\paragraph{RP2040}
Der RP2040 ist ein neuer AMD basierter Mikrocontroller von der Raspberry Pi Foundation.
Sehr beliebt in Hobby Projekten und sehr Kosten Günstig, je 1€ pro Chip, ist jedoch nur als Entwickler Platine und als System on a Chip verfügbar.
Wifi und Bluetooth müssten extern bei der Platinen Entwicklung angebunden werden.

Am Ende hat sich der \textbf{EP32} war der ESP32 die beste Entscheidung da die Chip Familie gut und weiterhin vom Entwickler sowie von der Community unterstützt wird und durch den Modul Formfaktor bei der Platinen Entwicklung weniger Hindernisse aufbringen wird.

\subsection{Schaltplan}

Der \gls{esp}, braucht eine Aktivspannung on 3.3V und geht von Nominalen 500mA Strom für die Verwendung von WiFi und Bluetooth aus.

Um die Stromversorgung zu vereinfachen wird ein einfacher USB Port verwendet.
Da der USB Standard 5V vorsieht brauchen wir einen Abwärtswandler.
Wir haben uns dabei für den \gls{ams1117} (U5) entschieden welcher eine Spannung von mindestenz 4.7V zu 3.3V umwandelt.
Die Verwendung eines Spannungsteiler ist hier leider nicht möglich, da der USB2.0 Nominal einen Strom von 500mA vorsieht, genug um den Mikrocontroller zu betreiben.

Um zu verhindern, dass die Spannung durch momentare Stromlast gesenkt wird, wird mit 2 Kondesatoren mit jeweils 10uF (C2) und 0.1uF (C1) die Stromversorgungsschiene entkoppelt.
Da bei der entkopplung eine schnelle Reaktionszeit benötigt wird werden Zeramik Kondensatoren benötigt, da diese diese die beste Kapazitive Reaktanz besitzen.

Zur Sicherstellung, das der Mikrocontroller vollständig mit Strom versorgt ist bevor dieser gestartet wird, wird mit einem 1uF Kondensator (C3) der start vezögert.

Da unser Mikrocontroller über eine UART verbindung Programmiert wird haben wir vorgesehen den USB Port für eine Serial Verbindung zu Nutzen, dafür haben wir uns für die \gls{cp2102} USB-zu-UART Brücke (U2) entschieden.
Dieser IC unterstützt eine direkte Anbindung an USB und besitzt Treiber für Windows, Linux, MacOS und Android.
Die Anbindung der Pins folgt UART, dabei wird der DTR und RTS pin zum einschalten des Download modes und zum neu starten verwendet damit das Gerät über USB Autonom Programmiert werden kann.


\includegraphics[scale=0.75]{schematic.png}
\\

\subsection{Software}
Die Entwicklung für den \gls{esp} wurde mit der Offiziellen \href{https://docs.espressif.com/projects/esp-idf/en/stable/esp32/index.html}{ESP-IDF} Toolchain durchgeführt.
Diese Unterstützt alle Hardware Komponente direkt und kommt mit vielen nützlichen Bibliotheken inkludiert welche in diesem Projekt verwendet werden, zum Beispiel ein \href{https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/protocols/esp_http_server.html?highlight=http}{HTTP Server}.

Ehemalig war mDNS Unterstützung teil der Entwicklungsumgebung, wurde aber später von Espressif als eigene Komponente abgetrennt.
Da die Inklusion dieser Komponente sehr einfach ist werden wir diese für das Projekt benutzen.

\pagebreak

\section{Realisierung}
\subsection{Hardware}
Der Prototyp wurde auf einem Breadboard aufgebaut, wobei vorgefertigte Breakout-Boards genutzt wurden, um Kosten bei der Entwicklung einzusparen. Ein wesentlicher Unterschied zwischen dem Schaltplan und dem Platinen-Design besteht darin, dass im Breadboard-Design ein \gls{llc} zur Unterstützung der seriellen Verbindung mit anderen Chips verwendet wurde. Da der \gls{cp2102} Chip mit Spannungen von 3,3 und 5V arbeiten kann, wurde dies nicht weiter benötigt. Für den \gls{esp} wurde aufgrund des Mangels an einem vorgefertigten Breakout-Board ein eigenes Board entworfen und produziert.

\begin{center}
\includegraphics[scale=0.20]{esp_breakout_bare.jpg}
\includegraphics[scale=0.20]{esp_breakout.jpg} \\
\vspace{0.5cm}
\includegraphics[scale=0.1]{breadboard.jpg} \\
\end{center}
\newpage

\subsubsection{Platine}

Für den Prototypen gibt es ein vollständiges Platinen design mit jeweils den gleichen Komponent wie sie auf dem Breadboard zu finden sind.

\begin{center}
\includegraphics[scale=0.27]{pcb_layout.png}
%\includegraphics[scale=0.25]{pcb_3d_blank.jpg}
\includegraphics[scale=0.17]{pcb_3d_models.jpg}
\end{center}
%\pagebreak
%\includegraphics[scale=0.25]{pcb_3d_perspective.jpg}

\subsection{Software}
Die Software wurde vollständig in prozeduralem C++ verfasst, da die ESP-IDF Komponenten sich mehr für prozeduralem Strukturen eignen.

Für die Implementierung wurde die Logik in die folgende Komponente unterteilt:
\begin{itemize}
	\item HTTP Server und Routen
	\item Netzwerk Logik
	\item Relay Logik
	\item Einstellungen
\end{itemize}
Somit wird sichergestellt das Änderungen an einzelnen Komponenten keinen Indirekten Einfluss auf andere haben kann.

\subsubsection{HTTP Server und Routen}
Als HTTP Server benutzen wir die inkludierte Komponente der ESP-IDF Toolchain.
Diese erlaubt uns beliebig viele Routen zu registrieren die wir dann verarbeiten können.

Routen wurden in einen Unterordner ausgelagert wo die Methoden eines Hauptpfad in eine Datei implementiert werden.

So werden z.B. \textit{/settings} und \textit{/settings/sta} von \textit{settings.cpp} implementiert.

\subsubsection{Netzwerk}
Für die WiFi Nutzung wird die die \href{https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/network/esp_netif.html}{ESP-NETIF} Komponente Verwendet.
Diese erlaubt uns verfügbare Netzwerk Hardware anzusteuern und über Generische Methoden anfragen zu versenden.

Für \gls{mdns} wird die die \href{https://components.espressif.com/components/espressif/mdns}{mdns  Komponente} von Espressif verwendet welche sich direkt mit netif integriert.

\subsubsection{Relais}
Die Relay Komponente beinhaltet Methoden womit externe Komponente den Status des Relais abfragen und ändern können.

\subsubsection{Einstellungen}
Die Einstellung beinhaltet Methoden zum einstellen und abfragen von Konfigurationen wie zum Beispiel die WiFi Konfiguration.


\pagebreak
\section{Testphase}

\subsection{Blackbox Test}

Mit Blackbox Tests Prüfen wie die Funktionalität des Web Servers sowie der jeweiligen Routen und deren Verhalten.
Im gegensatz zu einem Whitebox tests sind Implementierungs Details irrelevant solange das Geräte richtig auf Anfragen reagiert.

Um dies zu Testen haben wir 2 Programme laufen lassen:

\begin{itemize}
	\item Ein Programm das dauerhaft das Relay ausschalten wollte, und überprüft hat ob die Antwort den Status als Aus zurück gegeben hat
	\item Ein Programm das dauerhaft das Relay einschalten wollte, und überprüft hat ob die Antwort den Status als Ein zurück gegeben hat
\end{itemize}

Über 8 Stunden gab es dabei keine Probleme.

\subsection{Stress Test}
Mit Stress Test wird die Belastbarkeit und Leistung des Web Servers überprüft.
Dies ist besonders über längere Zeiträume wichtig um potenzielle Probleme frühzeitig zu ermitteln.

Um das Gerät gründlich zu strapazieren haben wir einen Test aufgebaut wobei das Gerät von 3 Endgeräten über 24 Stunden dauerhaft angefragt wurde und Relais umgeschalten.

Bei den Test ist es zu keinen Ausfällen gekommen, jedoch hat sich gezeigt das der HTTP Server inkludiert in ESP-IDF sich nicht sehr gut belasten lässt. 

\pagebreak

\section{Dokumentation}
\subsection{Erstellung}
Die Software wurde nach dem Prinzip der Selbst-Dokumentierung Entwickelt, so ist der Nutzen jeder Funktion direkt erkennbar oder, wenn dieser zu ungenau ist in der Beschreibung der Funktion.

Um eine Übersicht über die Firmware zu gewährleisten wird Doxygen benutzt um ein HTML und PDF Dokument zu erstellen mit dem man die selbst-dokumentierten Informationen einsehen und direkt mit dem Quellcode vergleichen kann.

\subsection{Kundendokumentation}
Die Kundendokumentation besteht aus einer kleinen Einleitung zur Konfiguration und Bedienung des Gerätes mit Bildern der App zu Hilfestellung.
\\
Der Elektronische Einbau ist in der Kundendokumentation nicht beschrieben, da dies von uns in Geräte vorgefertig wird.
\\ \\
\hyperref[sec:kd]{8.2 Kundendokumentation}
\pagebreak

\section{Fazit}
\subsection{Erkenntnisse}

Wärend der Testphase wurden einige Erkenntnisse gesammelt wie das Projekt in der Zukunft verbessert werden könnte:
\begin{itemize}
	\item Die ESP-IDF HTTP Server Komponente ist nicht für hohe Verfügbarkeit optimiert, so kann es dazu kommen das Anfragen verzögert verarbeitet werden. Ein alternative HTTP Server der sich besser hierfür eignet wäre \gls{mongoose}
\end{itemize}

\subsection{Ausblick}
Das Projekt wurde vollständig umgesetzt und erfüllt die erforderten Anforderungen.
Bei der Entwicklung sind Erkenntnisse aufgekommen die die Belastbarkeit verbessern würde, was man mit der Simplen jedoch Effizienten Struktur der Software leicht umsetzen kann.
\pagebreak

\section{Anhang}

\subsection{Glossar}
\printglossary[title=]
\pagebreak

\setcounter{subsection}{1}
\subsection{Kundendokumentation}
\label{sec:kd}
\input{Kundendokumentation}
\pagebreak

\setcounter{subsection}{2}
\subsection{Sequenzdiagram}
\begin{center}
\includegraphics[scale=0.8]{uml/Sequenzdiagram.png}
\end{center}

\subsection{Aktivitätsdiagram}
\begin{center}
\includegraphics[scale=0.38]{uml/Aktivitätsdiagram.png}
\end{center}

\end{document}