projekt:python_ds18b20_logger
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| projekt:python_ds18b20_logger [2026/02/22 09:52] – torsten.roehl | projekt: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.// | ||
| + | |{{ : | ||
| + | |Der Temperaturverlauf im Browser wird nur angezeigt, wenn zuvor das Programm '' | ||
| ====== Überblick ====== | ====== Überblick ====== | ||
| Zeile 7: | Zeile 12: | ||
| * Hardware | * Hardware | ||
| * Environment | * Environment | ||
| - | * Programmstreukur | + | * Programmstruktur |
| * Software | * Software | ||
| * Quellcode | * Quellcode | ||
| + | * Testen | ||
| + | * Terminal | ||
| * Webseite | * Webseite | ||
| Zeile 16: | Zeile 23: | ||
| ====== Details ====== | ====== Details ====== | ||
| - | ==== Voraussetzungen | + | ===== Voraussetzungen |
| + | < | ||
| + | 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. | ||
| + | </ | ||
| - | 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 |
| + | **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: | ||
| </ | </ | ||
| - | === Pakete & Bibliotheken installieren === | + | ==== Pakete & Bibliotheken installieren |
| Zeile 44: | Zeile 56: | ||
| - | === Programstruktur | + | ==== Programmstruktur ==== |
| <code bash> | <code bash> | ||
| - | (course_env) pi@raspi88: | + | (course_env) pi@raspi88: |
| . | . | ||
| ├── data | ├── data | ||
| Zeile 57: | Zeile 69: | ||
| │ ├── hardware.py | │ ├── hardware.py | ||
| │ ├── __init__.py | │ ├── __init__.py | ||
| - | │ └── temperature_logger.py | + | │ └── temperature_logger.py |
| - | └── | + | └── |
| </ | </ | ||
| ===== Software ===== | ===== Software ===== | ||
| + | Im folgenden Abschnitt wird die vollständige Software zur Datenerfassung, | ||
| ==== Quellcode ==== | ==== Quellcode ==== | ||
| === hardware.py === | === hardware.py === | ||
| + | |||
| + | Die Datei '' | ||
| + | |||
| + | ++++ Quellcode: '' | ||
| <code python hardware.py> | <code python hardware.py> | ||
| Zeile 116: | Zeile 132: | ||
| </ | </ | ||
| - | === temperature_logger == | + | ++++ |
| + | |||
| + | === temperature_logger.py === | ||
| Zeile 124: | Zeile 142: | ||
| - | < | + | < |
| - | Der Benutzer pi ist Mitglied der Gruppe www-data. Dadurch besitzt er die erforderlichen Schreibrechte, | + | |
| + | Die dafür notwendigen Voraussetzungen wurden bereits in einem vorherigen Projekt (DokuWiki) geschaffen: | ||
| + | Der Benutzer pi ist Mitglied der Gruppe | ||
| </ | </ | ||
| + | |||
| + | ++++ Quellcode: '' | ||
| <code python temperature_logger.py> | <code python temperature_logger.py> | ||
| import time | import time | ||
| Zeile 144: | Zeile 166: | ||
| if MODE == " | if MODE == " | ||
| - | DATA_DIR = Path(" | + | DATA_DIR = Path(" |
| elif MODE == " | elif MODE == " | ||
| DATA_DIR = Path("/ | DATA_DIR = Path("/ | ||
| Zeile 186: | Zeile 208: | ||
| plt.ylabel(" | plt.ylabel(" | ||
| - | if temps: | + | if temps: |
| - | plt.plot(times, | + | |
| - | plt.xticks(rotation=45) | + | |
| + | step = max(1, len(times) // 10) | ||
| + | plt.xticks(range(0, len(times), step), | ||
| + | | ||
| + | rotation=45) | ||
| else: | else: | ||
| plt.text( | plt.text( | ||
| Zeile 254: | Zeile 280: | ||
| </ | </ | ||
| - | <code python | + | ++++ |
| + | |||
| + | === Hauptprogramm === | ||
| + | Das eigenständige Programm '' | ||
| + | |||
| + | 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 // | ||
| + | |||
| + | |||
| + | |||
| + | < | ||
| + | Während der Laufzeit werden die erfassten Messwerte in die Datei '' | ||
| + | </ | ||
| + | |||
| + | |||
| + | ++++ Quellcode '' | ||
| + | <code python | ||
| # | # | ||
| 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 | q | + | exit | x |
| """ | """ | ||
| 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() | ||
| </ | </ | ||
| + | |||
| + | ++++ | ||
| + | ===== 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. | ||
| + | |||
| + | |||
| + | < | ||
| + | |||
| + | Wird die Messung mit '' | ||
| + | |||
| + | Die Erfassung erfolgt entsprechend dem eingestellten Messintervall, | ||
| + | </ | ||
| + | |||
| + | |||
| + | <note tip> | ||
| + | Vor dem Testen prüfen, welcher '' | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Für die Webausgabe muss '' | ||
| + | </ | ||
| + | ==== Terminal ==== | ||
| + | Zur Überprüfung wird das Programm im Verzeichnis '' | ||
| + | <code bash> | ||
| + | chmod 755 temp_logger.py | ||
| + | ./ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | <code bash Beispiel Ausgabe> | ||
| + | Temperatur-Logger v1.0.0 | ||
| + | Mit ' | ||
| + | |||
| + | > h | ||
| + | |||
| + | VERFÜGBARE BEFEHLE | ||
| + | ------------------ | ||
| + | start | s | ||
| + | stop | p | ||
| + | reset | r | ||
| + | interval <sek> | i < | ||
| + | status | t Status anzeigen | ||
| + | help | h Diese Hilfe anzeigen | ||
| + | exit | x Programm beenden | ||
| + | |||
| + | > start | ||
| + | (Programm misst im Hintergrund …) | ||
| + | > stop | ||
| + | > | ||
| + | </ | ||
| + | Nach dem Start erscheint die Kommandozeilen-Oberfläche des Temperatur-Loggers. | ||
| + | Im obigen Beispiel wurde mit dem Befehl '' | ||
| + | |||
| + | Die Befehle können entweder vollständig ausgeschrieben (z. B. '' | ||
| + | |||
| + | |||
| + | |||
| + | Die erzeugten Dateien befinden sich im Verzeichnis '' | ||
| + | |||
| + | <code bash> | ||
| + | ls | ||
| + | temperature.png | ||
| + | temperature.txt | ||
| + | </ | ||
| + | |||
| + | Die Grafik kann anschließend mit folgendem Befehl betrachtet werden: | ||
| + | |||
| + | <code bash> | ||
| + | feh temperature.png | ||
| + | </ | ||
| + | |||
| + | |{{ : | ||
| + | |Bildausgabe mit dem Befehl '' | ||
| + | |||
| + | |||
| + | ==== Webseite ==== | ||
| + | In diesem Abschnitt wird die einfache HTML-Struktur beschrieben, | ||
| + | |||
| + | |||
| + | < | ||
| + | Der Apache-Webserver liefert automatisch die Datei '' | ||
| + | </ | ||
| + | |||
| + | |{{ : | ||
| + | |Bildausgabe über den Webbrowser| | ||
| + | |||
| + | |||
| + | === index.html === | ||
| + | |||
| + | Die Datei '' | ||
| + | |||
| + | |||
| + | <code html index.html> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | |||
| + | < | ||
| + | |||
| + | <ul> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ul> | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | === temperature.html === | ||
| + | |||
| + | Die Datei '' | ||
| + | |||
| + | |||
| + | <code html temperature.html> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | |||
| + | < | ||
| + | |||
| + | < | ||
| + | |||
| + | <img src=" | ||
| + | |||
| + | < | ||
| + | <a href="/"> | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | </ | ||
projekt/python_ds18b20_logger.1771753978.txt.gz · Zuletzt geändert: von torsten.roehl
