In einem anderen Beitrag "www.python-forum.de/viewtopic.php?f=31&t=52317" wurde ich gefragt ob das alles ist was ich mit dem Pi mache.
Natürlich ist das schalten von Pumpen über Taster nicht das einzige was der Pi machen soll.
Ursprünglich habe ich damit angefangen, dass ich mit Temperatursensoren (DS18b20) die Wassertemperatur im Pool und die Solartemperatur an den Solarkollektoren messen und darüber die 2 Pumpen steuern wollte.
Ich habe das ganze bei mir mit 2 Pumpen gelöst damit ich nicht immer die große Filterpumpe laufen lassen muss, sondern mit einer kleineren den Solarheizkreis pumpen lasse. Einfach zum stromsparen.
Und natürlich sollte die Solarpumpe auch nur dann laufen wenn die Solarkollektoren warm genug sind und das Wass noch zu kalt ist...
Da ich das Skript als blutiger Anfänger geschrieben habe, hatte ich mir jetzt gedacht ich zeige euch das mal in der Hoffnung das das gar nicht so schlecht geworden ist. Funktionieren tut es bereits seit längerer Zeit
Gut gemeinte Kritik ist natürlich immer willkommen.
Vieleicht gibt es noch Optimierungen dazu!?
Code: Alles auswählen
import time
from RPi import GPIO
GPIO.setmode(GPIO.BCM) # GPIO Nummern statt Board Nummern
#GPIO Pin`s
FILTERPUMPE = 6
SOLARPUMPE = 13
# GPIO Modus zuweisen
GPIO.setup(FILTERPUMPE, GPIO.OUT)
GPIO.setup(SOLARPUMPE, GPIO.OUT)
S01_daten_pfad = "/sys/bus/w1/devices/28-0120638705a7/w1_slave" #Wassersensor
S02_daten_pfad = "/sys/bus/w1/devices/28-02131e36dfaa/w1_slave" #Solarsensor
Text = """\
____ ______ _
/ __ \____ ____ / / __ \(_)
/ /_/ / __ \/ __ \/ / /_/ / /
/ ____/ /_/ / /_/ / / ____/ / ___Pumpensteuerung___
/_/ \____/\____/_/_/ /_/
__ ____
/ /_ __ __ / __ )___ ____ ____ __ __
/ __ \/ / / / / __ / _ \/ __ \/ __ \/ / / /
/ /_/ / /_/ / / /_/ / __/ / / / / / / /_/ /
/_.___/\__, / /_____/\___/_/ /_/_/ /_/\__, /
/____/ /____/
"""
print (Text)
#Sensor_1 (DS18b20 / Wassertemperatur)
def Temperatur_S01():
# 1-wire Slave Datei lesen
file = open(S01_daten_pfad)
filecontent = file.read()
file.close()
# Temperaturwerte auslesen und konvertieren
stringvalue = filecontent.split("\n")[1].split(" ")[9]
temperature = float(stringvalue[2:]) / 1000
return(temperature)
#Sensor_2 (DS18b20 / Solartemperatur)
def Temperatur_S02():
# 1-wire Slave Datei lesen
file = open(S02_daten_pfad)
filecontent = file.read()
file.close()
# Temperaturwerte auslesen und konvertieren
stringvalue = filecontent.split("\n")[1].split(" ")[9]
temperature = float(stringvalue[2:]) / 1000
return(temperature)
try:
while True:
print(time.strftime("%d.%m.%Y %H:%M"))
print("Wassertemperatur aktuell:","{:.0f}".format(Temperatur_S01()),"C°")
print("Solartemperatur aktuell:",'{:.0f}'.format(Temperatur_S02()),"C°")
time.sleep(0.1)
if ((Temperatur_S01()) < 29.5 and (Temperatur_S02())>= 40 and (Temperatur_S02()-1) > (Temperatur_S01())):
GPIO.output(SOLARPUMPE, GPIO.HIGH)
print (">>> Solarpumpe AN")
time.sleep(900)
if ((Temperatur_S01()) < 29 and (Temperatur_S02())< 40 or (Temperatur_S02()-2) < (Temperatur_S01())):
GPIO.output(SOLARPUMPE, GPIO.LOW)
print (">>> Solarpumpe AUS")
time.sleep(900)
if (Temperatur_S01()) >= 29 and (Temperatur_S01()) < 30 and (Temperatur_S02())> 40 :
GPIO.output(SOLARPUMPE, GPIO.HIGH)
time.sleep(1)
GPIO.output(FILTERPUMPE, GPIO.HIGH)
Text = """\
>>> Max Pooltemperatur fast erreicht!
>>> Solarpumpe AN
>>> Filterpumpe AN
------> 20 Minuten"""
print (Text)
time.sleep(1200)
if (Temperatur_S01()) >= 30:
GPIO.output(SOLARPUMPE, GPIO.LOW)
time.sleep(1)
GPIO.output(FILTERPUMPE, GPIO.LOW)
Text = """\
>>> Pool zu warm
>>> Solarpumpe AUS
>>> Filterpumpe AUS"""
print (Text)
time.sleep(900)
except KeyboardInterrupt:
print ("GoodBye :D")
finally:
GPIO.cleanup()