update notes

Took 6 seconds
This commit is contained in:
Tobias Hopp 2023-01-21 15:36:26 +01:00
parent 20def40001
commit 58a3df8111

View File

@ -49,47 +49,20 @@ Was haben wir bereits am iTender Projekt gemacht?
#### Aufbau #### Aufbau
- Das Programm ist aufgebaut in eine Client-Seite und eine Server-Seite - Das Programm des iTenders ist getrennt in 3 Teile
- Diese sind zur Sicherheit des Geräts voneinander getrennt - iTender Basis
- Server und Client kommunizieren über einen WebSocket, welchen man sich als eine Art Chat-Kanal vorstellen kann - Die Basis besteht aus der Kommunikation zwischen den Pumpen, LEDs und jeglicher Hardware
- Client und Server haben bestimmte Status, ein Status ist beispielsweise READY oder FILLING - Außerdem gibt es Timer, automatische Events, Prüfung und aktualisierung von Getränken etc.
- Die Oberfläche ist sowohl über das Display, aber auch über ein Tablet steuerbar - Sie übernimmt z.B. das Starten vom Getränke-Füllen, stoppen sowie Berechnen von den Zutaten für ein Getränk
- Oberfläche sendet Befehle an den Server → Server verarbeitet und gibt ggf. eine Antwort - Dieser Teil arbeitet seh eng mit dem Websocket-Server zusammen, um so auf Events vom Endnutzer zu reagieren.
- Bei jedem start wird der Status des Netzwerkes erfasst - iTender Webserver
- Sollte Netzwerk zu verfügung stehen, versucht iTender die Getränke vom Hauptserver (im Internet) zu aktualisieren - Der Webserver ist einfach ein statischer Webserver welche Dateien "serviert", die dann von der Oberfläche geladen werden können.
- Somit kommen auch beim bestehenden Produkt immer neue Getränke und mögliche Zutaten dazu - Der Client-Browser oder iTender-Display lädt dann diese Seite, erstmal passiert dann noch nichts
- Nach jedem mischen und alle 5 minuten werden die Füllstände der Behälter erfasst - iTender Websocket-Server
- Danach werden auch die verfügbaren Cocktails berechnet, diese werden dann im Webinterface angezeigt - Der Websocket-Server dient zur eigentlichen Live-Kommunikation zwischen Client und Gerät.
- Der Server und die Webseite (Endgerät), bauen eine Ende-zu-Ende Verbindung auf
- Die Kommunikation zwischen Client und Websocket-Server basiert auf JSON (Javascript-Objekt-Notation).
- Da der Websocket in früheren Client-Versionen anfällig für Fehler beim Übertragen von nicht alphabetischen Zeichen war, wird der gesendete Inhalt noch in Base64-Kodiert.
- Base64 dient dazu, die Daten binär zu kodieren, um sie auf der Gegenstelle wieder zu entkodieren.
- Außerdem wird beim übertragen eine Checksumme mitgegeben, um bei Fehlerhaften Paketen ein neues anzufragen.
### 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 | | |