\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 \href{https://www.kicad.org/}{Webseite}} } \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 } } \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\\[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. \subsubsection{Betrieb} Die DataTrustee GmbH \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 MCA 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 Planung& 10 \\ Analyse& 10 \\ Konzept& 10 \\ Realiserung& 10 \\ Dokumentation& 10 \\ Fazi& 10 \\ Puffer& 10 \\ \hline \hline \textbf{Gesamt}& 15 Stunden \\ \hline \end{tabular} \pagebreak \section{Analyze} \subsection{Ist Analyze} Derzeit müssen unsere Messprodukte manuell betätigt werden. Unsere Messgeräte bestehen aus fertig produzierte Geräte die wir Elektronisch mit einander Verbinden \subsection{Wirtschaftlichkeit} Für die Wirtschaftlichkeitsrechnung werden die folgenden Beispiel Werte benutzt die der Realität ähnel: \begin{itemize} \item Anfahrt von Bochum nach Münster und zurück (~160km) \item Benzinverbrauch je 100 Meter (7 liter) \end{itemize} Projektdurchführung \\ \begin{tabular}{ | l | r | } \hline Stundenlohn& 35,00 € \\ Projektstunden& 80\\ \hline Arbeitslohn& 2800,00 € \\ Entwicklungsumgebung& 100,00 € \\ Computer& 300,00 € \\ \hline \hline \textbf{Projektkosten}& 3200,00 € \\ \hline \end{tabular} \\ \\ Ohne Projekt \\ \begin{tabular}{ | l | r | } \hline Entfernung& 160 km \\ Sprit/Liter& 1,90 € \\ Verbrauch/100km& 7 l\\ \hline \hline \textbf{Spritkosten/Anfahrt}& 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, ] {3200}; \addlegendentry{Mit Projekt} \addplot [ domain=0:200, samples=12, color=red, ] {x * 21.28}; \addlegendentry{Ohne Projekt} \end{axis} \end{tikzpicture} \subsection{Nicht Monitäre Vorteile} Das Gerät spart Zeir für die Anfahrt und Aufsicht die anders verwendet werden kann. \pagebreak \section{Konzept} \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 \href{http://www.advanced-monolithic.com/pdf/ds1117.pdf}{AMS1117-3.3} (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{Architektur} Die Firmware wurde vollständig in prozeduralem C++ verfasst. C++ bietet eine umfangreiche Standardbibliothek sowie Kompatibilität mit C-Bibliotheken, wodurch das Projekt leicht erweitert und angepasst werden kann. Der Code ist in Dateien organisiert, die entsprechend ihrer Funktion benannt sind, z. B. \textit{net.cpp} für alle Netzwerk-relevanten Logiken. Die Methoden zur Verarbeitung von HTTP-Anfragen sind nach ihren Pfaden sortiert. \pagebreak \section{Realisierung} \subsection{Übersicht} \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.05]{esp_breakout_bare.jpg} \includegraphics[scale=0.05]{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} \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. \subsection{Stress Test} Bei Stress tests wurde das Gerät dauerhaften mit Anfragen unterdrückt um sicher zu stellen das es auch unter großen Anzahlen von Anfragen weiterhin problemlos läuft. Mit Stresss 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.1 \pagebreak \section{Dokumentation} \subsection{Erstellung} Die Firmware 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 Übericht über die Firmware zu gewärleisten wird Doxygen benutzt um ein HTML Dokument zu erstellen mit dem man die selbst-dokumentierten Informationen einsehen 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{Soll/Ist Vergleich} \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 \href{https://github.com/cesanta/mongoose}{Mongoose} \end{itemize} \subsection{Ausblick} Das Projekt wurde erfolgreich umgesetzt und erfüllt die erforderten Anforderungen. \\ Trotzdem gibt es weiterhin verbesserungen die man in einem folge Projekt analysieren sollte \pagebreak \section{Anhang} \subsection{Glossar} \printglossary[title=] \pagebreak \setcounter{subsection}{1} \subsection{Kundendokumentation} \input{Kundendokumentation} \label{sec:kd} \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}