diff --git a/bericht/dohle/Projektarbeit_Überarbeitet - Kopie.docx b/bericht/dohle/Projektarbeit_Überarbeitet - Kopie.docx new file mode 100644 index 0000000..fac4d91 Binary files /dev/null and b/bericht/dohle/Projektarbeit_Überarbeitet - Kopie.docx differ diff --git a/bericht/johannes/Projektarbeit Bericht.docx b/bericht/johannes/Projektarbeit Bericht.docx new file mode 100644 index 0000000..8d9e343 Binary files /dev/null and b/bericht/johannes/Projektarbeit Bericht.docx differ diff --git a/bericht/kevin/Kevin Projektbericht.pdf b/bericht/kevin/Kevin Projektbericht.pdf new file mode 100644 index 0000000..b306d1a Binary files /dev/null and b/bericht/kevin/Kevin Projektbericht.pdf differ diff --git a/bericht/kevin/Untitled.docx b/bericht/kevin/Untitled.docx new file mode 100644 index 0000000..bf56e65 Binary files /dev/null and b/bericht/kevin/Untitled.docx differ diff --git a/bericht/kevin/arbeit.sty b/bericht/kevin/arbeit.sty new file mode 100644 index 0000000..07592cf --- /dev/null +++ b/bericht/kevin/arbeit.sty @@ -0,0 +1,127 @@ +%% +%% LaTeX-Vorlage fuer Projektarbeit +%% + + +%% Neue User-Befehle +%% +%% \title Titel der Projektarbeit +%% \semester z.B. Wintersemester 2008/2009 +%% \betreuer Kommagetrennte Liste der Betreuer +%% \maketitle Erzeugen der Titelseite +%% \keywords Schlüsselwörter angeben + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{arbeit}[2014/10/09 Paket fuer Projektarbeiten] +\RequirePackage{scrpage2} +\RequirePackage{hyperref} % Hyperref möglichst spät laden. Vielleicht hier? + +% Kopf- und Fußzeilen setzen +\clearscrheadfoot +\pagestyle{scrheadings} +\cfoot{\thepage} + +%% Schriftalternativen zu dem Latex-Standard: Computer Modern (CM) +%%---------------------------------------------------------------- +%% Englaufende Times/Helvetica/Courier laden, aber mit richtigen Skalierungen (siehe l2tabu) +%\usepackage{mathptmx} +%\usepackage[scaled=.90]{helvet} +%\usepackage{courier} % kann auch weggelassen werden +%% Palatino, genauso wenig englaufend wie CM, aber riesiger Zeilenabstand +%\usepackage{mathpazo} +%\usepackage[scaled=.95]{helvet} +%\usepackage{courier} + +%% Neue User-Befehle +%%------------------ +\newcommand{\keywordsline}{\paragraph{Keywords:} \@keywords} +\newcommand{\@betreuer}{} +\newcommand{\betreuer}[1]{\renewcommand{\@betreuer}{#1}} +\newcommand{\@semester}{} +\newcommand{\semester}[1]{\renewcommand{\@semester}{#1}} +\newcommand{\@keywords}{} +\newcommand{\keywords}[1]{\renewcommand{\@keywords}{#1}} + +\AtBeginDocument{ + \hypersetup{bookmarksnumbered=true, + pdfcreator={Adobe Acrobat Distiller}, + pdfproducer={LaTex with hyperref} + } +} + +% Eigentliche Ausgabe der Titelseite +\renewcommand{\@maketitle} +{% + \hypersetup{% + pdftitle={\@title}, + pdfsubject={Projektarbeit \@semester}, + pdfauthor={\@author}, + pdfkeywords={\@keywords}, + }% + \begin{center} + \vskip 2em% + {\titlefont\huge \@title \par}% + \vskip 2em% + {\large\textbf{Projektarbeit}\par}% + {\large \@author\par}% + \vskip 2em% + {\large Fakultät Elektrotechnik Feinwerktechnik Informationstechnik, \\ + Technische Hochschule Nürnberg Georg Simon Ohm,\\ + Wassertorstraße 10,\\ + 90489 Nürnberg, Germany\\ + Betreuer: \@betreuer\par}% + \vspace*{3em} % + \end{center}% +} + +% Aus scrartcl.cls extrahiert, sorgt fuer richtiges Setzen bei ein-/zweispaltigem Satz +\renewcommand{\maketitle}{ + \if@twocolumn + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi + \else + \newpage + \global\@topnum\z@ + \@maketitle + \fi +} + +% Aus scrartcl.cls genommen und angepasst -> Kursive Schrift +\renewenvironment{abstract}{% + \if@twocolumn\if@abstrt %Zweispaltig + \addsec*{\abstractname} + \it% Abstract kursiv setzen + \fi + \it% Abstract kursiv setzen + \else% Einspaltig + \if@abstrt + \small + \begin{center} + {\normalfont\sectfont\nobreak\abstractname + \vspace{-.5em}\vspace{\z@}}% + \end{center} + \fi + \quotation + \fi +}{% + \if@twocolumn\else\endquotation\fi +} + +% Wir wollen Latex beim Setzen des Literaturverzeichnisses +% nicht ganz so pingelig sein lassen, da wir enge Spalten verwenden +\newcommand{\orig@bibliography}{} +\let\orig@bibliography\bibliography % Alte Definition in orig@... speichern +\renewcommand{\bibliography} % \bibliography neu definieren +{ + \tolerance 1414 % Toleranzwerte setzen (siehe l2tabu) + \hbadness 1414 % ... + \emergencystretch 1.5em % ... + \hfuzz 0.3pt % ... + \widowpenalty=10000 % ... + \vfuzz \hfuzz % ... + \raggedbottom % ... + \orig@bibliography % und das Originalkommando aufrufen +} \ No newline at end of file diff --git a/bericht/kevin/chapters.tex b/bericht/kevin/chapters.tex new file mode 100644 index 0000000..1e04a00 --- /dev/null +++ b/bericht/kevin/chapters.tex @@ -0,0 +1,7 @@ +% Hier werden die Kapitel eingebunden +% Bei Bedarf weitere Kapitel eintragen +\input{chapters/1_node-red_allgeimein.tex} +\input{chapters/2_flow.tex} +\input{chapters/3_subflows.tex} +\input{chapters/4_vergleich.tex} +\input{chapters/5_fazit.tex} \ No newline at end of file diff --git a/bericht/kevin/chapters/1_node-red_allgeimein.tex b/bericht/kevin/chapters/1_node-red_allgeimein.tex new file mode 100644 index 0000000..0fe05c7 --- /dev/null +++ b/bericht/kevin/chapters/1_node-red_allgeimein.tex @@ -0,0 +1,110 @@ +\section{Node-RED - Allgemein} +\label{kevin:node-red-allgemein} +Node-RED ist ein Werkzeug für die datenflussbasierte visuelle Programmierungmiteinerbrowser-basierte Entwicklungsumgebung. +Mit Node-RED ist es möglich verschiedene Geräte, APIs (Programmierschnittstellen)und Onlinedienste in einer grafischen Oberflächeauf einfache Weise virtuell zu verbinden. +Dadurch ist es unter der Verwendung der bereits vorinstallierten „Packages“ (Pakete mit bestimmten Funktionsweisen) Datenflüsse logisch miteinander zu verknüpfen. +Zusätzlichbesteht die Möglichkeit eigene Nodes in JavaScript zu programmieren oder mithilfe des bereits integrierten Palletten Manager benötigte Nodes nachträglich zu installieren. +Da Node-RED sehr leichtgewichtig ist, eignet es sich ideal für die Nutzung auf kostengünstiger Hardware wie dem Raspberry Pi. + +\subsection{Node-RED Vorteile} +\label{kevin:node-red-vorteile} +\begin{itemize} + \item Einfache Handhabung via Drag and Drop + \item Ideal für die Implementierung von einfachen Abläufen + \item Einfach zu erweitern + \item Schnelle Gestaltung von interessanten Weboberflächen + \item plattformübergreifend, da Node.js als Runtime +\end{itemize} + +\subsection{Node-RED in der Projektarbeit} +\label{kevin:node-red-in-projektarbeit} +\begin{figure}[H] + \centering + \includegraphics[width=.75\textwidth]{images/anwendungsschema-node-red.png} + \caption{Anwendungsschema von Node-RED in der Projektarbeit} + \label{fig:anwendungsschema-node-red} +\end{figure} +Das Tool Node-RED wird auf einem Raspberry Pi installiert, welcher als Webserver für die Erstellung des Dashboards dient. +In der Entwicklungsoberfläche werden die logischen Programmabläufe via „Drag and Drop" erstellt und Funktionsabläufe in der Programmiersprache JavaScript entwickelt. +Die Sensordaten werden von den Modulen (HomeMatic und eigene Sensoren) an den Raspberry weitergleitet und abschließend in Node-RED verarbeitet und visualisiert. + +\subsection{Node-RED Installation/Inbetriebnahme} +\label{kevin:node-red-installation} +Die Installation von Node-RED wird in Abschnitt \ref{lenny:node-red-installation} auf Seite \pageref{lenny:node-red-installation} beschrieben. + +\subsection{Browserbasierte Entwicklungsoberfläche} +\label{kevin:node-red-oberflaeche} +\begin{figure}[H] + \centering + \includegraphics[width=.75\textwidth]{images/ss-node-red.png} + \caption{Aufbau der Entwicklungsoberfläche in Node-RED} + \label{fig:ss-node-red} +\end{figure} +Nach der Installation ist die Node-RED Oberfläche im Browser unter folgender URL zu erreichen: +\begin{lstlisting} +http://ip-des-raspberry:1880 +\end{lstlisting} +Die schlicht gehaltene Node-RED-Entwicklungsoberfläche lässt sich in drei Bereiche einteilen. + +Im 1. Bereich (gelbe Markierung) ist die Node-Palette welche die mitgelieferten Nodes enthält. + +Der 2. Bereich beschreibt den eigentlichen Arbeitsbereich, dieser Bereich wird Flow, Arbeitsblatt oder Workspace genannt. +Hier werden die logischen datenflussbasierten Abläufe und Funktionen mittels Drag \& Drop der Nodes aus der Node-Palette erstellt. +Durch das Plus-Zeichen in der oberen rechten Ecke im roten Bereich können mehrere Arbeitsblätter erstellt werden. + +Im letzten 3. Bereich befindet sich das Informations-bzw. Debug-Panel. +Dort werden Info-Texte zu den einzelnen Nodes und Anleitungen für die Konfiguration angezeigt. +Der Debug-Tab zeigt die Ausgaben der Debug-Nodes und listet interne Fehler auf. +Durch die rote Schaltfläche „Implementieren“ oben rechts, werden alle Flows in den Raspberry Pi geladen und ausgeführt. + +\subsection{Visualisierung inNode-RED} +\label{kevin:node-red-visualisierung} +In der Grundausstattung sind bereits einige nützliche Nodes installiert. +Werden für die Nutzung noch weitere Nodes benötigt, können diese direkt in der Web-Oberfläche nachinstalliert werden. +Hier kann nach neuen Nodes gesucht und diese per Mausklick installiert werden. + +Für die Anzeige von Visualisierungen in dem Dashboard wird das „node-red-dashboard“ Package benötigt. +Für die Installation wird der Menüpunkt „Palette verwalten“ im Drop Down Menü oben rechts (3 horizontale Striche) ausgewählt. +Durch die Eingabe „dashboard“ in die Suchleiste, wird das notwendige Package angezeigt. +Mit der Bestätigung „installieren“ werden die benötigten Module in Node-RED hinzugefügt. +\begin{figure}[H] + \centering + \includegraphics[width=.75\textwidth]{images/pakete-verwalten-node-red.png} + \caption{Palette verwalten Dienst für nachträgliche Package-Installationen} + \label{fig:pakete-verwalten-node-red} +\end{figure} + +\subsection{Node-RED Bedienoberfläche} +\label{kevin:node-red-bedienoberflaeche} +Aufgerufen wird die Web-Oberflächemit folgender URL: +\begin{lstlisting} +http://ip-des-raspberry:1880/ui +\end{lstlisting} +Der Aufbauder Gruppen innerhalb des User Interfaces kann über das Dashboard-Panel, welches als weiterer Tab im Info-/Debug-Panel angezeigt wird, vorgenommen werden. +In der Konfiguration können die Elemente auf mehrere Tabs und in Gruppen aufgeteiltwerden. +Gehören Elemente der gleichen Gruppe an, teilen sie sich eine Kachel in der Bedienoberfläche. +\begin{figure}[H] + \centering + \includegraphics[width=.75\textwidth]{images/ss-node-red-dashboard.png} + \caption{Bedienoberfläche im Webbrowser} + \label{fig:ss-node-red-dashboard} +\end{figure} + +Für die Projektarbeit wurde das Dashboard in vier logisch zusammenhängende Gruppen eingeteilt. +Jede einzelne Gruppe repräsentiert eine Auswertung von Sensordaten mit visueller Darstellung. +Dabei wurde zwischen kommerziellen und den selbstgebauten Sensoren differenziert. + +\paragraph{} +Durch die beiden Gruppen \emph{HomeMatic Präsenz \& Tür Sensor} und \emph{HomeMatic Powermeter} werden die kommerziellen Sensoren von HomeMatic vertreten, darunter ist der Präsenz Melder, die Steckdose und der Tür Sensor. +Die verschiedenen Sensoren von HomeMatic wurden von dem Kommilitonen Sebastian Dohle angelernt und angebracht. +Innerhalb der \emph{HomeMatic Powermeter} Gruppe werden die Sensordaten der Steckdose angezeigt, darunter auch ein grafischer Verlauf der Netzspannung und des Stroms in einer Time-Chart. +Bei \emph{HomeMatic Präsenz \& Tür Sensor} werden die Standard-Ausgabewerte der Sensorenangezeigt. +Darunter der aktuelle Status des Tür-Sensors, also ob offen oder zu und die aktuelle Präsenzmeldung. + +\paragraph{} +Hinsichtlich der Gruppe \emph{Dashbaord} (links) sind die grafischen Auswertungen der eigenen Sensordaten dargestellt. +Hierbei ist in der oberen Hälfte der Ultraschall Sensor visualisiert. +Es werden nur die vereinfachten Werte 1 oder 0 angezeigt. +Das gleiche gilt für den PIR Sensor in der unteren Hälfte. +Die Sensordaten 1 oder 0 zeigen an ob der jeweilige Sensor ausgelöst hat oder nicht. +Rechts dazu in der \emph{Eigene Sensoren} Gruppe steht die textuelle Auswertung und eine logische Auswertung mit „Person(en) im Raum“ oder „Keine Person(en) im Raum“. \ No newline at end of file diff --git a/bericht/kevin/chapters/2_flow.tex b/bericht/kevin/chapters/2_flow.tex new file mode 100644 index 0000000..20ffa9e --- /dev/null +++ b/bericht/kevin/chapters/2_flow.tex @@ -0,0 +1,73 @@ +\section{Flow/Ausarbeit} +\label{kevin:flow} +In Node-RED gibt es die Möglichkeit Arbeitsblätter anzulegen. +Dadurch lassen sich die verschiedenen Sensoren in logische Gruppen verpacken. +Das Projekt bekommt dadurch eine bessere Übersicht und Strukturierung. +Jeder einzelner Flow beschreibt dabei eine eigene Logik, welche die Sensordaten auswertet und visualisiert. + +Bei der datenflussbasierten Entwicklung in Node-RED wird der Datenaustausch durch sogenannte Message-Objekte umgesetzt. + +\subsection{MainDashboard -Flow} +\label{kevin:maindashboard-flow} +\begin{figure}[H] + \centering + \includegraphics[width=.75\textwidth]{images/main-dashboard-flow.png} + \caption{Auswertung und Visualisierung des PIR-und Ultraschallsensors} + \label{fig:main-dashboard-flow} +\end{figure} +Für die visuelle Darstellung des PIR- und Ultraschallsensors ist das Flow „MainDashboard“ zuständig(s. Abb. \ref{fig:main-dashboard-flow}). +Zu Beginn sind im roten Bereich die beiden Subflows „UltraSchallSensor“ und „PirSensor“ erkennbar. +Diese repräsentieren dabei eine selbst entwickelte Logik und geben ihre Sensordaten weiter an das gelbe „merge“ Node im blauen Kasten. +Durch den „merge“ Baustein werden die beiden Datenströme miteinander kombiniert. +Dadurch können diese Datenstöme anschließend leichter durch den „PräsenzFunction“ Node ausgewertet werden. +Die beiden äußeren Zweige, haben eine einfache „TextFunction“ welche eine textuelle Darstellung der beiden Werte „Ausgelöst“ und „Nicht Ausgelöst“ in der UI anzeigen. + +\subsection{HMPresenceSensor–Flow} +\label{kevin:hmpresencesensor-flow} +\begin{figure}[H] + \centering + \includegraphics[width=.75\textwidth]{images/hmpresencesensor-flow.png} + \caption{Flow für den Homematic IP Präsenzmelder} + \label{fig:hmpresencesensor-flow} +\end{figure} +In diesem Flow (s. Abb. \ref{fig:hmpresencesensor-flow}) wird die Logik von dem HomeMatic IP Präsenzmelder definiert. +Zu Beginn wird eine Subscription durch die beiden violetten Nodes (linke Seite) erstellt, somit erhalten wir die Daten von vorgenanntem Sensor. +Je nachdem, welchen Wert wir erhalten wird dementpsrechend eine Weiterverarbeitung durch Function Nodes vorgenommen und anschließend durch einen Text auf der Bedienoberfläche dargestellt. + +\subsection{HMDoorSensor-Flow} +\label{kevin:hmdoorsensor-flow} +\begin{figure}[H] + \centering + \includegraphics[width=.75\textwidth]{images/hmdoorsensor-flow.png} + \caption{HomeMatic Türsensor Flow} + \label{fig:hmdoorsensor-flow} +\end{figure} +Der HomeMatic Funk Tür-/Fensterkontakt liefert durch die Subscription „DoorSensor“ (violetterNode) einen Boolean-Wert, ob die Türe offen oder geschlossen ist. +Der weitergeleitete Wert wird in der „Function“ Node durch den String „Geschlossen“ oder „Offen“ ersetzt und als Text in der Bedienoberfläche dargestellt. + +\subsection{HMPowermeter–Flow} +\label{kevin:hmpowermeter-flow} +\begin{figure}[H] + \centering + \includegraphics[width=.75\textwidth]{images/hmpowermeter-flow.png} + \caption{Sensorauswertung für den Homematic Funk-Schaltaktor} + \label{fig:hmpowermeter-flow} +\end{figure} +Der Homematic Funk-Schaltaktor bietet die Funktionalität Daten zu senden und zu empfangen. +Die blaue Markierung beschreibt die Funktion Daten durch die Subscriptions (violetten Nodes) zu empfangen. +Dabei werden die Werte Netzspannung, Strom, Leistung und Frequenz auf der Bedienoberfläche dargestellt. +Die Netzspannung und der Strom haben zusätzlich eine grafische Auswertung erhalten, um dadurch den zeitlichen Verlauf der Werte besser verfolgen zu können. +Für das Ein-/ Ausschalten des Funk-Schaltaktors wird ein Switch-Schalter innerhalb der Bedienoberfläche erstellt. +Das Schalten erfolgt durch die Booleanwerte True/False und wird anschließend mit einem sogenannten Thema/Topic zu RedMatic weitergeleitet. +Der„StateText“ Node zeigt in der Bedienoberfläche den aktuellen Verbindungsstatus des Homematic Moduls an. +\begin{figure}[H] + \centering + \includegraphics[width=.75\textwidth]{images/hmpowermeter-redmatic-flow.png} + \caption{Weiterleitungen in RedMatic} + \label{fig:hmpowermeter-redmatic-flow} +\end{figure} +Die Weiterleitung der Sensordaten an Node-RED erfolgt in RedMatic in Abschnitt \ref{lennart:redmatic} auf Seite \pageref{lennart:redmatic}. +Wie bei der blauen Markierung erkennbar ist, werden in diesem Flow die Sensordaten des Homematic Modulsdirekt an Node-RED weitergeleitet und dort empfangen. +Die rote Markierung zeigt die Logik für das Umschalten des Funk-Schaltkontaktes. +Zu Beginn wird eine Subscription auf Node-RED gemacht, welche die Daten des Switch-Schalters empfängt. +Anschließend werden die empfangenen Boolean-Werte an das Modul gesendet und umgesetzt. \ No newline at end of file diff --git a/bericht/kevin/chapters/3_subflows.tex b/bericht/kevin/chapters/3_subflows.tex new file mode 100644 index 0000000..a6b67e1 --- /dev/null +++ b/bericht/kevin/chapters/3_subflows.tex @@ -0,0 +1,53 @@ +\section{Subflow} +\label{kevin:subflow} +Mit der Funktion Subflow bietet Node-RED die Möglichkeit, kleinere untergeordnete Flows zu erstellen die in einem Projekt auf verschiedenen Arbeitsblättern wiederverwendet werden können. +Durch Subflows können komplexere Abläufe und Auswertungen in einem Node abstrahiert werden. +Größere Projekte werden dadurch vereinfacht und klarer strukturiert. + +\subsection{PirSensor–Subflow} +\label{kevin:pir-subflow} +\begin{figure}[H] + \centering + \includegraphics[width=.75\textwidth]{images/pir-subflow.png} + \caption{Subflow PIR-Sensor} + \label{fig:pir-subflow} +\end{figure} +Für die Anzeige der Sensordaten in einer Time-Chart, wird eine Subscription durchgeführt um die Daten zu empfangen. +Durch den anschließenden „NachrichtenBegrenzung“ Node wird nur eine bestimmte Anzahl an Daten pro Zeiteinheit weitergeleitet, überschüssige Daten werden verworfen. + +Die folgend „PirFunction“ filtert die Daten und leitet vereinfachte Werte weiter an das TimeChart und an den Ausgang des Subflows. +\lstinputlisting{code/pirfunction.js} +Das „PirFunction“ Node wertet die eintreffenden Daten bei der \inline{if} Anweisung aus und erstellt ein abstrahiertes Messageobjekt für die Weiterverarbeitung. +Die \inline{If-Else}-Funktion in den Zeilen 3-17 und 18-32 wird unterschieden ob ein PIR-Sensor ausgelöst hat oder nicht, demnach wird ein neues Objekt mit dem Namen \inline{newMsg} erstellt. +Mit \inline{return newMsg} werden die Daten weiter an den Ausgang und der Time-Chart geschickt. + +\subsection{UltraSchallSensor -Subflow} +\begin{figure}[H] + \centering + \includegraphics[width=.75\textwidth]{images/ultraschall-subflow.png} + \caption{Ultraschallsensor Subflow} + \label{fig:ultraschall-subflow} +\end{figure} +Das Arbeitsblatt für den „UltraSchallSensor“ wurde in vier logische Untergruppen eingeteilt (siehe farbige Markierungenin Abb. \ref{fig:ultraschall-subflow}). + +Innerhalb der grünen Markierung werden die Ultraschallsensordaten durch die Subscription empfangen. +Durch das anschließende „Function“ Node wird der Datenstrom aufgeteilt und die Sensoren einzeln ausgewertet. +Durch die \inline{Sensor2_I} und \inline{Sensor1_A} Funktion werden die einzelnen Datenströme ausgewertet. +Da der eine Ultraschallsensor eine zu große Schwankung aufwies ist dieser nicht weiter mit in die Auswertung der Logik eingegangen, dadurch wurde in der \inline{Sensor1_A} Funktion eine Weiterleitung mit \inline{return 0} definiert. + +\paragraph{} +Die türkise Markierung, unten rechts, definiert die Auswertungschart. + +\paragraph{} +Die Graue Markierung verbindet die Ausgabedaten von dem Ultraschallsensor und HomeMatic Funk Tür-/Fensterkontakt. +Durch das „merge“ Node werden die beiden Datenströme zusammengeführt und in der „OutputFunction“ verarbeitet. +Nach der Verarbeitung werden die Ergebnisse an den Output geleitet. +\lstinputlisting{code/sensor2_l.js} +Die „Sensor2\_I“ Function verarbeitet von einem der beiden Ultraschall\-sensoren die Daten. +Innerhalb der Zeilen 4 und 5 werden zuerst die Konstanten festgelegt, welche die Distanz und eine Schwankungstoleranz definieren. + +In den Zeilen 9 bis 22 wird durch eine Kontrollstruktur geprüft, ob jemand den Ultraschallsensor passiert hat. +Sobald eine Person vorbeigelaufen ist, wird ein neues Message-Objekt erstellt und mit den dem payload-Wert true gefüllt. +\lstinputlisting{code/sensor2_l-output.js} +Die „OutputFunction“ beschreibt die Logikauswertung der Daten von dem HomeMatic Funk Tür-/ Fensterkontakt und des Ultraschallsensors. +Durch die Überprüfung mit der Kontrollstruktur wird definiert, wenn die Türe geöffnet ist und jemand den Ultraschallsensor passiert. \ No newline at end of file diff --git a/bericht/kevin/chapters/4_vergleich.tex b/bericht/kevin/chapters/4_vergleich.tex new file mode 100644 index 0000000..633552f --- /dev/null +++ b/bericht/kevin/chapters/4_vergleich.tex @@ -0,0 +1,2 @@ +\section{Vergleich zu anderen IoT Tools} +\label{kevin:vergleich} diff --git a/bericht/kevin/chapters/5_fazit.tex b/bericht/kevin/chapters/5_fazit.tex new file mode 100644 index 0000000..f30c251 --- /dev/null +++ b/bericht/kevin/chapters/5_fazit.tex @@ -0,0 +1,8 @@ +\section{Node-RED Fazit} +\label{kevin:fazit} +Mit dem Werkzeugbaukasten Node-RED ist es möglich innerhalb von kürzester Zeit optisch ansprechende Dashboards zu erstellen. +Die große Auswahl an Bausteinen bietet eine gute Voraussetzung für das Entwerfen übergreifender Anwendungen. +Das Spektrum reicht von der Ansteuerung von Hardware bis zu High-Level-APIs wie Social Media Plattformen. +Node-RED kann durch eigene Scripte erweitert werden, diese werden in der Programmiersprache JavaScript geschrieben. +Für die Projektarbeit hat sich Node-RED sehr gut bewährt, weil keine expliziten Programmierkenntnisse vorausgesetzt sind. +Weiterhin stellt der Plattform-Anbieter ausführliche Anleitungen und Tutorials bereit. \ No newline at end of file diff --git a/bericht/kevin/code/pirfunction.js b/bericht/kevin/code/pirfunction.js new file mode 100644 index 0000000..22759a7 --- /dev/null +++ b/bericht/kevin/code/pirfunction.js @@ -0,0 +1,33 @@ +var newMsg; + +if(msg.payload === "10" || msg.payload === "00") +{ + if(msg.payload === "10") + { + newMsg = { + topic: "Pir Sensor 1 & 2", + payload: 1 } + } + else + { + newMsg = { + topic: "Pir Sensor 1 & 2", + payload: 0 } + } +} +else if(msg.payload === "01" || msg.payload === "11") +{ + if(msg.payload === "11") + { + newMsg = { + topic: "Pir Sensor 1 & 2", + payload: 1 } + } + else + { + newMsg = { + topic: "Pir Sensor 1 & 2", + payload: 0 } + } +} +return newMsg; \ No newline at end of file diff --git a/bericht/kevin/code/sensor2_l-output.js b/bericht/kevin/code/sensor2_l-output.js new file mode 100644 index 0000000..af7a421 --- /dev/null +++ b/bericht/kevin/code/sensor2_l-output.js @@ -0,0 +1,41 @@ +var newMsg; +if(Array.isArray(msg.payload)) +{ + if(msg.payload[0].topic === "UltraschallSensor_Output" /* && msg.payload[1].topic === "DoorSensor" */) + { + if(msg.payload[0].state === true /* && msg.payload[1].state === true */) + { + newMsg = { topic: "Output", + val: 1, + state: true } + + return newMsg; + } else { + newMsg = { topic: "Output", + val: 0, + state: false } + + return 0; + } + } else if(msg.payload[1].topic === "UltraschallSensor_Output" /* && msg.payload[1].topic === "DoorSensor" */) + { + if(msg.payload[0].state === true /* && msg.payload[1].state === true */) + { + newMsg = { topic: "Output", + val: 1, + state: true } + + return newMsg; + } else { + newMsg = { topic: "Output", + val: 0, + state: false } + + return 0; + } + } else { + newMsg = { topic: "Output", val: 0, state: false } + + return 0; + } +} \ No newline at end of file diff --git a/bericht/kevin/code/sensor2_l.js b/bericht/kevin/code/sensor2_l.js new file mode 100644 index 0000000..7b3d65b --- /dev/null +++ b/bericht/kevin/code/sensor2_l.js @@ -0,0 +1,23 @@ +//'Innerer' Ultraschall-Sensor (Sensor Richtung Raum) +//Info: Neue Message wird weitergeleitet. Auswertung mit Bedingungsprüfung + +const Distanz = 115; //eingestellte Entfernung (Programmierung in ArduinoStudio) +const Toleranz = 10; //Schwankungs-Toleranz + +var newMsg; //Neue Message für neue Werte erstellen + +if (msg.payload < (Distanz - Toleranz))//ausgelöst +{ + newMsg = { + topic: "UltraschallSensor_Innen", + payload: true, + val: msg.payload } //msg.payload -> aktuellen Wert mitliefern +} +else +{ + newMsg = { + topic: "UltraschallSensor_Innen", + payload: false, + val: msg.payload } //msg.payload -> aktuellen Wert mitliefern +} +return newMsg; \ No newline at end of file diff --git a/bericht/kevin/config.tex b/bericht/kevin/config.tex new file mode 100644 index 0000000..b86bb53 --- /dev/null +++ b/bericht/kevin/config.tex @@ -0,0 +1,9 @@ +% Details der Arbeit +\title{Präsenzerkennung im Rahmen einer modularen Smarthome Umgebung} + +\author{Sebastian Dohle, Lennart Heimbs, Kevin Holzschuh, Johannes Krug} +\date{März-September 2019} + +\betreuer{Prof.-Dr. Oliver Hofmann, B.-Eng. Martin Wimmer} +\semester{Sommersemester 2019} +\keywords{Smarthome, Raspberry Pi, Homematic, Homegear, Node-Red, Präsenz\-erkennung, ESP8266, MQTT} \ No newline at end of file diff --git a/bericht/kevin/images/anwendungsschema-node-red.png b/bericht/kevin/images/anwendungsschema-node-red.png new file mode 100644 index 0000000..95a1774 Binary files /dev/null and b/bericht/kevin/images/anwendungsschema-node-red.png differ diff --git a/bericht/kevin/images/hmdoorsensor-flow.png b/bericht/kevin/images/hmdoorsensor-flow.png new file mode 100644 index 0000000..a80dbdb Binary files /dev/null and b/bericht/kevin/images/hmdoorsensor-flow.png differ diff --git a/bericht/kevin/images/hmpowermeter-flow.png b/bericht/kevin/images/hmpowermeter-flow.png new file mode 100644 index 0000000..7ada34b Binary files /dev/null and b/bericht/kevin/images/hmpowermeter-flow.png differ diff --git a/bericht/kevin/images/hmpowermeter-redmatic-flow.png b/bericht/kevin/images/hmpowermeter-redmatic-flow.png new file mode 100644 index 0000000..6df12e6 Binary files /dev/null and b/bericht/kevin/images/hmpowermeter-redmatic-flow.png differ diff --git a/bericht/kevin/images/hmpresencesensor-flow.png b/bericht/kevin/images/hmpresencesensor-flow.png new file mode 100644 index 0000000..48c7dd7 Binary files /dev/null and b/bericht/kevin/images/hmpresencesensor-flow.png differ diff --git a/bericht/kevin/images/main-dashboard-flow.png b/bericht/kevin/images/main-dashboard-flow.png new file mode 100644 index 0000000..64257be Binary files /dev/null and b/bericht/kevin/images/main-dashboard-flow.png differ diff --git a/bericht/kevin/images/pakete-verwalten-node-red.png b/bericht/kevin/images/pakete-verwalten-node-red.png new file mode 100644 index 0000000..3c192af Binary files /dev/null and b/bericht/kevin/images/pakete-verwalten-node-red.png differ diff --git a/bericht/kevin/images/pir-subflow.png b/bericht/kevin/images/pir-subflow.png new file mode 100644 index 0000000..db17bb6 Binary files /dev/null and b/bericht/kevin/images/pir-subflow.png differ diff --git a/bericht/kevin/images/ss-node-red-dashboard.png b/bericht/kevin/images/ss-node-red-dashboard.png new file mode 100644 index 0000000..31ee48c Binary files /dev/null and b/bericht/kevin/images/ss-node-red-dashboard.png differ diff --git a/bericht/kevin/images/ss-node-red.png b/bericht/kevin/images/ss-node-red.png new file mode 100644 index 0000000..304487a Binary files /dev/null and b/bericht/kevin/images/ss-node-red.png differ diff --git a/bericht/kevin/images/ultraschall-subflow.png b/bericht/kevin/images/ultraschall-subflow.png new file mode 100644 index 0000000..9871904 Binary files /dev/null and b/bericht/kevin/images/ultraschall-subflow.png differ diff --git a/bericht/kevin/includes.tex b/bericht/kevin/includes.tex new file mode 100644 index 0000000..05976d8 --- /dev/null +++ b/bericht/kevin/includes.tex @@ -0,0 +1,49 @@ +\usepackage{listings, xcolor, realboxes, xpatch} + +\lstset{literate= + {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 + {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1 + {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1 + {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1 + {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 + {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 + {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1 + {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1 + {Ã}{{\~A}}1 {ã}{{\~a}}1 {Õ}{{\~O}}1 {õ}{{\~o}}1 + {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1 + {ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1 + {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1 + {€}{{\euro}}1 {£}{{\pounds}}1 {«}{{\guillemotleft}}1 + {»}{{\guillemotright}}1 {ñ}{{\~n}}1 {Ñ}{{\~N}}1 {¿}{{?`}}1 +} + +\definecolor{codegreen}{rgb}{0,0.6,0} +\definecolor{codegray}{rgb}{0.5,0.5,0.5} +\definecolor{codepurple}{rgb}{0.58,0,0.82} +\definecolor{backcolour}{rgb}{0.95,0.95,0.92} + +\lstdefinestyle{listingstyle}{ + backgroundcolor=\color{backcolour}, + commentstyle=\color{codegreen}, + keywordstyle=\color{magenta}, + numberstyle=\tiny\color{codegray}, + stringstyle=\color{codepurple}, + basicstyle=\ttfamily\footnotesize, + breakatwhitespace=false, + breaklines=true, + captionpos=b, + keepspaces=true, + numbers=left, + numbersep=5pt, + showspaces=false, + showstringspaces=false, + showtabs=false, + tabsize=2 +} + +\lstset{style=listingstyle} +\def\inline{\lstinline[basicstyle=\ttfamily\footnotesize]} + +\makeatletter +\xpretocmd\lstinline{\Colorbox{backcolour}\bgroup\appto\lst@DeInit{\egroup}}{}{} +\makeatother diff --git a/bericht/kevin/main.pdf b/bericht/kevin/main.pdf new file mode 100644 index 0000000..097433c Binary files /dev/null and b/bericht/kevin/main.pdf differ diff --git a/bericht/kevin/main.tex b/bericht/kevin/main.tex new file mode 100644 index 0000000..efb56f2 --- /dev/null +++ b/bericht/kevin/main.tex @@ -0,0 +1,46 @@ +\documentclass[11pt]{scrartcl} + +\usepackage[utf8]{inputenc} +\usepackage[a4paper, right=2cm, top=2cm, left=3cm, bottom=3cm]{geometry} +\usepackage[ngerman]{babel} + +\usepackage{arbeit} + +\usepackage{acronym} +\usepackage{xpatch} +\usepackage{standalone} +\usepackage{tikz} +\usepackage[ngerman]{babel} +\usepackage{float} +\usepackage{subcaption} + +\usepackage{tikz} +\usepackage{graphicx} +\usetikzlibrary{decorations.pathreplacing} +\usetikzlibrary{positioning} + +\definecolor{codegreen}{rgb}{0,0.6,0} +\definecolor{codegray}{rgb}{0.5,0.5,0.5} +\definecolor{codepurple}{rgb}{0.58,0,0.82} +\definecolor{backcolour}{rgb}{0.95,0.95,0.92} + +\input{includes} + +%% Beginn des eigentlichen Dokumentes +%%----------------------------------- +\begin{document} + +\makeatletter +\xpretocmd\lstinline{\Colorbox{backcolour}\bgroup\appto\lst@DeInit{\egroup}}{}{} +\makeatother + + +\tableofcontents +\newpage + +\input{chapters.tex} + +%\newpage +%\bibliographystyle{plain} +%\bibliography{references} +\end{document} diff --git a/bericht/kevin/references.bib b/bericht/kevin/references.bib new file mode 100644 index 0000000..dafa092 --- /dev/null +++ b/bericht/kevin/references.bib @@ -0,0 +1,43 @@ +@misc {bendel2019smarthome, + author = "Prof. Dr. Oliver Bendel", + title = "Smart Home", + year = "2019", + month = "Januar", + howpublished = {https://wirtschaftslexikon.gabler.de/definition/smart-home-54137/version-368820}, + note = "[Online; aufgerufen 07-08-2019]" +} + +@misc {mayer2017smarthomesetup, + author = "Patrik Mayer", + title = "Homematic mit node-red über homegear", + year = "2017", + month = "Juli", + howpublished = {https://allgeek.de/2017/07/09/homematic-mit-node-red-ueber-homegear/}, + note = "[Online; aufgerufen 27-08-2019]" +} + +@misc {homegear2018documentation, + author = "Homegear", + title = "Homegear Documentation", + year = "2016-2018", + howpublished = {https://doc.homegear.eu/overview/}, + note = "[Online; aufgerufen 28-08-2019]" +} + +@misc {alexreinert2019pivccusetup, + author = "Alexander Reinert", + title = "piVCCU Raspberry Pi Setup", + year = "2019", + month = "Juni", + howpublished = {https://github.com/alexreinert/piVCCU/blob/master/docs/setup/raspberrypi.md}, + note = "[Online; aufgerufen 09-09-2019]" +} + +@misc {sebastianraff2019redmaticinstallation, + author = "Sebastian Raff", + title = "Installation", + year = "2019", + month = "März", + howpublished = {https://github.com/rdmtc/RedMatic/wiki/Installation}, + note = "[Online; aufgerufen 10-09-2019]" +} diff --git a/bericht/lennart/main.pdf b/bericht/lennart/main.pdf new file mode 100644 index 0000000..432c29f Binary files /dev/null and b/bericht/lennart/main.pdf differ diff --git a/bericht/lennart/main.tex b/bericht/lennart/main.tex index 5ecb331..20738f1 100644 --- a/bericht/lennart/main.tex +++ b/bericht/lennart/main.tex @@ -1,4 +1,4 @@ -\documentclass[11pt,a4paper,ngerman]{scrartcl}%{article} +\documentclass[11pt]{scrartcl} \usepackage[utf8]{inputenc} \usepackage[a4paper, right=2cm, top=2cm, left=3cm, bottom=3cm]{geometry}