Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekt:python_fastapi1

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
projekt:python_fastapi1 [2026/02/21 11:54] torsten.roehlprojekt:python_fastapi1 [2026/02/21 13:22] (aktuell) – gelöscht torsten.roehl
Zeile 1: Zeile 1:
-====== Python FASTAPI ====== 
  
-[[raspberry_pi:einstiegskurs_raspberry_pi|☚ 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 ==== 
- 
-<note important> 
-**Aktivierung der Python-Environment: ''course_env''** 
- 
-Alle weiteren Schritte erfolgen mit der aktivierten Python-Umgebung. 
- 
-<code> 
-source ~/devel/projects/course_env/bin/activate 
-</code> 
- 
-</note> 
- 
-Anschließend werden FastAPI und Uvicorn installiert: 
- 
-<code bash> 
-pip install fastapi uvicorn 
-</code> 
- 
-<note> 
-**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. 
-</note> 
- 
-==== Projektstruktur ==== 
- 
-''cd ~/devel/projects/'' 
- 
-<code> 
-course_web/ 
-|── data/ 
-|   └── temperature.txt 
-└── src/ 
-    ├── app.py 
-    ├── core/ 
-    │   ├── __init__.py 
-    │   └── hardware.py 
-    └── html/ 
-        ├── led.html 
-        ├── history.html 
-        └── temp.html 
-</code> 
- 
-==== Temperaturverlauf: Daten anlegen ==== 
- 
-Die Messwerte des Temperaturverlaufs werden in der Datei ''temperature.txt'' gespeichert.   
-Die Datei wird automatisch angelegt, sobald die Aufzeichnung gestartet wird. 
- 
-<note> 
-**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'' 
-</note> 
- 
-==== 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. 
- 
-<note tip> 
-**Tip** 
- 
-Bevor die neue ''index.html'' im Verzeichnis ''/var/www/html'' erstellt wird, sollte die vorhandene Apache-Standardseite gesichert werden: 
- 
-<code bash> 
-sudo mv /var/www/html/index.html /var/www/html/index_course_backup.html 
-</code> 
-</note> 
- 
-<code 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> 
-</code> 
- 
-==== 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. 
- 
-<note> 
-**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. 
-</note> 
- 
-==== 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. 
- 
-<code python /home/pi/devel/projects/course_web/src/core/hardware.py> 
-# bestehender Code unverändert 
-</code> 
- 
-==== HTML ==== 
- 
-=== LED === 
- 
-<code html /home/pi/devel/projects/course_web/src/html/led.html> 
-<!-- unverändert --> 
-</code> 
- 
-=== Temperature === 
- 
-<code html /home/pi/devel/projects/course_web/src/html/temp.html> 
-<!-- unverändert --> 
-</code> 
- 
-=== 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 
- 
-<code html /home/pi/devel/projects/course_web/src/html/history.html> 
-<!-- Inhalt siehe Projektdatei --> 
-</code> 
- 
-==== 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. 
- 
-<code python /home/pi/devel/projects/course_web/src/app.py> 
-# bestehender Code + History-Routen 
-</code> 
- 
-===== 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: 
- 
-<code bash> 
-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 
-</code> 
- 
-=== Aktivieren === 
- 
-<code bash> 
-sudo a2enmod proxy 
-sudo a2enmod proxy_http 
-sudo systemctl restart apache2 
-</code> 
- 
-==== Systemd ==== 
- 
-Die Service-Datei wird unter ''/etc/systemd/system/course_web.service'' erstellt und anschließend registriert. 
- 
-<code bash> 
-sudo systemctl daemon-reload 
-sudo systemctl enable course_web 
-sudo systemctl start course_web 
-sudo systemctl status course_web 
-</code> 
- 
-==== Test Temperaturverlauf ==== 
- 
-<code bash> 
-tail -n 20 /home/pi/devel/projects/course_web/data/temperature.txt 
-</code> 
projekt/python_fastapi1.1771674886.txt.gz · Zuletzt geändert: von torsten.roehl