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