Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekt:python_fastapi1

Dies ist eine alte Version des Dokuments!


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

Aktivierung der Python-Environment: 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 / 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.

Format der Datei 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.

Tip

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.

Temperaturverlauf (History)

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.txt gespeichert.
  • 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

Temperature

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
projekt/python_fastapi1.1771674886.txt.gz · Zuletzt geändert: von torsten.roehl