07 Hackathon - Seyit24/Course-Evaluation-System GitHub Wiki
Zur Entwicklung sowie der Präsentation der Ergebnisse im Living Lab des Hermann Hollerith-Zentrums gab es einen zweitägigen Hackathon. Das Living Lab ist ein Vorlesungsraum am Hermann-Hollerith-Zentrum, der für Testzwecke von IoT-Projekten verwendet wird. Dort finden auch konventionelle Vorlesungen statt. Ein Hackathon steht für die Zusammenarbeit eines Teams über einen kurzen Zeitraum, um eine Idee zu bewerten, implementieren und den Fortschritt aufzuzeigen.

Das Ziel war daher nach Abschluss dieser zwei Tage das MVP präsentieren zu können. So waren anderen Teilnehmer und Interessenten in der Lage einen Einblick in die Idee, die Umsetzung und das Ergebnis des Projektes erhalten.
Vorbereitung:
Als Vorbereitung auf das Projekt wurde bereits recherchiert, welche Möglichkeiten bestehen um Amazons Dash Buttons umzufunktionieren. Sie wurden bisher insbesondere von Menschen genutzt, um das eigene Smart Home zu steuern. Dabei dienen sie unter anderem als günstige Lichtschalter. Des Weiteren gab es vereinzelt Personen die diese Hardware als Counter für bestimmte Dinge genutzt haben. Insbesondere die Vorgehen in Verbindung mit der Plattform IFTTT stellten sich dabei als besonders nützlich heraus. Für alle Lösungen die bei der Recherche gefunden wurden haben die Entwickler einen Raspberry Pi genutzt, weshalb auch wir uns für dieses Vorgehen entschieden haben.
Anschließend wurden die Aufgaben innerhalb des Teams verteilt, um eine Arbeitsgrundlage bis zum Start des Hackathons zu haben. Ein Teil befasste sich mit einer möglichen Umsetzung des Videos und der andere Teil mit konkreten Anwendungsfällen und deren Umsetzung.
Durchführung:
1. Dash Button registrieren
Um die Dash-Buttons einzurichten wurde vorerst ein aktives Amazon Prime Konto benötigt. Um diese Voraussetzung zu erfüllen wurde ein privater Account eines Gruppenteilnehmers genutzt. Außerdem ist die zugehörige Amazon Shopping-App auf dem Smartphone notwendig. In dieser App gibt es den Tab Meine Dash Buttons. Hier können Kunden virtuelle Dash-Buttons anlegen. Um physische Dash-Buttons einzurichten muss man oben auf Menü klicken und anschließend Dash-Button Geräte verwalten wählen. Hier kann der Kunde Einen neuen Dash Button einrichten wählen. Anschließend führt die App den Kunden durch den gesamten Einrichtungsprozess. Vorerst wird man darauf hingewiesen, dass man das WLAN-Passwort bereithalten sollte. Wir haben diesbezüglich das WLAN eines Routers genutzt, der extra für dieses Projekt in Betrieb genommen wurde. Innerhalb des Hochschulnetzwerkes könnte es eventuell zu Portproblemen und Zugriffsverweigerungen kommen. Anschließend muss man den Knopf des Dash Buttons solange drücken, bis die LED langsam Blau blinkt. Anschließend sollte Bluetooth an dem eigenen Handy angeschaltet werden und in der App Verbinden gewählt werden. Daraufhin wird eine Verbindung zwischen dem Dash Button und dem Smartphone hergestellt. Danach muss das passende WLAN gewählt werden sowie das zugehörige Passwort eingegeben werden. Im letzten Schritt fordert Amazon den Kunden dazu auf ein Produkt zu wählen, das beim jeweiligen Tastendruck bestellt werden soll. Hier sollte man auf keinen Fall ein Produkt wählen, um zu verhindern dass aus Versehen ein Produkt bestellt wird bei der Evaluation der Lehrveranstaltung. Diesen Schritt kann man umgehen indem man in der Kopfleiste auf das X drückt um den Vorgang abzubrechen. Nun ist der Dash Button zwar eingerichtet und verbindet sich mit dem WLAN, allerdings werden keine automatischen Bestellungen durchgeführt.

2. Programm auf Raspberry Pi einrichten
Nachdem die Dash Buttons eingerichtet wurden, konnte der Raspberry Pi darauf ausgerichtet werden die Anmeldung dieser Buttons im WLAN zu erkennen und dafür definierte Aktionen in Verbindung mit IFTTT durchzuführen. Dafür wurde vorerst die Speicherkarte des Raspberry Pies mit Hilfe eines Laptops oder Rechners ausgelesen. Anschließend kann man online ein Image von Raspbian herunterladen. Dabei handelt es sich um ein Betriebssystem für den Raspberry Pi. Um dieses Image auf der Speicherkarte zu installieren gibt es verschiedene Tools. Innerhalb des Projekts wurde dies mit Hilfe von Balena Etcher durchgeführt. Nach dem Abschluss dieses Vorgangs haben wir den Raspberry Pi an einen Bildschirm angeschlossen und mit der Stromzufuhr verbunden. Vor dem Start muss die Tastatur und eine Maus an das Gerät angeschlossen werden. Beim ersten Start sollte im Idealfall kein Passwort angegeben werden. Anschließend kann die Kommandozeile geöffnet werden.
Innerhalb dieser Kommandozeile können die notwendigen Programme installiert werden. Es gibt mehrere Online-Projekte, die Dash Buttons bereits für verschiedene Nutzungsszenarien eingebunden haben. In der Regel funktioniert dies immer auf demselben Wege, indem der Raspberry Pi das WLAN-Netzwerk durchschnüffelt und sobald die definierte IP-Adresse eines Dash-Buttons erscheint eine bestimmte Funktion ausführt. Mit Hilfe der nachfolgenden Befehle wurde ein existierendes Github-Projekt auf dem Raspberry Pi importiert.

Nach der Durchführung dieser Befehle konnte das Programm find_button im Ordner dasher durchgeführt werden durch folgenden Befehl:
script/find_button
Dieses Programm zeigt alle MAC-Adressen aller mit dem WLAN verbundener Geräte an. Sobald man einen der Dash Buttons drückt erscheint somit auch dessen MAC-Adresse und man kann sich diese für den jeweiligen Button notieren. Im nächsten Schritt musste ein Profil auf IFTTT angelegt werden. Hierzu wurde im ersten Schritt ein Google-Konto für das HHZ angelegt mit dem Namen [email protected] und dem Passwort amazondash. Danach kann man sich bei IFTTT mit Hilfe des Google Kontos anmelden. Auf dieser Plattform ist es möglich eigene If this then that-Regeln anlegen. Darauf wird zu einem späteren Zeitpunkt noch einmal eingegangen. Allerdings wurde für den folgenden Schritt noch der IFTTT-Maker Key benötigt. Diesen findet man unter My Applets → Services → Suchbegriff Webhooks eingeben → Webhooks auswählen → Settings. Als URL wird hier folgendes Format angezeigt, bei dem der Maker Key nach dem letzten Slash angezeigt wird:
https://maker.ifttt.com/use/MakerKey
Nachdem alle MAC-Adressen aller Dash Buttons bekannt waren und die restlichen Vorbereitungen getroffen wurden konnte die Config-Datei des Projekts angepasst werden. Diese befindet sich ebenfalls in dem Ordner dasher und wird mit folgendem Befehl geöffnet:
sudo nano config/config.json
Nach Aufruf dieser Datei liegt bereits ein Code mit Beispielen vor. Diesen muss man entsprechend ändern, um dem Raspberry Pi zu zeigen auf welche MAC-Adresse er mit welchem Event reagieren soll. Die Anpassung erfolgte wie im folgenden Beispiel erklärt:

So kann ein beliebiger Name für jeden Button festgelegt werden sowie die zugehörige MAC-Adresse. Innerhalb des Projekts wurde immer der Markenname des Dash Buttons sowohl als Name, als auch als Eventname festgelegt. So heißt das Event eines Schwarzkopf-Dash Buttons schwarzkopf_button. Zuletzt musste noch der IFTTT-Maker Key in der URL hinterlegt werden. Nach diesem Schritt waren alle notwendigen Programme auf dem Raspberry Pi angepasst.
3. Aktionen in IFTTT erstellen
Um die richtigen Aktionen durch die definierten Post-Request in der Config-Datei des Raspberry Pis auszuführen, muss man ein Applet für jeden Button anlegen. Dafür geht man folgendermaßen vor:
- Man meldet sich mit dem zuvor genannten HHZ-Gmail Konto auf IFTTT an
- My Applets
- New Applet
- +this wählen
- Webhooks-Service wählen
- Receive a web request wählen
- Als Eventname denselben Namen verwenden, der in der URL innerhalb der config-Datei auf dem Raspberry Pi verwendet wurde
- +that wählen
- Google Sheets wählen
- Add row to spreadsheet wählen
- Spreadsheet Name definieren: Dieser sollte für jedes der folgenden Applets jeweils derselbe sein. Innerhalb des Projekts wurde das Spreadsheet Course Evaluation System definiert.
- Formatted Row definieren: Die Werte OccuredAt und EventName wurden verwendet, um eine Nachvollziehbarkeit der Ergebnisse für die Entwickler zu gewährleisten. Im produktiven Umfeld können diese Eigenschaften auch entfernt werden. Des Weiteren müssen Buttons die für Gut stimmen sollen eine 1 sowie das Wort Gut in jeweils eine eigene Zeile schreiben. Dies sieht wie folgt aus: {{OccurredAt}} ||| {{EventName}} ||| 1 ||| Gut. Bei Buttons die jeweils für Schlecht stimmen sollen wurde eine 0 sowie das Wort Schlecht hinzugefügt.
- Drive folder path definieren: Dazu wird bei jedem Applet der Pfad auf IFTTT/MakerWebooks angepasst. Falls sich in diesem Ordner noch kein Spreadsheet mit dem bei Punkt 11 definierten Namen befindet, wird ein neues Spreadsheet bei der ersten Bewertung erzeugt.
- Create Action wählen
- Finish wählen
Nachdem diese Schritte für jeden Button durchgeführt wurden sieht die Applet-Übersicht folgendermaßen aus:

Für jeden Aufruf eines Applets wird nun eine neue Zeile in das aktuelle Spreadsheet geschrieben. Je nach Button steht jeweils eine 1 oder eine 0, sowie ein Gut oder Schlecht in der Zeile. Nach den erfolgreichen Tests konnte mit der Konfiguration des Spreadsheets begonnen werden.
4. Google Spreadsheet konfigurieren
Wie schon zuvor erwähnt, wurde bereits ein Spreadsheet durch die Tests angelegt. Somit fehlte nur noch eine Übersicht, mit Hilfe derer der Professor jeweils auf den ersten Blick erkennen kann wie gut seine Vorlesung bewertet wurde. Dies wurde innerhalb der ersten zwei Zeilen umgesetzt. In einer Zelle werden die positiven Bewertungen gezählt, in der zweiten die negativen Bewertungen und in der dritten Zelle die gesamte Anzahl der Bewertungen. Daraus wiederum wird in Zelle vier der prozentuale Anteil der positiven Bewertungen berechnet. Die Formeln für die Berechnungen sind in Google Docs ähnlich denen von Microsoft Excel.
Da die neuen Werte der Dash Buttons jeweils in die erste noch nicht beschriebene Zeile geschrieben werden, kommt es hier zu keinerlei Problemen.
5. Makro für die langfristige Speicherung der Spreadsheet-Daten
Nachdem die Umsetzung der Darstellung des Bewertungsergebnisses überprüft wurde, musste noch ein Weg gefunden werden um die Ergebnisse langfristig verfügbar zu machen. Dies wurde mit Hilfe eines Skripts umgesetzt, das im Hintergrund des Google Spreadsheets läuft. Dazu musste im Vorfeld noch ein neues Tabellenblatt mit dem Namen Log angelegt werden, in dem die Bewertungen in Zukunft archiviert werden. Somit sind die zwei Tabellenblätter Eingaben und Log vorhanden um folgendes Skript auszuführen, welches über Tools → Skripteditor im Google Spreadsheet erreicht werden kann:

Wie man sehen kann, werden im ersten Schritt die Daten des Eingaben-Tabellenblatts in das Log-Tabellenblatt kopiert. So können Professoren auch in Zukunft die vergangenen Ergebnisse anschauen. Im zweiten Schritt werden alle Daten, außer die zwei Kopfzeilen, aus dem aktuellen Tabellenblatt gelöscht. Dieser Vorgang wird jede Nacht zwischen 0:00 Uhr und 1:00 Uhr durchgeführt. Um dies zu erreichen, musste ein Trigger definiert werden. Dies wurde unter Bearbeiten → Trigger des aktuellen Projekts → Trigger hinzufügen getan. Hier werden alle im Skript vorhandenen Funktionen aufgeführt und der Benutzer kann festlegen zu welcher Zeit die jeweilige Funktion durchgeführt werden soll. Der Trigger wurde folgendermaßen definiert:

Um das Skript sofort zu testen kann man es auch über den Play Button im Skripteditor starten. Falls es bei den nächtlichen Übertragungsjobs zu Fehlern kommen sollte bekommt der Nutzer eine E-Mail.