Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Python FASTAPI
☚ zurück - Einstiegskurs Raspberry Pi
In diesem Projekt wird auf dem Raspberry Pi eine Weboberfläche mit FastAPI erstellt, über die eine LED-Ampel geschaltet und die Temperatur eines DS18B20 angezeigt werden kann. Die Anwendung ist im lokalen Netzwerk erreichbar, sodass LEDs und Temperatursensor bequem über einen Webbrowser im LAN gesteuert und überwacht werden können.
Überblick
- Voraussetzungen
- Software
- Konfiguration
Details
Voraussetzungen
ENV
course_env
Alle weiteren Schritte erfolgen mit der aktivierten Python-Umgebung.
source ~/devel/projects/course_env/bin/activate
Anschließend werden FastAPI und Uvicorn installiert:
pip install fastapi uvicorn
- FastAPI
- stellt das Web-Framework bereit, mit dem die Webseiten und Routen programmiert werden.
- Uvicorn
- startet die Anwendung und sorgt dafür, dass sie im Browser erreichbar ist.
Projektstruktur
cd ~/devel/projects/
course_web/
|── data/
| └── temperature.txt
└── src/
├── app.py
├── core/
│ ├── __init__.py
│ └── hardware.py
└── html/
├── led.html
├── history.html
└── temp.html
Temperaturverlauf: Daten anlegen
Die Messwerte des Temperaturverlaufs werden in der Datei temperature.txt gespeichert.
Die Datei wird automatisch angelegt, sobald die Aufzeichnung gestartet wird.
temperature.txt
Jede Zeile enthält Zeitstempel und Temperatur, getrennt durch ein Semikolon:
YYYY-MM-DD HH:MM:SS;TEMPERATUR
Beispiel:
2026-02-21 12:00:00;21.437
Apache2 Startseite
Im Verzeichnis des Apache2-Webservers (/var/www/html) wird eine index.html bereitgestellt.
Beim Aufruf der IP-Adresse des Raspberry Pi im Browser wird diese Startseite geladen, über die anschließend das gewünschte Projekt ausgewählt werden kann.
Bevor die neue index.html im Verzeichnis /var/www/html erstellt wird, sollte die vorhandene Apache-Standardseite gesichert werden:
sudo mv /var/www/html/index.html /var/www/html/index_course_backup.html
- /var/www/html/index.html
<!DOCTYPE html> <html> <head> <title>Projekt Auswahl</title> </head> <body> <h1>Projekt Auswahl</h1> <ul> <li><a href="/wiki">DokuWiki</a></li> <li><a href="/led">LED Ampel</a></li> <li><a href="/temp">Temperatur</a></li> <li><a href="/history">Temperaturverlauf</a></li> </ul> </body> </html>
Hardware
Die Hardware, also die LED-Ampel und der Temperatursensor, wurden in den vorausgegangenen Projekten ausführlich behandelt und werden exakt so verwendet wie dort beschrieben.
Software
Im folgenden Abschnitt werden die für die Webanwendung benötigten Python- und HTML-Dateien vorgestellt. Dazu gehören die Hardware-Anbindung über GPIO und den Temperatursensor, die HTML-Seiten zur Darstellung im Browser sowie die FastAPI-Anwendung, welche die einzelnen Routen bereitstellt.
Der Temperaturverlauf erweitert das bestehende Projekt um eine einfache Protokollierung der Messwerte.
- Die Aufzeichnung kann über den Browser gestartet und gestoppt werden.
- Die Messwerte werden in
temperature.txtgespeichert. - Die Anzeige im Browser liest diese Datei und stellt den Verlauf grafisch dar.
- Die Aufzeichnung läuft im Hintergrund, solange der Service aktiv ist – unabhängig davon, ob ein Browser geöffnet ist.
API
Die Datei hardware.py enthält die Funktionen zur GPIO-Ansteuerung und zum Auslesen des DS18B20.
Für den Temperaturverlauf wird diese API um einfache Methoden zur Speicherung, zum Laden und zum Zurücksetzen der Messdaten erweitert.
- /home/pi/devel/projects/course_web/src/core/hardware.py
# bestehender Code unverändert
HTML
LED
- /home/pi/devel/projects/course_web/src/html/led.html
<!-- unverändert -->
Temperature
- /home/pi/devel/projects/course_web/src/html/temp.html
<!-- unverändert -->
History
Die Seite history.html dient zur Steuerung und Anzeige des Temperaturverlaufs.
- Start – beginnt die Aufzeichnung
- Stop – beendet die Aufzeichnung
- Reset – löscht die gespeicherten Messwerte
- Intervall – legt fest, in welchem Abstand neue Werte gespeichert werden
- Diagramm – zeigt den gespeicherten Verlauf grafisch
- /home/pi/devel/projects/course_web/src/html/history.html
<!-- Inhalt siehe Projektdatei -->
FASTAPI APP
Die Datei app.py verbindet die HTML-Seiten mit den Funktionen aus hardware.py.
Zusätzlich wird beim Start der Anwendung der Hintergrund-Mechanismus zur Temperaturaufzeichnung aktiviert.
- /home/pi/devel/projects/course_web/src/app.py
# bestehender Code + History-Routen
Konfiguration
In diesem Abschnitt wird die Einbindung der FastAPI-Anwendung in den Apache-Webserver sowie die Einrichtung als systemd-Service beschrieben.
Apache Proxy
In der Datei /etc/apache2/sites-available/000-default.conf innerhalb von <VirtualHost *:80> ergänzen:
ProxyPreserveHost On ProxyPass /led http://127.0.0.1:8000/led ProxyPassReverse /led http://127.0.0.1:8000/led ProxyPass /temp http://127.0.0.1:8000/temp ProxyPassReverse /temp http://127.0.0.1:8000/temp ProxyPass /history/ http://127.0.0.1:8000/history/ ProxyPassReverse /history/ http://127.0.0.1:8000/history/ ProxyPass /history http://127.0.0.1:8000/history ProxyPassReverse /history http://127.0.0.1:8000/history
Aktivieren
sudo a2enmod proxy sudo a2enmod proxy_http sudo systemctl restart apache2
Systemd
Die Service-Datei wird unter /etc/systemd/system/course_web.service erstellt und anschließend registriert.
sudo systemctl daemon-reload sudo systemctl enable course_web sudo systemctl start course_web sudo systemctl status course_web
Test Temperaturverlauf
tail -n 20 /home/pi/devel/projects/course_web/data/temperature.txt
