Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekt:python_fastapi

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_fastapi [2026/02/21 08:11] – [ENV] torsten.roehlprojekt:python_fastapi [2026/02/23 07:26] (aktuell) – [Systemd] torsten.roehl
Zeile 5: Zeile 5:
  
 //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.// //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.//
 +
 +|{{ :raspberry_pi:web_1.png?300 |}}|
 +|Die LED-Ampel kann nun über den Webbrowser gesteuert und die Temperatur ausgelesen werden.|
 ====== Überblick ====== ====== Überblick ======
   * Voraussetzungen   * Voraussetzungen
Zeile 32: Zeile 35:
 </code> </code>
 <note> <note>
-**FastAPI**  +**FastAPI / Uvicorn**
-stellt das Web-Framework bereit, mit dem die Webseiten und Routen programmiert werden.  +
  
-**Uvicorn** +  * **FastAPI** 
-startet die Anwendung und sorgt dafür, dass sie im Browser erreichbar ist.+    * 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> </note>
 +
 ==== Projektstruktur ==== ==== Projektstruktur ====
  
Zeile 46: Zeile 51:
     ├── app.py     ├── app.py
     ├── core/     ├── core/
 +    │   |── __init__.py    # kann leer sein!    
     │   └── hardware.py     │   └── hardware.py
     └── html/     └── html/
Zeile 53: Zeile 59:
 </code> </code>
 ==== Apache2 Startseite ==== ==== 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 ''index.html'' 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> <code html /var/www/html/index.html>
Zeile 78: Zeile 93:
  
 ===== Software ===== ===== 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 Routen bereitstellt und die einzelnen Komponenten miteinander verbindet.
 ==== API ==== ==== API ====
  
Zeile 188: Zeile 203:
 <h1>LED Ampel</h1> <h1>LED Ampel</h1>
  
-<h2>Rot (Status: {{R}})</h2>+<h2>Rot</h2> 
 +<p>Status: {{R}}</p>
 <a href="/led/r/1">ON</a> <a href="/led/r/1">ON</a>
 <a href="/led/r/0">OFF</a> <a href="/led/r/0">OFF</a>
  
-<h2>Gelb (Status: {{Y}})</h2>+<h2>Gelb</h2> 
 +<p>Status: {{Y}}</p>
 <a href="/led/y/1">ON</a> <a href="/led/y/1">ON</a>
 <a href="/led/y/0">OFF</a> <a href="/led/y/0">OFF</a>
  
-<h2>Grün (Status: {{G}})</h2>+<h2>Grün</h2> 
 +<p>Status: {{G}}</p>
 <a href="/led/g/1">ON</a> <a href="/led/g/1">ON</a>
 <a href="/led/g/0">OFF</a> <a href="/led/g/0">OFF</a>
Zeile 260: Zeile 278:
  
     return html     return html
- 
  
 @app.get("/led", response_class=HTMLResponse) @app.get("/led", response_class=HTMLResponse)
 def led_page(): def led_page():
     r, y, g = hardware.status()     r, y, g = hardware.status()
 +
     return HTMLResponse(     return HTMLResponse(
         load_template("led.html", {         load_template("led.html", {
             "{{R}}": r,             "{{R}}": r,
             "{{Y}}": y,             "{{Y}}": y,
-            "{{G}}": g+            "{{G}}": g
 +            "{{R_ON}}": "on" if r == 1 else "", 
 +            "{{Y_ON}}": "on" if y == 1 else "", 
 +            "{{G_ON}}": "on" if g == 1 else "",
         })         })
     )     )
- 
  
 @app.get("/led/{color}/{value}") @app.get("/led/{color}/{value}")
Zeile 312: Zeile 332:
  
 ===== Konfiguration ===== ===== Konfiguration =====
 +In diesem Abschnitt wird die Einbindung der **FastAPI-Anwendung** in den Apache-Webserver sowie die Einrichtung als ''systemd-Service'' beschrieben, damit die Anwendung automatisch startet und im lokalen Netzwerk erreichbar ist.
 ==== Apache Proxy ==== ==== Apache Proxy ====
  
 === Konfiguration === === Konfiguration ===
  
-In der Datei '' /etc/apache2/sites-available/000-default.conf'', innerhalb von ''<VirtualHost *:80>'' folgendes einfügen:+In der Datei '' /etc/apache2/sites-available/000-default.conf'', 
 +innerhalb von ''<VirtualHost *:80>'' folgendes einfügen: 
 + 
 + 
 +<note tip> **Tip** 
 + 
 +Bevor die Datei ''/etc/apache2/sites-available/000-default.conf'' geändert wird, 
 +sollte die vorhandene Konfiguration gesichert werden. 
 + 
 +<code bash> 
 +cd  /etc/apache2/sites-available/ 
 +sudo  cp 000-default.conf 000-default.conf.course_backup 
 +</code> 
 + 
 +</note> 
  
 <code bash /etc/apache2/sites-available/000-default.conf> <code bash /etc/apache2/sites-available/000-default.conf>
Zeile 330: Zeile 365:
  
 === Aktivieren === === Aktivieren ===
 +Damit die Weiterleitung an die FastAPI-Anwendung funktioniert, müssen die benötigten Apache-Module aktiviert und der Webserver neu gestartet werden.
 +
 <code bash> <code bash>
 sudo a2enmod proxy sudo a2enmod proxy
Zeile 359: Zeile 396:
  
 === Registrierung === === Registrierung ===
 +Damit die neu erstellte Service-Datei von ''systemd'' erkannt wird und die Anwendung automatisch beim Systemstart gestartet wird, muss der Dienst neu geladen, aktiviert und gestartet werden.
 +
 <code bash> <code bash>
 sudo systemctl daemon-reload sudo systemctl daemon-reload
 sudo systemctl enable course_web sudo systemctl enable course_web
-sudo systemctl start course_web+sudo systemctl start course_web       # starten 
 + 
 +</code> 
 + 
 +Nützlich: 
 +<code bash> 
 +sudo systemctl restart course_web     # neu starten 
 +sudo systemctl status course_web      # prüfen!!!
 </code> </code>
projekt/python_fastapi.1771661476.txt.gz · Zuletzt geändert: von torsten.roehl