CalliopeProjectDocs/docs/receiver.md

2.8 KiB

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" setzten.

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.