Hi,
ich hab mir kürzlich auch einen Raspi gekauft und hab gleich mal eine Frage
Mein Ziel ist es, eine Bewässerung für meinen Balkon zu bauen.
Ein Relais steuert eine eine Pumpe, die entweder über ein Programm automatisch gestartet werden soll, oder über einen Kippschalter.
Außerdem gibt es in meinem Tank noch einen Schwimmschalter, der mir sagt, ob noch Wasser in dem Tank ist.
Aufgebaut sein soll das Programm so sein, dass ich in einem Unterordner alle Inputs (z.B. Schalter) habe, und in einem weiteren alle Outputs (z.B. Relais).
Ich hab nun folgendes Problem:
Das Relais für die Pumpe hängt am GPIO 18. Über Crontab wird beim Start ein Programm geöffnet, dass überprüft, ob der Schalter an oder aus ist.
Das ganze funktioniert auch schon. Nur wenn ich jetzt ein zweites Programm starte, welches automatisch für 10 sec das Relais schalten soll, dann passiert nichts.
Folgendes Script benutze ich für die Relais:
[font="Monaco"]#!/usr/bin/env python[/font]
[font="Monaco"]import RPi.GPIO as GPIO[/font]
[font="Monaco"]import time[/font]
[font="Monaco"]import sys[/font]
[font="Monaco"]sys.path.append('/home/pi/bewaesserung')[/font]
[font="Monaco"]from inputs import schalter as strom[/font]
[font="Monaco"]relais1 = 18[/font]
[font="Monaco"]relais2 = 23[/font]
[font="Monaco"]GPIO.setmode(GPIO.BCM)[/font]
[font="Monaco"]GPIO.setwarnings(False)[/font]
[font="Monaco"]GPIO.setup(relais1, GPIO.OUT)[/font]
[font="Monaco"]GPIO.setup(relais2, GPIO.OUT)[/font]
[font="Monaco"]#___________________________________________________________________#[/font]
[font="Monaco"]# Relais 1: Pumpensteuerung[/font]
[font="Monaco"]def pumpeauto(x, y):[/font]
[font="Monaco"] if strom.schwimmschalter2() == "off":[/font]
[font="Monaco"] print "Wasser vorhanden"[/font]
[font="Monaco"] if x == "on":[/font]
[font="Monaco"] print "bewaessern..."[/font]
[font="Monaco"] GPIO.output(relais1, GPIO.LOW)[/font]
[font="Monaco"] time.sleep(y)[/font]
[font="Monaco"] GPIO.output(relais1, GPIO.HIGH)[/font]
[font="Monaco"] print "bewaesserung beendet"[/font]
[font="Monaco"] return "ok"[/font]
[font="Monaco"] else:[/font]
[font="Monaco"] GPIO.output(relais1, GPIO.HIGH)[/font]
[font="Monaco"] print "bewaesserung ausgelassen"[/font]
[font="Monaco"] return "ok"[/font]
[font="Monaco"] else:[/font]
[font="Monaco"] GPIO.output(relais1, GPIO.HIGH)[/font]
[font="Monaco"] print "kein Wasser"[/font]
[font="Monaco"] return "kein Wasser"[/font]
[font="Monaco"]def pumpeman(x):[/font]
[font="Monaco"] if strom.schwimmschalter2() == "off":[/font]
[font="Monaco"] if x == "on":[/font]
[font="Monaco"]# print "bewaessern..."[/font]
[font="Monaco"] GPIO.output(relais1, GPIO.LOW)[/font]
[font="Monaco"] time.sleep(0.1)[/font]
[font="Monaco"] GPIO.output(relais1, GPIO.HIGH)[/font]
[font="Monaco"] # print "bewaesserung beendet"[/font]
[font="Monaco"] return "ok"[/font]
[font="Monaco"] else:[/font]
[font="Monaco"] GPIO.output(relais1, GPIO.HIGH)[/font]
[font="Monaco"]# print "bewaesserung ausgelassen"[/font]
[font="Monaco"] return "ok"[/font]
[font="Monaco"] else:[/font]
[font="Monaco"] GPIO.output(relais1, GPIO.HIGH)[/font]
[font="Monaco"] return "kein Wasser"[/font]
Ich habe mir gedacht, dass ich in jeder Funktion ein GPIO.cleanup() vor den returns einbauen kann. Sobald aber von meinen Hauptscript wieder ein Parameter abgefragt wird oder das Relais erneut geschalten werden soll, kommt eine Fehlermeldung, dass der GPIO nicht definiert ist.
Ich dachte eigentlich, dass man bei einem Return aus dem Funktion raus geht und wenn man sie erneut aufruft, dass dass Programm dann nocheinmal von vorne los geht.
Wo ist da mein Denkfehler?
Vielen Dank schon mal