Dieses Projekt stammt von unserem Gastautor

Dietmar

Seit vielen Jahren bin ich begeisterter Hobbyelektroniker und habe auch schon einige Projekte umgesetzt. Die Idee für dieses Projekt kam mir, als wieder einmal unsere Solarthermie-Anlage nicht richtig funktioniert hat und wir über einen längeren Zeitraum den Fehler nicht finden konnten. Daher wollte ich eine automatisierte Anlagenüberwachung dafür installieren.

Überwachung einer Solarthermie-Anlage mit dem Raspberry Pi  

Überwachung einer Solarthermie-Anlage mit dem Raspberry Pi

Es kam bei uns immer wieder vor, dass die Solarthermie-Anlage nicht richtig funktioniert hat. Um dies deutlich schneller feststellen zu können, haben wir eine Überwachung gebaut. Sie überwacht die Anlage auf sinnvolle Temperaturwerte im Warmwasserspeicher und dem Vor- und Rücklauf, sowie die Aktivität der Pumpe.
In diesem How-to wird erklärt wie man diese Überwachung nachbauen kann.

Das Projekt

Geeignet für: Fortgeschrittene mit Kenntnissen im Löten und Umgang mit dem Raspberry Pi

Zeitaufwand:
Hardware:
Löten + Verkabeln: 1 h
Software:
Raspberry Pi einrichten: 0,5 h
How-to ausführen und testen: 0,5 h
Gesamt: 2 h

Budget: ca. 70 €

Das benötigen Sie:

Alle Teile finden Sie auch in diesem reichelt-Warenkorb.

Umsetzung

Bei zwei der vier Temperatursensoren waren die vorkonfektionierten Kabel zu kurz, um bis zum Warmwasserbehälter zu reichen. Daher löten Sie 3-adrige Kabel mit entsprechender Länge an, um diese zu verlängern. Anschließend schließen Sie die Kabel gemäß Schaltplan an GND, 3.3 V und Signal an die Anreih-Klemmen an, welche auf eine Lochrasterplatine gelötet sind. Dort sind auf der Rückseite die beiden Widerstände für LDR und Temperatursensoren verlötet. Von hier führen nur noch Kabel für GND, 3.3V, das gesammelte Temperatursensorsignal, sowie das LDR-Signal zu den entsprechenden Pins auf dem Raspberry Pi.

Die Pins sind:
3.3V ➔ Pin 1
GND ➔ Pin 6
Temperatursensoren ➔ Pin 11
LDR ➔ Pin 13

Schaltplan
Aufgebaute Schaltung im Heizungsraum

Die Platine unten links im Bild sammelt die Signale der vier Temperatursensoren (auf der linken Seite) und schickt diese an die kleine Platine, die rechts darüber angebracht ist. Hier kommt dann noch das Signal vom LDR, der die Pumpe überwacht, dazu. Dieser Aufbau war hier notwendig, da nicht alle Kabel in die Anreih-Klemmen der ersten Platine gepasst haben.

Fertig verkabelte Schaltung inkl. Beschreibung

Anleitung für die Software-Installation

Nach dem Flashen der SD-Karte und der Ersteinrichtung des Raspbian, aktivieren Sie im Raspbian Konfigurationsmenu SSH, GPIO-Fernzugriff und den 1-Draht-Bus (1-Wire).

Um nach der Installation im Heizungsraum noch weiterhin Zugriff auf den Raspberry Pi zu haben, können Sie ab jetzt auch über SSH auf ihn zugreifen. Dazu müssen Sie die IP-Adresse des Raspberrys wissen. Die erhalten Sie durch Eingabe von ifconfig im Terminal.

Mit diesem Wissen ist es nun möglich über ein SSH-Programm auf den Raspberry zuzugreifen. Meine Empfehlung dafür ist mRemoteNG, es gibt aber auch viele Alternativen, wie zum Beispiel Putty.
Öffnen Sie nun das Terminal (über SSH) und führen Sie anschließend folgende Befehle aus:

$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo apt-get install wiringpi mariadb-server python-pip libmariadb-dev-compat default-libmysqlclient-dev
$ sudo modprobe w1-gpio
$ sudo modprobe w1-therm
$ pip install mysql-connector-python
$ pip install mysqlclient
$ sudo mysql

Kopieren Sie nun den eingerückten Abschnitt bis einschließlich „exit” und fügen Sie ihn nach dem Absetzen des „sudo mysql” Befehls in die Kommandozeile ein.

CREATE USER solarueberwachung IDENTIFIED BY 'solarueberwachung';
CREATE DATABASE solarueberwachung;
CREATE TABLE IF NOT EXISTS solarueberwachung.solarueberwachung (
id int auto_increment primary key,
datetime datetime not null,
SolarVorlauf int(3),
SolarRuecklauf int(3),
SpeicherUnten int(3),
SpeicherOben int(3),
Pumpe int(1)
) ENGINE=innodb;
GRANT ALL ON solarueberwachung.solarueberwachung to solarueberwachung;
exit
$ sudo nano /boot/config.txt

Ganz unten diesen Abschnitt einfügen:

[w1]
dtoverlay=w1-gpio,gpiopin=17
$ sudo reboot
$ cd /sys/bus/w1/devices
$ ls

Jetzt sollten die einzelnen Temperatur-Sensoren mit ihren IDs angezeigt werden

$ cd /home/pi
$ mkdir solarueberwachung && cd solarueberwachung
$ nano solarueberwachung.py

Den folgenden Text in dieser Datei ablegen.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import fnmatch
import time
import MySQLdb
import logging
from datetime import datetime
import RPi.GPIO as GPIO
logging.basicConfig(filename='/home/pi/solarueberwachung/DS18B20_error.log',
level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(name)s %(message)s')
logger=logging.getLogger(__name__)
def insertDB(datetime, temperature, pumpe):
  query = "INSERT INTO solarueberwachung (datetime, SolarVorlauf, SolarRuecklauf, SpeicherUnten, SpeicherOben, Pumpe) VALUES (%s, %s, %s, %s, %s, %s);"
  args = (datetime, temperature[2], temperature[1], temperature[0], temperature[3], pumpe)
  try:
    con = MySQLdb.connect(host='localhost',database='solarueberwachung',user='solarueberwachung',password='solarueberwachung')
    cursor = con.cursor()
    cursor.execute(query, args)
    con.commit()
  finally:
    cursor.close()
    con.close()
# Get readings from sensors and store them in MySQL
now = datetime.now() # datetime = Klasse, in der die Funktion "now()" aufgerufen wird. Diese gibt ein Objekt an die Var "now" weiter.
zeitstempel = now.strftime('%Y-%m-%d %H:%M:%S') # gibt das aktuelle Datum + Uhrzeit aus
#print datetime
datetime = []
sensornummer = []
temperature = []
IDs = []
for sensorname in os.listdir("/sys/bus/w1/devices"):
  if fnmatch.fnmatch(sensorname, '28-*'):
    with open("/sys/bus/w1/devices/" + sensorname + "/w1_slave") as sensor:
lines = sensor.readlines()
      if lines[0].find("YES"):
      pok = lines[1].find('=')
      temperature.append(lines[1][pok+1:pok+3])
      IDs.append(sensorname)
      datetime.append(zeitstempel)
      if sensorname == '28-031702ba4dff': #hier eigene Sensor-IDs eintragen
        sensornummer.append("Speicher oben")
      if sensorname == '28-041702cdd7ff': #hier eigene Sensor-IDs eintragen
        sensornummer.append("Speicher unten")
      if sensorname == '28-0000053b9158': #hier eigene Sensor-IDs eintragen
        sensornummer.append("Solar Vorlauf")
      if sensorname == '28-0000053bba61': #hier eigene Sensor-IDs eintragen
        sensornummer.append("Solar Ruecklauf")
    else:
      logger.error("Error reading sensor with ID: %s" % (sensorname))
GPIO.setmode(GPIO.BCM)
GPIO.setup(27, GPIO.IN)
led = GPIO.input(27)
if led == 0: #der LDR liefert den reziproken Wert, daher wird dieser in der nächsten Zeile umgedreht
  led = 1
  print "Pumpe ist an"
else:
  led = 0
  print "Pumpe ist aus"
if (len(temperature)>0):
  insertDB(zeitstempel, temperature, led)
  print(IDs, sensornummer, zeitstempel, temperature)

In der Datei /etc/crontab legen Sie anschließend das Intervall fest, in dem solarueberwachung.py ausgeführt werden soll.

Editieren Sie diese durch

$ sudo nano /etc/crontab

Zum Beispiel alle 5 Minuten:

*/5 * * * * pi python /home/pi/solarueberwachung/solarueberwachung.py

Nun laufen die Daten alle 5 Minuten in die Datenbank.

Zur Auswertung der Daten bestehen mehrere Möglichkeiten:
1. Die direkte Auswertung über die Konsole.
2. Die Auswertung über eine externe Software wie Grafana (beschrieben im How-to Sensordatenbank auf dem Raspberry Pi).

Die Auswertung über die Konsole geschieht folgendermaßen:

$ sudo mysql
> SELECT * FROM solarueberwachung.solarueberwachung;

Dieser Befehl besorgt Ihnen alle Zeilen, die in der Datenbank solarueberwachung in der Tabelle solarueberwachung stehen und gibt sie Ihnen in Tabellenform auf der Konsole aus. Dort kann man nun sehr einfach überprüfen, ob sich z. B. die Pumpe angeschaltet hat, obwohl das Wasser von den Solarkollektoren kälter ist als das Wasser im Speicher.

Man kann sich diesen Fall auch gefiltert anzeigen lassen, indem man eingibt:

> SELECT * FROM solarueberwachung.solarueberwachung WHERE SolarRuecklauf < SpeicherOben and Pumpe = 1;

Eine mögliche Erweiterung dazu wäre dann, dass neben der Solarthermie-Anlage auch der Brenner der Heizung mit überwacht wird (weiterer LDR an Störungslicht des Brenners anbringen). Darüber hinaus wäre es möglich im Falle einer Fehlfunktion eine E-Mail an Sie zu verschicken. Dazu sind allerdings besondere Kenntnisse in der Mailserver-Konfiguration etc. gefordert.

 

Was denken Sie zu diesem Thema? Schreiben Sie einen Kommentar:

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.