Motivation
Hauptmotivation: Wieder einmal etwas Neues zu lernen und zu erfahren – ganz einfach.
Schon lange interessierte ich mich für den kleinen, kreditkartengrossen Computer namens «Raspberry Pi», welcher schon 2012 in England auf dem Markt kam. Der im Vergleich zu üblichen Personal Computern sehr einfach aufgebaute Rechner wurde mit dem Ziel entwickelt, jungen Menschen den Erwerb von Programmier- und Hardware-Kenntnissen zu erleichtern. Entsprechend niedrig wurde der Verkaufspreis angesetzt, der je nach Modell etwa 5 bis 100 Euro beträgt. Allein in England wurden schon mehr als 36 Millionen Exemplare verkauft. Einer gehört seit kurzem mir.
L.A.M.P.-Server
Als Erstes befasste ich mit folgenden Grundfunktionen eines Linux-Systems:
- Linux-Basiskenntnisse erwerben und ausbauen (Raspbian, Ubuntu)
- Wie funktionieren Apache-Webserver, MySQL-Datenbanken und PHP-Skriptsprachen
- Installation einer funktionsfähigen Webseite mit WordPress
Diesen Teil meiner Experimente habe ich auf dieser Seite kurz beschrieben. Insgesamt bin ich von der Leistungsfähigkeit des kleinen Dings total überrascht und begeistert. Aber das war ja nur eine Standard-Aufgabe mit beliebig vielen guten (und auch weniger guten) Anleitungen aus dem Internet, welche die Installation eines L.A.M.P.-Servers beschreiben (L.A.M.P. bedeutet: Linux, Apache, MySQL, PHP).
Nächstes Experiment
Ich wollte aber etwas mehr erreichen mit dem kleinen Ding, nämlich eine Anwendung in unserem Haus, welche nebst Software auch ein wenig Hardware umfasst. Dabei standen folgende Aspekte im Vordergrund:
- Erlernen der für mich neuen aber populären Programmiersprache «Python»
- Interaktionen des «Raspy» mit externer Hardware (GPIO-Interface)
- Kommunikation mit Umsystemen wie FTP, Mail, Datenbanken und Grafikprogrammen
Die Suche gestaltete sich schwierig, da ja heute alle Systeme geschlossen und ohne Schnittstellen nach aussen daherkommen. Aber bald kam mir eine zündende Idee, über deren Umsetzung ich im Folgenden berichte.
Energiezähler Wärmepumpe
Als ich vor fünf Jahren eine neue Heizung in Form einer Luft-/Wasser-Wärmepumpe installierte, liess ich mir vom Elektriker einen separaten Energiezähler einbauen, welcher ausschliesslich den Energiekonsum (kWh) der Wärmepumpe misst und anzeigt. Im Datenblatt entdeckte ich, dass dieser Zähler eine Schnittstelle besitzt, über welche Impulse abhängig von der aufgebrachten Leistung gesendet werden.
Die zeitliche Distanz zwischen zwei Impulsen ist dabei proportional zur momentanen Leistung (W). So entspricht beispielsweise der Abstand zwischen zwei Impulsen von 1 Sekunde einer momentanen elektrischen Leistung von 1 Watt. Das ergibt einen Energiekonsum der Wärmepumpe von 3’600 Wh (Energie = Leistung x Zeit).
Ich hatte nun die Idee, eine elektrische Schnittstelle zwischen Energiezähler und Raspberry PI zu «basteln», die Impulse softwaremässig auszuwerten, in einer Datenbank zu speichern und grafisch auf meiner Webseite darzustellen – und das alles in Echtzeit.
Hardware-Interface
Als Elektro-Inschinör mit langjähriger Hardware-Erfahrung weiss ich natürlich, wie so eine einfache Verbindung gemacht wird (Open-Collector-Schaltung). Der Raspberry ist bezüglich Hardwareanschlüsse sehr flexibel. Die GPIO-Pins können zum Beispiel softwaremässig wahlweise als Aus- oder Eingänge konfiguriert werden. Ebenso kann festgelegt werden, ob es sich um Pull-up oder Pull-down-Eingänge handeln soll.
Die Kabelverbindung musste ich vom Energiezähler durch den Elektro-Schaltkasten nach aussen ziehen und dort mit dem Raspberry verbinden. Schaut listig aus, nicht wahr?
Selbstverständlich habe ich die ordnungsgemässe Funktion der Schnittstelle mit einem kleinen Testprogramm auf dem Raspberry Pi getestet. Dabei habe ich festgestellt, dass durch Schaltvorgänge im Starkstrom-Schaltkasten ab und zu Störimpulse auftreten (induktives/kapazitives Übersprechen trotz abgeschirmter Leitungen). Diese Störungen werde ich aber softwaremässig abfangen. Ansonsten funktioniert alles wie gewünscht.
Softwareumgebung
Meine praktische Programmier-Erfahrung im professionellen Umfeld liegt mittlerweile 35 Jahre zurück und basierte vornehmlich auf Assembler und dem damals populären PL/M (PL/I für Mikroprozessoren). Für die Software meines kleinen Projektes musste ich also eine neue Programmiersprache mit entsprechender Entwicklungsumgebung erlernen.
Ich habe mich für die populäre Sprache «Python» entschieden. Sie hat relative einfache Strukturen und eine gut zu erlernende Syntax. Ausserdem gibt es für jeden Anwendungsfall fertige Bibliotheken und Unmengen von guten Tutorials. Wikipedia meint dazu:«Python ist eine universelle höhere Programmiersprache. Sie hat den Anspruch, einen gut lesbaren, knappen Programmierstil zu fördern. So werden beispielsweise Blöcke nicht durch geschweifte Klammern, sondern durch Einrückungen strukturiert. Python unterstützt mehrere Programmierparadigmen, z. B. die objektorientierte, die aspektorientierte und die funktionale Programmierung. Ferner bietet es eine dynamische Typisierung. Wie viele dynamische Sprachen wird Python oft als Skriptsprache genutzt. Die Sprache weist ein offenes, gemeinschaftsbasiertes Entwicklungsmodell auf, das durch die gemeinnützige Python Software Foundation gestützt wird, die die Definition der Sprache in der Referenzumsetzung CPython pflegt.» (Quelle: Wikipedia)
Programme
Hauptprogramm mit den folgenden Funktionen:
- Initialisierung der Hardwareports des Raspberrys (GPIO 4 als Input mit Pull-up-Widerstand)
- Finite-State-Machine (FSM) mit den Stati der Heizung aufgrund der momentanen Leistung (Start, Ruhezustand, Heizzustand)
- Messen der Impulsabstände und Berechnen der Leistung, Mittelwertbildung
- Bereitstellen der Datenbankrecords (Status, Pulsabstand, Leistung, Zeitstempel)
- Senden der Records an die MySQL-Datenbank
- Mail-Benachrichtigungen auslösen, wenn der Status der Heizung wechselt
Programm zur Echtzeitdarstellung der Messresultate (Diagramme):
- Auslesen der MySQL-Datenbank
- Aufbereiten der Records zur Darstellung
- Generieren und Speichern der Diagramme mit Hilfe der Mathplotlib-Bibliothek
(letzte sechs Stunden, letzte 48 Stunden, Übersicht seit Messbeginn) - Senden der Diagramme via FTP/TLS an diese Webseite zur Echtzeitdarstellung
Diagramme
Wie bereits gesagt, liefert mein Programm Diagramme in Echtzeit an diese Webseite. Jetzt ist aber bereits Frühling und die Heizung hat beschlossen, nur noch bei einzelnen Kälteeinbrüchen in Betrieb zu gehen. Ein Echtzeitdiagramm einer «toten» Heizung macht nicht grossen Sinn.
Deshalb hier ein typischer Verlauf einer winterlichen morgendlichen Heizaktivität, startend jeweils um 04:00 Uhr für ca. 6 Stunden. Echtzeitdiagramme folgen weiter unten, sie werden im Herbst dann wieder interessanter.