# ### Achtung! \###
Diese Datei ist nicht mehr aktuell.<br>
Bitte nutze die neue Wiki unter [https://git.gaminggeneration.de/tobiash/itender/wiki](https://git.gaminggeneration.de/tobiash/itender/wiki) (Wiki des iTender Projekts)

<br><br><br><br><br><br><hr><br><br><br><br><br>



# Notes und kleine Dokumentation

Was haben wir bereits am iTender Projekt gemacht?

<hr>

## Konzept-Erstellung

#### Ideen

- Grund-Ideen
    - Smarten Cocktail-Mischer
    - 4 Getränke Behälter (mit Saft, Sirup oder Likör bzw. Schnapps)
    - 4 Pumpen (Peristaltik Pumpe)
    - Raspberry Pi als Prozessoreinheit
    - Display in der Front mit Benutzeroberfläche
    - Automatisches filtern von Getränken, je nachdem welche "Zutaten" in den Behältern sind
    - Messung der aktuellen Füllmenge der Behälter, basierend auf Gewicht (mittels Wägezelle) oder Abstand zur
      Wasseroberfläche (mittels Ultraschall-Sensor)

- Nice to have
    - LED-Stripes für schöne Beleuchtung, basierend auf dem aktuellen Status der Maschine
    - Extra Schlauch für weitere außenstehende Getränke
        - Mit Bier-Fass Adapter?
    - Kühlung der Container mittels Peltierelement und Lüftern

#### Erstes 3D-Modell

<img src="./Screenshot_Model1.1_FrontTopRight.png" width="50%">
<img src="./Screenshot_Model1.1_BackDownLeft.png" width="50%">

#### Neues 3D-Modell

<img src="./Screenshot_Model1.2_Front.png" width="50%">
<img src="./Screenshot_Model1.2_Back.png" width="50%">


<hr>

## Das Programm

#### Aufbau

- Das Programm ist aufgebaut in eine Client-Seite und eine Server-Seite
- Diese sind zur Sicherheit des Geräts voneinander getrennt
- Server und Client kommunizieren über einen WebSocket, welchen man sich als eine Art Chat-Kanal vorstellen kann
- Client und Server haben bestimmte Status, ein Status ist beispielsweise READY oder FILLING
- Die Oberfläche ist sowohl über das Display, aber auch über ein Tablet steuerbar
- Oberfläche sendet Befehle an den Server → Server verarbeitet und gibt ggf. eine Antwort
- Bei jedem start wird der Status des Netzwerkes erfasst
    - Sollte Netzwerk zu verfügung stehen, versucht iTender die Getränke vom Hauptserver (im Internet) zu aktualisieren
    - Somit kommen auch beim bestehenden Produkt immer neue Getränke und mögliche Zutaten dazu
- Nach jedem mischen und alle 5 minuten werden die Füllstände der Behälter erfasst
- Danach werden auch die verfügbaren Cocktails berechnet, diese werden dann im Webinterface angezeigt


### Erklärung der Dateien und Modulen

| Context                  | Datei                                 | Beschreibung                                                                                                                                                                                                                                                                      |
|--------------------------|---------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| iTender                  | main                                  | Die Hauptdatei, sie ist der Einstiegspunkt des Programms, von hier aus wird die Datenbank verbunden und der Webserver gestartet                                                                                                                                                   |
| iTender                  | MyGPIO                                | Die eigene GPIO Library von Tobias Hopp. Sie dient zum Steuern von GPIO-Pins am Raspberry Pi                                                                                                                                                                                      |
| iTender                  | Utils                                 | Hier befinden sich einige schnelle Funktionen, welche des öfteren von mehreren Methoden im Programm genutzt werden                                                                                                                                                                |
| iTender                  | RejectReason, SensorType, RequestType | Ein paar Klassen welche Enums (sogenannte feste Platzhalter für Variablen) bereitstellen                                                                                                                                                                                          |
| iTender                  | SensorType                            | Die Art des Sensors, aktuell sind Ultraschallsensoren und Wäge sensoren unterstützt                                                                                                                                                                                               |
| Webserver                | App                                   | Die App ist die Instanz des Webservers, welcher für die Oberfläche genutzt wird, dieser wird vom iTender selbst, sowie etwaigen anderen Geräten aufgerufen                                                                                                                        |
| Webserver                | WebsocketApp                          | Ähnlich wie die normale App, nur spezifisch für die Direktverbindung zwischen Oberfläche und Server                                                                                                                                                                               |
| Webserver                | WebSocketHandler                      | Die Server-Seitige WebSocket-Verbindung. Hier werden die Nachrichten an die Oberfläche gesendet und verarbeitet                                                                                                                                                                   |
| iTender                  | LEDHandler                            | Übernimmt die Steuerung der WS2812b LEDs                                                                                                                                                                                                                                          |
| iTender                  | Category                              | Kategorie des Getränks                                                                                                                                                                                                                                                            |
| iTender                  | Settings                              | Die Einstellungen des iTenders, werden gespeichert in der config.json                                                                                                                                                                                                             |
| Weboberfläche            | error.pug, index.pug, layout.pug      | Die statische Webseite für den iTender, diese Oberfläche liest die JavaScript Dateien ein und verbindet sich dann mit dem WebSocket (mit dem iTender)                                                                                                                             |
| Compiler                 | dist/ Ordner                          | Hier sind alle kompilierten Dateien zu finden                                                                                                                                                                                                                                     |
| Webserver                | web/main                              | Der Einstiegspunkt für die Weboberfläche, von hier aus wird mit dem WebSocket verbunden                                                                                                                                                                                           |
| iTender                  | HX711                                 | Die Klasse um den HX711 Wäge sensor abzufragen                                                                                                                                                                                                                                    |
| Webserver, Weboberfläche | WebsocketPayload                      | Das ist die Payload (zu Deutsch Datenpaket), welche sowohl vom Webserver als auch von der Weboberfläche zum kommunizieren genutzt wird                                                                                                                                            |
| Datenbank                | database/Container                    | Hier werden die jeweiligen Container (wo die Inhalte für den Cocktail rein gefüllt werden) gespeichert                                                                                                                                                                            |
| Datenbank                | database/Database                     | Die Hauptklasse der Datenbank im iTender, sie sorgt für eine statische Verbindung mit der Datenbank und ermöglicht die Abfragen / Speicherungen von Getränken, Behältern und Zutaten                                                                                              |
| Datenbank                | database/Drink                        | Hier werden die Getränke gespeichert, welche vom Server heruntergeladen werden                                                                                                                                                                                                    |
| Datenbank                | database/Job                          | Diese Klasse stellt den aktuellen Job des iTenders da, er wird erstellt wenn der Benutzer einen Drink haben möchte. In diesem Job-Objekt sind dann Werte wie die Kalkulation der Dauer, die Zutaten und Mengen, die jeweiligen Pumpen sowie ein Start und Endzeitpunkt festgelegt |
| Datenbank                | database/Ingredient                   | Hier sind die Zutaten für die jeweiligen Drinks gespeichert. Es werden zu allen Drinks referenzen zu diesen Objekten erstellt                                                                                                                                                     |
| Weboberfläche            | web/Fill                              | In dieser Klasse werden die Fill-Events erwartet. Sollte der Benutzer ein Getränk haben wollen, wechselt der iTender auf den Status FILLING. Diese Klasse greift das Event auf und zeigt dementsprechend dem Benutzer den aktuellen Status seines Auftrags an                     |
| Weboberfläche            | web/Modal                             | Diese Klasse ist eine Art Herzstück geworden. Sie ermöglicht das schnelle und einfache Darstellen von Popups für den Benutzer. Beispiele sind Fehler oder Bestätigungsfenster.                                                                                                    |
| Weboberfläche            | web/Setup                             | Das Setup erwartet wie die Fill-Klasse ein Event. Hierbei das SETUP-Event. Sollte es "gefeuert" werden, werden hier die nötigen Maßnahmen getroffen um dem Benutzer das Setup anzuzeigen.<br/>                                                                                    |  
| Weboberfläche            | web/WebHandler                        | Der WebHandler übernimmt das öffnen von Panels (welches Menü gerade offen ist) sowie dem korrekten Anzeigen aller Drinks welche vom iTender bereitgestellt werden                                                                                                                 |
| Weboberfläche            | web/WebWebSocketHandler               | Das Gegenstück zum WebSocketHandler, nur auf Web-Seite. Daher auch das doppelte Web im Namen. Es übernimmt das Verbinden mit dem WebSocket, welcher die Kommunikation zwischen iTender und Oberfläche ermöglicht                                                                  |
| Weboberfläche            |                                       |                                                                                                                                                                                                                                                                                   |
