Prof. J. Walter - Informationstechnik, Mikrocomputertechnik, Digitale Medien Konzeptentwicklung
Hochschule Karlsruhe Logo Informationstechnik
Webseitenoptimierung
Wintersemester 2018/2019
Johannes Zangl
Lars Köppel

Konzeptentwicklung

Idee zur Aufteilung der Ordnerstruktur:
Konzept_Ordner

Um den Code einheitlich zu gestalten, wird die Google Code Convention für C++ angewendet.
Desweiteren stellen wir folgende Anforderungen für unsere Klassen:

Alle Dateien sollen soweit möglich Objektorientiert programmiert werden. Daher sind keine c-Dateien zulässig.

Alle Treiber sollen als Instanzen initialisiert werden, sodass ein einfaches Handhaben sichergestellt wird.

Objekte sollen ohne Komplikationen wiederverwendet werden können.
Dafür werden soweit möglich Interface-Schnittstellen übergeben, sodass keine konkrete Klassenpointer benutzt werden müssen. Die Interface-Schnittstellen sollten Datencontainer benutzen.

Structs und Container sollen soweit möglich wiederverwendet werden.

Neustrukturierung des Projekts:
Das Projekt wird zukünftig in mehrere Teile unterteilt:
Bestellstation, Mixer, Füllstandsanzeige und Abholstation.

Durch diese Unterteilungen ergibt sich auch eine notwendig neue Software-Struktur. So werden auf bestehende Treiber, Bibliotheken und gemeinsam genutzten Objekten alle oder mehrere Teilprojekte zugreifen.
Dafür ist es notwendig, dass die gemeinsam genutzten Projekte als Komponenten bereitgestellt werden und jedes Projekt diese Abhängigkeiten so einbindet, dass diese aktualisiert werden können, ohne diese jedesmal neu zu kopieren.

Für die Abhängigkeiten, nachfolgend MixHit-Libraries, wird ein gleichnamiges Github-Repository angelegt. Diese Abhängigkeiten werden dann als Submodule in die einzelnen Projekte eingebunden. Submodule können einfach eingebunden werden und können über ein Befehl / Klick aktualisiert werden.

Umstellung der IDE / Kompilierung

Bisher wurde Microsoft Visual Studio 2017 mit einer ArduinoIDE-Erweiterung zum Kompilieren des Projektes genutzt.
Dabei sind mehrere Probleme aufgefallen:
* Da die Compiler-Einstellungen bei der ArduinoIDE und bei Visual Studio global und nicht für jedes Projekt einzeln gespeichert werden, sind zusätzliche Konfigurationen von Nöten.
* Die Abhängigkeiten, welche auf das Framework von Espressif verweisen, sind aktuell auf der Version 1.0.0. Das ist eine veraltete Version, wo einige Bugs vorhanden sind (SD-Karte, veraltetes FreeRTOS etc.)
* Die Abhängigkeiten können in dem aktuell benutzten Kontext nicht so schön eingebunden werden.

Daher wurde eine Änderung der IDE und Kompilierung evaluiert. In ersten Tests hat sich gezeigt, dass die Kompilierung über das Framework esp-idf schneller und effektiver ist. Der entsprechende Kompiler von Espressif warnt vor mehr Fehlern und lässt sich besser und genauer einstellen. Für das Anlegen des Projektes und die Einrichtung von Eclipse wurde diese Anleitung benutzt.

Das bestehende Projekt wird dementsprechend umgestellt:
1. Die bestehenden Klassen werden angepasst, sodass keine Arduino-Syntax mehr verwendet wird.
2. Die bestehenden Klassen werden in MixHit-Mixer und MixHit-Libraries unterteilt.
3. MixHit-Libraries wird als Git-Submodule deklariert und in ein seperates Github-Repository gelegt.
4. Der Kompiler wird angepasst und das Projekt wird neu kompiliert.

Webseite
Die Webseite soll wie in der Einleitung optimiert werden.
Als erster Schritt wurde die Latenz der aktuellen Webseite gemessen. Dazu wurde über Python einige Male eine GET-Anfrage auf die index-Seite geschickt und die Antwortzeit ausgewertet. Dabei ist kein Messwert unter eine Sekunde ausgefallen.
Bei ersten Tests mit einem neuen Webserver unter der Vorlage von nkolbans cpp_utils konnten die Latenzen auf einen Wert von 30 bis 50ms verbessert werden.

Ziel der Neuentwicklung der Webseite ist es, das benötigte Rechenvolumen auf den ESP32 zu minimieren, gleichzeitig aber die Flexibilität zu erhöhen. Das soll durch folgende Schritte erreicht werden:
* Benutzung von Javascript: Möglichst viel auf dem Client rechnen.
* Keine String-Verkettungen mehr: Es sollten wenn möglich komplette Dateien an den Client gesendet werden.
* Benutzung eines FTP-Servers: Über einen FTP-Server soll man einfach bestehende Configs und Webseiten ändern können.

Konkret bedeutet das u.a.:
* Die Liste von Cocktails wird als Datei im JSON-Format an den Client gesendet. Der ESP32 liest diese Liste gar nicht ein, das darf alles der Client machen. Der Client sendet dann nachfolgend nur das entsprechend gewünschte Getränk zurück.

Die Anforderung der Cocktail-Seite läuft nachfolgend so ab:
1. Client verbindet sich mit WLAN
2. Client sendet GET-Anfrage an ESP32 auf die entsprechende Webseite.
3. ESP32 sendet die index.html oder cocktaillist.html zurück.
4. Client zieht sich wenn benötigt die entsprechende .css-Datei vom ESP32.
5. Client fordert die entsprechende Javascript-Datei an.
6. ESP32 schickt Javascript-Datei.
7. Javascript fordert entsprechend die Liste von Cocktails im JSON-Format an.
8. Client stellt die Cocktails dar.

Ein Bestellvorgang läuft nachfolgend wie folgt ab:
1. Client sendet ein Cocktail im JSON-Format.
2. Der ESP32 deserialisiert den String zu einem Objekt des Typs cCocktail.
3. Der ESP32 fügt das Objekt cCocktail der Warteliste für die Cocktails hinzu.
4. Der ESP32 antwortet dem Client den Status, dass der Cocktail zubereitet wird.
(5. Der ESP32 antwortet dem Client, wenn der Cocktail fertig zubereitet ist.)

Der aktuelle Stand der Webseite findet sich hier.

  Mit Unterstützung von Prof. J. Waltertd> Wintersemester 2018/2019