Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekt:python_ds18b20_logger

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_ds18b20_logger [2026/02/22 09:52] torsten.roehlprojekt:python_ds18b20_logger [2026/02/23 12:23] (aktuell) – [Testen] torsten.roehl
Zeile 1: Zeile 1:
 ====== DS18B20 – Temperaturdaten loggen und visualisieren ====== ====== DS18B20 – Temperaturdaten loggen und visualisieren ======
 +[[python| ☚ zurück]]
  
 +//
 +In diesem Projekt wird ein Temperatur-Logger mit dem digitalen 1-Wire-Sensor DS18B20 am Raspberry Pi realisiert. Ergänzend zur reinen Temperaturauslese werden Messwerte kontinuierlich in einer Textdatei protokolliert und aus diesen Daten automatisch ein Temperaturverlauf als Grafik erzeugt. Der Logger lässt sich über ein Kommandozeilen-Interface steuern und speichert Messdaten sowie das Diagramm lokal oder zur Anzeige im Webserver-Verzeichnis.//
  
 +|{{ :raspberry_pi:temp_logger_0.png?400 |}}|
 +|Der Temperaturverlauf im Browser wird nur angezeigt, wenn zuvor das Programm ''temp_logger.py'' im Terminal gestartet und die Messung mit ''start'' begonnen wurde. In diesem Beispiel wurde die Messung noch nicht gestartet.|
  
 ====== Überblick ====== ====== Überblick ======
Zeile 7: Zeile 12:
       * Hardware               * Hardware        
       * Environment       * Environment
-      * Programmstreukur anlegen     +      * Programmstruktur anlegen     
   * Software       * Software    
       * Quellcode       * Quellcode
 +  * Testen
 +      * Terminal
       * Webseite       * Webseite
  
Zeile 16: Zeile 23:
 ====== Details ====== ====== Details ======
  
-==== Voraussetzungen  ====+===== Voraussetzungen  ====
 +<note> 
 +Das Projekt [[python_projekt_ds18b20_digitaler_temperatursensor|DS18B20 digitaler Temperatursensor]] muss vollständig durchgeführt sowie erfolgreich getestet worden sein, da derselbe Aufbau (Verkabelung und Hardware) weiterverwendet wird. 
 +</note>
  
-Das Projekt [[python_projekt_ds18b20_digitaler_temperatursensor|DS18B20 digitaler Temperatursensor]] muss zuvor vollständig durchgeführt und erfolgreich getestet worden sein. +**Nutzung lokal:**   
-Da hier dieselbe Hardware verwendet wird, sind damit alle Voraussetzungen bereits erfüllt.+Für die reine lokale Verwendung des Loggers sind keine weiteren Projekte erforderlich.
  
 +**Nutzung mit Webausgabe:**  
 +Hierfür muss zuvor das [[dokuwiki|DokuWiki-Projekt]] zur Einrichtung des Webservers abgeschlossen worden sein. Idealerweise wurde auch das [[python_fastapi|FastAPI-Projekt]] bereits durchgeführt.
  
-=== Environment ===+==== Environment ====
  
 <note important> <note important>
Zeile 34: Zeile 46:
 </note> </note>
  
-=== Pakete & Bibliotheken installieren ===+==== Pakete & Bibliotheken installieren ====
  
  
Zeile 44: Zeile 56:
  
  
-=== Programstruktur ===+==== Programmstruktur ====
  
 <code bash> <code bash>
  
-(course_env) pi@raspi88:~/devel/projects/course_temp_curve $ tree+(course_env) pi@raspi88:~/devel/projects/course_temp_logger $ tree
 . .
 ├── data ├── data
Zeile 57: Zeile 69:
     │   ├── hardware.py       # aus dem vorherigen Projekt!      │   ├── hardware.py       # aus dem vorherigen Projekt! 
     │   ├── __init__.py     │   ├── __init__.py
-    │   └── temperature_logger.py  # Program +    │   └── temperature_logger.py  
-    └── temp_curve.py+    └── temp_logger.py        # Hauptprogramm
 </code> </code>
  
 ===== Software ===== ===== Software =====
  
 +Im folgenden Abschnitt wird die vollständige Software zur Datenerfassung, Speicherung und grafischen Darstellung der Temperaturwerte beschrieben.
 ==== Quellcode ==== ==== Quellcode ====
  
 === hardware.py === === hardware.py ===
 +
 +Die Datei ''hardware.py'' (API) bleibt unverändert und wird hier der Vollständigkeit halber erneut vollständig aufgeführt.
 +
 +++++ Quellcode: ''hardware.py'' |
  
 <code python hardware.py> <code python hardware.py>
Zeile 116: Zeile 132:
 </code> </code>
  
-=== temperature_logger ==+++++ 
 + 
 +=== temperature_logger.py ===
  
  
Zeile 124: Zeile 142:
  
  
-<note>Die dafür notwendigen Voraussetzungen wurden bereits in einem vorherigen Projekt (DokuWiki) geschaffen: +<note>**Hinweis** 
-Der Benutzer pi ist Mitglied der Gruppe www-data. Dadurch besitzt er die erforderlichen Schreibrechte, um die Datei in das angegebene Webverzeichnis zu speichern.+ 
 +Die dafür notwendigen Voraussetzungen wurden bereits in einem vorherigen Projekt (DokuWiki) geschaffen: 
 +Der Benutzer pi ist Mitglied der Gruppe **www-data**. Dadurch besitzt er die erforderlichen Schreibrechte, um die Datei in das angegebene Webverzeichnis zu speichern.
 </note> </note>
 +
 +++++ Quellcode: ''temperature_logger.py'' |
 <code python temperature_logger.py> <code python temperature_logger.py>
 import time import time
Zeile 144: Zeile 166:
  
 if MODE == "local": if MODE == "local":
-    DATA_DIR = Path("~/devel/projects/course_temp_curve/data").expanduser()+    DATA_DIR = Path("~/devel/projects/course_temp_logger/data").expanduser()
 elif MODE == "web": elif MODE == "web":
     DATA_DIR = Path("/var/www/html/temp_curve").expanduser()     DATA_DIR = Path("/var/www/html/temp_curve").expanduser()
Zeile 186: Zeile 208:
     plt.ylabel("Temperatur (°C)")     plt.ylabel("Temperatur (°C)")
  
-    if temps: +    if temps:  
-        plt.plot(times, temps) +       plt.plot(temps) 
-        plt.xticks(rotation=45)+ 
 +       step = max(1, len(times) // 10) 
 +       plt.xticks(range(0, len(times), step), 
 +               times[::step], 
 +               rotation=45)   
     else:     else:
         plt.text(         plt.text(
Zeile 254: Zeile 280:
 </code> </code>
  
-<code python temp_curve.py>+++++ 
 + 
 +=== Hauptprogramm === 
 +Das eigenständige Programm ''temp_logger.py'' dient als Kommandozeilen-Interface zur Steuerung des //Temperatur-Loggers//
 + 
 +Es ermöglicht das Starten und Stoppen der Messung, das Setzen des Messintervalls sowie das Zurücksetzen der gespeicherten Daten. 
 + 
 +<note tip>Die eigentliche Messung läuft in einem //Hintergrund-Thread//. Dadurch bleibt die Kommandozeile reaktionsfähig und kann weiterhin Befehle entgegennehmen, während im Hintergrund kontinuierlich Temperaturwerte erfasst, gespeichert und grafisch ausgewertet werden.</note> 
 + 
 + 
 + 
 +<note> 
 +Während der Laufzeit werden die erfassten Messwerte in die Datei ''data/temperature.txt'' geschrieben. Zusätzlich wird nach jeder Messung **automatisch eine Grafik** (''data/temperature.png'') **erzeugt bzw. aktualisiert**, die den Temperaturverlauf darstellt. 
 +</note> 
 + 
 + 
 +++++ Quellcode ''temp_logger.py''
 +<code python temp_logger.py>
 #!/usr/bin/env python3 #!/usr/bin/env python3
 from core import temperature_logger as temp from core import temperature_logger as temp
Zeile 276: Zeile 319:
 status | t                Status anzeigen status | t                Status anzeigen
 help   | h                Diese Hilfe anzeigen help   | h                Diese Hilfe anzeigen
-quit   |                Programm beenden+exit   |                Programm beenden
 """) """)
  
Zeile 324: Zeile 367:
             print_help()             print_help()
  
-        elif cmd in ("quit", "q"):+        elif cmd in ("exit", "x"):
             temp.stop()             temp.stop()
             break             break
Zeile 334: Zeile 377:
     main()     main()
 </code> </code>
 +
 +++++
 +===== Testen =====
 +Das Programm kann sowohl **lokal im Terminal** als auch über den **Webbrowser getestet werden**.  
 +Für die Webausgabe gelten die im Abschnitt „Voraussetzungen“ beschriebenen Bedingungen.
 +
 +
 +<note>**Hinweis**
 +
 +Wird die Messung mit ''start'' begonnen, werden in regelmäßigen Abständen Temperaturwerte erfasst, die in der Datei (''temperature.txt'') gespeichert werden. Zusätzlich wird nach jeder Messung automatisch eine aktualisierte Grafik des Temperaturverlaufs erzeugt.
 +
 +Die Erfassung erfolgt entsprechend dem eingestellten Messintervall, sodass neue Messwerte erst nach einigen Sekunden sichtbar werden. Das Programm führt die Messung kontinuierlich im Hintergrund aus, bis sie mit ''stop'' beendet oder das Programm mit ''exit'' geschlossen wird.
 +</note>
 +
 +
 +<note tip>
 +Vor dem Testen prüfen, welcher ''MODE'' in ''temperature_logger.py'' gesetzt ist:
 +
 +  * ''local'' → Dateien werden im Projektordner ''data'' gespeichert.
 +  * ''web'' → Dateien werden im Webverzeichnis ''/var/www/html/temp_curve'' gespeichert und können im Browser angezeigt werden.
 +
 +Für die Webausgabe muss ''MODE = "web"'' gesetzt sein.
 +</note>
 +==== Terminal ====
 +Zur Überprüfung wird das Programm im Verzeichnis ''src'' gestartet:
 +<code bash>
 +chmod 755 temp_logger.py
 +./temp_logger.py
 +</code>
 +
 +
 +
 +<code bash Beispiel Ausgabe>
 +Temperatur-Logger v1.0.0
 +Mit 'h' Hilfe anzeigen.
 +
 +> h
 +
 +VERFÜGBARE BEFEHLE
 +------------------
 +start | s                 Logger starten
 +stop  | p                 Logger stoppen
 +reset | r                 Messwerte zurücksetzen
 +interval <sek> | i <sek>  Messintervall setzen
 +status | t                Status anzeigen
 +help   | h                Diese Hilfe anzeigen
 +exit   | x                Programm beenden
 +
 +> start
 +(Programm misst im Hintergrund …)
 +> stop
 +
 +</code>
 +Nach dem Start erscheint die Kommandozeilen-Oberfläche des Temperatur-Loggers.  
 +Im obigen Beispiel wurde mit dem Befehl ''h'' die Hilfe angezeigt.
 +
 +Die Befehle können entweder vollständig ausgeschrieben (z. B. ''start'') oder in der angegebenen Kurzform (z. B. ''s'') verwendet werden, um das Programm zu starten.
 +
 +
 +
 +Die erzeugten Dateien befinden sich im Verzeichnis ''data'':
 +
 +<code bash>
 +ls
 +temperature.png     # erzeugte Grafik
 +temperature.txt     # Messdaten
 +</code>
 +
 +Die Grafik kann anschließend mit folgendem Befehl betrachtet werden:
 +
 +<code bash>
 +feh temperature.png
 +</code>
 +
 +|{{ :raspberry_pi:temp_feh.png?400 |}}|
 +|Bildausgabe mit dem Befehl ''feh''|
 +
 +
 +==== Webseite ====
 +In diesem Abschnitt wird die einfache HTML-Struktur beschrieben, mit der das Projekt über den Webbrowser erreichbar ist und der automatisch erzeugte Temperaturverlauf grafisch dargestellt wird.
 +
 +
 +<note>Zum Testen im Browser genügt es, die **IP-Adresse** des //Raspberry Pi// in die Adresszeile einzugeben.
 +Der Apache-Webserver liefert automatisch die Datei ''index.html'' aus, die als Startseite angezeigt wird.
 +</note>
 +
 +|{{ :raspberry_pi:temp_logger_1.png?400 |}}|
 +|Bildausgabe über den Webbrowser|
 +
 +
 +=== index.html ===
 +
 +Die Datei ''index.html'' dient als Startseite und enthält eine Übersicht der verfügbaren Projekte sowie einen Link zur Anzeige des Temperaturverlaufs.
 +
 +
 +<code 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="/temp_curve/temperature.html">Temperatur Verlauf</a></li>
 +</ul>
 + 
 +</body>
 +</html>
 +</code>
 +
 +=== temperature.html ===
 +
 +Die Datei ''temperature.html'' zeigt das vom Logger erzeugte Bild temperature.png an und ermöglicht so die grafische Darstellung des aktuellen Temperaturverlaufs im Browser.
 +
 +
 +<code html  temperature.html>
 +<!DOCTYPE html>
 +<html>
 +<head>
 +    <title>Temperatur Verlauf</title>
 +</head>
 +<body>
 + 
 +<h1>Temperatur Verlauf</h1>
 + 
 +<p>Aktueller Temperaturverlauf:</p>
 +
 +<img src="temperature.png" alt="Temperaturverlauf">
 +
 +<br><br>
 +<a href="/">Zurück</a>
 + 
 +</body>
 +</html>
 +</code>
 +
 +<note>Die Dateien ''index.html'' und ''temperature.html'' müssen sich im Webverzeichnis ''/var/www/html/'' bzw. im Unterordner ''/var/www/html/temp_curve/'' befinden, damit sie vom Webserver korrekt ausgeliefert werden können.
 +</note>
projekt/python_ds18b20_logger.1771753978.txt.gz · Zuletzt geändert: von torsten.roehl