Programmierung meiner aktuellen Wetterstation


Gepostet September 2016, Kategorie: Raspberry Pi


Programmierung meiner aktuellen Wetterstation

In diesen Post geht es allein um die Programmierung meiner Wetterstation.


Inhaltsverzeichnis


    

    dewpoint.py *

    • Funktion dewPoint(humidity, celsius) berechnet den Taupunkt bei gegebener Feuchte und Temperatur.

    ftpsync.py *

    • Enthält die Klasse FTPSync
    • Konstruktor braucht folgende Daten: FTP-Server-Adresse, Benutzernamen, Passwort, Ordnerpfad auf dem FTP-Server, Ordnerpfad lokal, Dateiendung
    • FTPSync.sync(timestr) zum Synchroniesieren aller Dateien des aktuellen Jahres. timestr ist die Zeichenkette für den Zeitstempel beim Logging, also nicht relevant.
    • Beim Synchroniesieren wird von allen Dateien des aktuellen Jahres die Dateigrößen verglichen und wenn es zu einer Abweichung kommt, die neue Datei hochgeladen.

    hp03s.py *

    • Diese Klasse entstammt aus folgenden Foreneintrag: http://www.forum-raspberrypi.de/Thread-wetterstation
    • HP03s.getTemperature() gibt die aktuelle Temperatur am Sensor zurück. Da sich mit den neuen Aufbau der Sensor am Raspberry Pi befindet, ist es da sehr warm.
    • HP03s.getPressure() gibt den aktuellen Luftdruck an. Dieser muss nun in einen Luftdruck auf Meereshöhe umgerechnet werden.

    LCD.py *

    • Enthält die Klasse LCD. Konstruktor benötigt die GPIO-Pins von RS, EN, DATA4-7.
    • LCD.display_init() initalisert den LCD.
    • LCD.goto_line(line) setzt den Cursor an den Anfang der angebenen Zeile.
    • LCD.lcd_string(message) schreibt den angebenen Text auf das Display.

    ringstorage.py *

    • Enthält die Klasse RingStorage. Der Konstruktor benötigt die Größe des Ringspeichers.
    • RingStorage.addContent(data) speichert die angebenen Daten im Ringspeicher.
    • RingStorage.getMedium() gibt das aktuelle arithmetische Mittel des Ringspeichers zurück.

    weather.py - Das Hauptprogramm *

    Konstanten

    • FTPSRV, USER, PWD: Daten für die FTP-Verbindung
    • FTPDIR1, LOCALDIR1: Pfade für das 1. Paar von Ordnern, welche Synchorniersiert werden sollen. Enthalten die .csv-Wetterdaten.
    • FTPDIR2, LOCALDIR2: 1. Paar, enthalten die Graphen.
    • FDLY: Alle wie viele Sekunden synchronisieren?
    • PXCLR: GPIO-Pin des XCLR Anschluss des Luftdrucksensors
    • PBUS: Busnummer des Luftdrucksensors
    • TDLY: Alle wie viele Sekunden soll der Luftdruck aufgenommen werden?
    • WOLDLY: WakeOnLan: Alle wie viele Sekunden soll die Datei überprüft werden, welche WOL aktiviert.
    • WOLFILE: Pfad zur Datei, welche beschrieben wird, wenn WOL gestartet werden soll.
    • WOLMAC: MAC-Adresse des zu startenden Gerätes
    • BTDLY: Alle wie viele Sekunden soll die Bluetooth-Daten angefragt werden?
    • BTPATH: Adresse der Bluetooth-Schnittstelle, siehe Installation.
    • SAVEDLY: Alle wie viele Sekunden sollen Daten abgespeichert werden?
    • SAVEDIR: Pfad, wo alle .csv-Wetterdaten gespeichert werden
    • STATUSFILE: Pfad zur Status-Datei. Diese wird von der Homepage ausgelesen, um aktuelle Daten der Wetterstation auf der Homepage anzuzeigen.
    • MAKEFILE: Python-Skript zum Erstellen des Graphen.
    • LGHTDLY: Alle wie viele Sekunden soll überprüft werden, ob die Hintergrundbeleuchtung gedimmt werden muss?
    • LGHTPIN: Pin, an dem die Hintergrundbeleuchtung des LCD angeschlossen ist.
    • BRIGHT: PWM-Wert der Beleuchtung am Tag
    • DARK: PWM-Wert der Beleuchtung in der Nacht
    • EVENING: Zeitpunkt, ab welchen gedimmt werden soll. (21.5 bedeutet 21:30)
    • MORNING: Zeitpunkt, ab welchen nicht mehr gedimmt werden soll. (7.5 bedeutet 7:30)

    Globale Funktionen

    • getLine1() gibt die oberer Zeile des LCD zurück, diese wird für das LCD am Raspberry Pi und das LCD der Außenstation verwendet.
    • getLine2() gibt die untere Zeile des LCD zurück.
    • timestr() gibt eine Zeitstempel der aktuellen Zeit zurück. Dieser Stempel wird fürs Logging verwendet.

    Klasse TempFTP

    Thread, der sich um die Synchronisation der der beiden Ordner-Paare kümmert.

    Klasse WeatherMgr

    Thread, der sich um die Luftdruckmessung und die LCD-Anzeige am Raspberry Pi kümmert. Der Luftdruck wird durch den Faktor 1.0124 korrigiert, damit er dem Luftdruck auf Meereshöhe entspricht.

    Klasse WOLMgr

    Thread, welcher immer die WOLFILE ließt und wartet bis diese den Inhalt "yes" hat. Dann wird der PC mit der WOLMAC gestartet.

    Klasse BTMgr

    Thread, der die LCD-Daten und die Hintergrundbeleuchtung an die Außenstation sendet und die Temperatur, Feuchte und Licht empfängt. Der Ringspeicher connect wird mit 1 oder 0 befüllt, jenachdem, ob die Kommunikation erfolgreich war, oder nicht. Dadurch enspricht der Mittelwert von connect der Verbindungsqualität.

    Klasse SaveMgr

    Thread, der sich um das Speichern der Wetterdaten in einer csv-Datei kümmert. Außerdem wird die Status-Datei beschrieben und der aktuelle Graph erstellt.

    Klasse LightMgr

    Thread, der sich um das Dimmen der Hintergrundbeleuchtung kümmert. Die Funktion LightMgr.isDay() gibt an, ob es Tag ist, oder nicht.

    Klasse NewDayMgr

    Thread, der alle 10 min überprüft, ob es in der Zwischenzeit ein neuer Tag geworden ist. War dies der Fall, so wird der Graph des alten Tages nocheinmal aktualisiert und die Tagesmittelwerte in der means.csv gespeichert.

    Wetterdaten Eilenburg
    Temperatur: 23.6 °C
    Luftdruck: 1011.1 hPa
    Luftfeuchte: 38 %
    [mehr]