\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“.