# Dokumentation Calliope Projekt - Empfängercode ## Variablen ~~~ data_store = [] data_buffer = [] times = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] logpath = "log{}.txt".format(time.time()) logs = True ~~~ - data_store als Speichervariable für alle während der Programmlaufzeit gelesenen Werte - data_buffer als Puffer für die letzten 20 Werte - times als feste Array von Werten für die Zeitachse des Diagramms - logpath als Pfad für die Logdatei - Dateiname wird aus "log", dem aktuellen UNIX-Zeitstempel und dem Suffix ".txt" erzeugt ## "Empfang" von Testdaten ~~~ try: for data in send_test_data.data_test_forever(): currentdata = json.loads(data) data_store.append(currentdata["V"]) data_buffer = data_store[-20:] ~~~ - Gesamte Programmlogik wird in einem try-Statement ausgeführt, um manuelles beenden durch den Nutzer ohne Fehlermeldung abfangen zu können. - Erstellt eine Schleife, die über alle Ausgaben von send_test_data.data_test_forever() iteriert. - Hier de facto eine Endlosschleife, da die Funktion für immer Daten ausgibt. - Wandelt die JSON-Daten in ein Dictionary um. - Die Daten mit dem Wert "V" in dem Dictioniary werden gespeichert. - Nur die letzten 20 Werte bleiben gespeichert. ## Diagramm ~~~ fig, ax = plt.subplots() ~~~ - Erstellt ein Diagramm. ### Warnung bei erhöhten Werten ~~~ if currentdata["V"] > 160: ax.set_facecolor('red') ax.plot(times[:len(data_buffer)], data_buffer, 'k') warn = True ~~~ - Prüft, ob der Wert "V" über 160 ist. - Wenn dies der Fall ist, wird der Hintergrund des Fensters rot. - Plottet die letzten 20 Werte in Schwarz als Graphen. - Warnstatus auf "True" setzen. ### Normales Verhalten (keine Warnung) ~~~ else: ax.plot(times[:len(data_buffer)], data_buffer) warn = False ~~~ - Ist der Wert "V" nicht über 160, werden die letzten 20 Werte normal als Graph geplottet. - Warnstatus auf "False" setzen. ### Beschriften des Diagrammes ~~~ ax.set_xlabel('Time [100 ms]') ax.set_ylabel('Temperature') ax.set_title('Temperature over time') plt.xticks(np.arange(1, 21, 1)) plt.yticks(np.arange(0, 257, 32)) plt.show() plt.close() ~~~ - Beschriftung der X-Achse - Beschriftung der Y-Achse - Beschriftung des Diagramms (Titel) - Erstellung von Teilstrichen von 1 bis 20 in 1ner-Schritten auf der X-Achse. - Erstellung von Teilstrichen von 0 bis 256 in 32er-Schritten auf der Y-Achse. - Anzeigen des Diagramms - Schließen des Diagramms ## Logging ~~~ if logs: logwriter(currentdata["V"], logpath, warn) ~~~ - Loggt nur, wenn es aktiviert ist. - Schreiben des aktuellen Wertes mit Zeit und Warnstatus in die Logdatei.