Gasheizung.

Ein Raspberry Pi Projekt.

Python & Flask & Jinja.

Zurück Gas Parameter, HTML Formular Gaszähler & Reedkontakt DS18B20 Display Python Autostart & FTP Mathe Das Dreieck (PDF)

Mit nur wenigen Browser-Klicks hast du die Kontrolle über deinen Gasverbrauch und Gaskosten. Du musst nicht mehr in den Keller laufen und den Gaszählerstand ablesen. An den Vorlauf- und Rücklaufrohren für die Heizung und auch für das Warmwasser sind Temperaturfühler montiert. Eine Analyse für den Gasverbrauch steht nichts mehr im Weg. Zum Beispiel, reduziert eine steile- oder flache Heizkurve den Gasverbrauch?

Weder an der Gasheizung, Wärmetauscher für Warmwasser und schon gar nicht am Gaszähler wurde eingegriffen.

Der Raspberry Pi 2 mit externem USB-WiFi-Interface übernimmt die komplette Steuerung. Alle Messdaten werden in CSV-Dateien und oder in JSON-Files gespeichert. Eine Datenbank gibt es nicht. Einzige bittere Pille: „twenty-four/seven electric power“. Wenn alles weiterhin so gut läuft, ziehen wir den Stecker vom Fernseher raus! Punkt. Ende.

Der Raspberry Pi Webserver stellt zwei Webseiten zur Verfügung: Ein Formular zur Eingabe der Gasparameter und zur Visualisierung der Gaskosten eine Tabelle.

Viele Gaszähler besitzen an der letzten Zählstelle einen Magneten. Positioniert man einen Reedkontakt, so erhält man bei jeder Rotation am Nulldurchgang einen Impuls. Wenn du so ein Projekt umsetzen willst, lese zuerst das Kapitel „Gaszähler und Reedkontakt“

Achtung! Momentan ist der Webserver noch ein unsicherer Kantonist! Er läuft zwar im hauseigenen Netz und wird niemals eine Bridge zur Außenwelt (Internet) bekommen, jedoch die Experten warnen eindringlich vor so einer Nutzung! Leider habe ich die Sicherheitsvorkehrungen wie „WSGI“ im Zusammenhang mit „APACHE“ noch nicht hinbekommen! Es hakelt noch! Ich arbeite dran.

Die hier gezeigte Dokumentation behandelt nur den Part Webserver! Die Auswertung der vier Temperaturen im Zusammenspiel mit einer Verbrauchsanalyse werden hier nicht gezeigt. Da alle Daten im CSV- oder JSON-Format vorliegen, transportiere ich diese Dateien mit FileZilla zum PC und dort ist eine PyQT6-Applikation, die eine Analyse mit Grafiken usw. behandelt.


Projekt Raspberry Pi Gasheizung


Das Bild oben zeigt die Installation. In einem Feuchtraum Schaltkasten ist der Raspberry Pi verbaut. Vier Temperaturfühler (DS18B20) und einen Reedkontakt vom Gaszähler verwaltet er. Ein Display dient als optische Kontrolle. Es wechselt im 15 Sekundentakt zwischen Kubikmeter Gasverbrauch und Temperaturanzeige hin und her. Datum und Uhrzeit werden immer visualisiert. Aus Sicht der Software verrichten sechs Python Parallelprogramme (Threads) ihre Arbeit.

Webserver HTML Gaskosten


Aus Sicht des Anwenders sind nur die beiden oberen Zeilen und die Tabellenzeile 11 interessant. Ist der Eurobetrag in Tabellenzeile 11 negativ, bedeutet das eine Nachzahlung. Findest du nicht auch, dass man schon einen enormen Aufwand in die Hard- und Software stecken muss, um so ein paar Auswertungen zu erhalten?

Webserver HTML Gaskosten Fehler


Fehler treten auf, wenn Verzeichnisse oder Dateien fehlen, json-Datenformate nicht korrekt sind oder das Datum nicht mit Punkt getrennt wurde.

Gasheizung Schaltkasten Platine


Alle Module, die ich in verschiedenen Projekten verwende, sind steckbar aufgebaut. Die beiden oberen Bilder zeigen den Raspberry Pi 2, dieser stammt aus einem Roboterprojekt HaBuRo1.

Die zwei Bilder unten zeigen den Deckel des Feuchtraum Schalkastens: In der Mitte des Schaltkastens sind das Display, Taster und eine Leuchtdiode installiert. Betätigt man den Taster für drei Sekunden werden alle Python Programme beendet. Die rote Leuchtdiode signalisiert das korrekte Abtasten des Reedkontakts.

Das Projekt hat 58 Euro gekostet. Gekauft wurden das Installationsmaterial, wie Feuchtraumkabel, Feuchtraum Schaltkasten und Steckdose, PVC-Rohre und Schellen. Der Rest stammt aus der Bastelkiste.


Gasheizung Schaltplan


Der Schaltplan. Für die vier DS18B20-Temperatursensoren wird nur ein 4,7 Kiloohm Pull Up Widerstand, in der Nähe des Raspberry Pis, eingesetzt. Weiterhin ist nur der Pin 7 für diese vier Sensoren vorgesehen.

Webserver Gaskosten HTML -1- Webserver Gaskosten HTML -2- Webserver Gaskosten HTML -3- Webserver Gaskosten HTML -4-


gasKosten.html, Speicherort: ../templates/

Das Besondere an der obigen HTML-Datei sind die Zeilen mit: {{wert.yxyxyxyxyxyx}}. Das ist eine Jinja-Template-Syntax (Platzhalter), die von Python Flask mit Daten gefüllt werden. Python Flask rendert diese Seite nicht nur, es werden auch im Methodenrumpf Daten übergeben.


Webserver Fehler Gaskosten HTML -1- Webserver Fehler Gaskosten HTML -2-


error_gasKosten.html, Speicherort: ../templates/

Auch hier liefert der Server Daten. Siehe Zeile 30.


Webserver Gaskosten CSS -1- Webserver Gaskosten CSS -2-


gasKosten.css, Speicherort: ../static/css/

Webserver Gaskosten Python


Python-Flask!
Zeile 13: In Abhängigkeit der Gasparameter werden Berechnungen durchgeführt. Siehe weiter unten in diesem Kapitel unter „tools.py“. Kehrt diese Funktion ohne Fehlermeldung zurück, geht es in Zeile 15 weiter. Hier wird die Webseite „gasKosten.html“ angezeigt (gerendert) wobei im Methodenrumpf die Daten als Python-Dictionaries mitgegeben werden. Der Mechanismus Flask und Jinja Framework zeigen diese Daten im entsprechenden Platzhalter an. Im Fehlerfall springt das Programm zur Zeile 17.

Zeile 22 bis 25: Der Server kann mit /shutdown in der URL-Zeile des Browsers beendet werden. Mehr Details hierüber siehe Menüpunkt Html-Formular.


Webserver Gaskosten Python Tools1 Webserver Gaskosten Python Tools2 Webserver Gaskosten Python Tools3


Erweiterung von „tools.py“, siehe Python.
Zeile 10 bis 19, Funktion: Berechnung Anzahl der Tage zwischen zwei Datumsangaben.
Zeile 24 bis 30, Funktion: Prüft, ob das Datumsformat mit Punkt getrennt wurde.

Zeile 35 bis 104, Funktion: Berechnet die Gaskosten in Abhängigkeit der Gasparameter, die der Anwender vorher im Webseitenformular eingegeben hat. Zuerst wird die Datei „gasParam.json“ geöffnet und ein Python-Dictionary mit Gasparameterdaten gefüllt, Zeile 57 bis 59.

Zeile 61 bis 68: Dem Dictionary wird die Anzahl der Tage hinzugefügt. Zeile 69 bis 74: Gasverbrauch in m³ und kWh werden berechnet und dem Dictionary übergeben. Zeile 75 bis 87: Übergabe Bruttopreis, Arbeitspreis und Summe zum Dictionary. Zeile 88 bis 101: Das Dictionary erhält die Vorauszahlungen und Differenzbetrag in Euro, bezogen auf die Gasverbrauchskosten. Zeile 102 bis 104: Die Datei „gasParam.json“ wird mit dem ergänzten Dictionary neu gespeichert. Im Fehlerfall kehrt die Funktion mit einem Fehlerstring zurück.


Details zur GasBerechnung


Was Python liefert, Zeile 1 bis 108, kannst du hier kontrollieren!

Webserver Gaskosten Python variablen


Für die globalen Variablen wurde ein separates Python Modul erstellt. Siehe auch Menüpunkt Python, Listing „variablen.py“. Zeile 61: List-Element für die „gasParam.json“-Datei, siehe weiter unten in dieser Beschreibung. In der Liste gasParam[] sind alle Daten für die Ermittlung des Gaspreises als Dictionary enthalten.

Zeilen 62 und 63: Pfade für Dateien.


Webserver Gasheizung json File


Name: gasParam.json. Speicherort: ..\static\json\
Der Raspberry Pi Flask Server stellt ein HTML Eingabeformular zur Verfügung. Parameter für Erdgas können dort eingegeben werden. Mit Betätigung der Sendetaste werden diese Werte in die gasParam.json Datei geschrieben, siehe oben Zeile 3 bis 9 und 11 . Die Zeilen 10 und 12 werden stündlich aktualisiert. Details findest du im Menü Python Tools, Zeile 90 und die Zeilen 150 bis 159.

Mit dem Browser-Aufruf der Webseite [IP-Adresse Raspberry Pi:Port 6055] generiert die Software die Werte für die Zeilen 13 bis 22.


Webserver Abschlagzahlung json File


Name: gasAbschlagZahlung.json. Speicherort: ..\static\json\
Für diese Datei gibt es kein Eingabeformular! Sie muss im Editor bearbeitet / verändert werden. Ändert dein Gaslieferant die monatlichen Abschlagszahlungen, so muss die Datei editiert werden. Achtung! Dezimalzahl mit Punkt trennen.

Dezimalzahl mit Kommatrennung und oder Veränderungen des JSON-Schlüssels (Monat) hat zur Folge, dass die Webseite Fehlermeldung aufgerufen wird. Siehe auch oben Python-Tools Zeile 88 bis 94.




Zurück Html Formular Gaszähler & Reedkontakt DS18B20 Display Python Autostart & FTP Mathe Das Dreieck (PDF)