Hallo zusammen,
ich habe mal wieder etwas gepuzzelt.
Ich habe mir einen eigenen Job gepuzzelt.
Aus dem Skript mit dem schaltkontakt.py 16 1 und meiner 1 Wire Relaiskarte.
Da es mir immer noch nicht gelungen ist, vernümftig die 1Wire Relaiskarte eigenständig zusteuern, habe ich zu dem Hilfsmittel gegriffen.
Aus Gunter seiner Steueungs-Definition der Karte heraus ergab sich die Ansteuerung über die Url.
Anpassung muss erfolgen rot
markiert#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
#============================================================================================================================================
#Title : Pegelschalter an GPIO auslesen und ueber Relaiskarte Pumpe Steuern
#Author : Gemeinschaftsarbeit Paul Fischkopf / Dennis schnuffi
#Datum : 08.05.2015
#Version : 03
# GPIO Wartezeit 1 entspricht 0.1 sec. 10 entspricht 1 sec.
# ^ ^
#Anwendung :Starte Script mit z.b pi@raspberrypi $ sudo ./schaltkontakt_relais.py 16 1
#Notizen :Um einen GPIO zu exportieren muessen wir jedoch Root sein. Entweder wechselt man vorher zum Root-Benutzer, oder benutzt sudo.
# Es muessen fünf gleiche Eingangssignale innerhalb der frei wählbaren Wartezeit zwischen den Messwerten erreicht werden,
# um dann die Ausgabe zu erhalten.
#===========================================================================================================================================
#Import der erforderlichen Bibliotheken
import RPi.GPIO as GPIO
import sys
import time
import urllib2
import tempfile
# definieren der Relaiskarte
PFAD = "http://
191.247.47.11/steuerung/index.php?Teil=s&id="
R1_Ein = "
21&Akt=l2&stell=0"
R1_Aus = "
21&Akt=l2&stell=1"
#definieren der GPIO PINs
GPIOin = int(sys.argv[1])
#Wartezeit zwischen den Messungen
Wartezeit = int(sys.argv[2])/10
#deaktivieren Ausfall Ausgänge um unerwarteten Log-Ausgaben zu vermeiden
GPIO.setwarnings(False)
#set GPIO PINS
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIOin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
def Measure(IN):
#Read input Pin
Status = GPIO.input(IN)
return Status
#Start Hauptschleife
while True:
time.sleep(10)
#------------Start Messung mit X Wiederholungen------------
#definieren Variablen Schutzzustand der Schleife und wie viele gleiche Werte in einer Reihe nachgewiesen werden
retries = 5
guard = 1
counter = 0
#Da der counter bei betreten der Schleife eh 0 ist wird eine Messung erzwungen, so kann START einfach mit 0 deklariert werden
START = 0
#Start Messschleife
while guard:
#Wartezeit zwischen den Messungen /10 das Heist 1 entspricht 0.1 sec = 100ms.
time.sleep(Wartezeit)
#wenn Zähler == 0 beginnen, als Ausgangszustand des Eingangs-Pin zu messen
if counter == 0:
START = Measure(GPIOin)
#prüfen, wie viele erfolgreiche Wiederholungen erkannt werden
if counter < retries:
#wenn nicht alle Wiederholungsversuche durchgeführt werden, führe eine weitere Messung durch
CYCLE = Measure(GPIOin)
#überprüfe ob Startwert und Zykluswert gleich sind, wenn JA Zähler erhöhen, wenn nicht die Messung mit Zähler 0 und neuen Zyklus zu beginnen
if START == CYCLE:
counter = counter + 1
# Nur zum Testen Ausgabe Zähler und GPIOin Status
#print "Zaehler " + str(counter)
#Status = Measure(GPIOin)
#print "Eingang ist " + str(Status)
else:
counter = 0
else:
guard = 0
#Wenn alle Werte in der Schleife gleich sind Messung zurückgegeben
#print START
if START == 1:
fd=urllib2.urlopen(str (PFAD) + str (R1_Ein))
fd.close()
htmlfile=tempfile.mktemp('foo.html')
fd.close()
print "Pumpe Ein " + str(START)
else:
fd=urllib2.urlopen(str (PFAD) + str (R1_Aus))
fd.close()
htmlfile=tempfile.mktemp('foo.html')
fd.close()
print "Pumpe Aus " + str(START)
GPIO.cleanup()
EndeEs klappt fürs erste siehe hier:
Dateianhang:
job1.jpg
Übrigens das alte Schaltsteckdosen Design hat mir besser gefallen und war wesentlich Aussagekräftiger bezüglich der Rückmeldung
Hier der unformatierte Code:
Code:
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
#============================================================================================================================================
#Title : Pegelschalter an GPIO auslesen und ueber Relaiskarte Pumpe Steuern
#Author : Gemeinschaftsarbeit Paul Fischkopf / Dennis schnuffi
#Datum : 08.05.2015
#Version : 03
# GPIO Wartezeit 1 entspricht 0.1 sec. 10 entspricht 1 sec.
# ^ ^
#Anwendung :Starte Script mit z.b pi@raspberrypi $ sudo ./schaltkontakt_relais.py 16 1
#Notizen :Um einen GPIO zu exportieren muessen wir jedoch Root sein. Entweder wechselt man vorher zum Root-Benutzer, oder benutzt sudo.
# Es muessen fünf gleiche Eingangssignale innerhalb der frei wählbaren Wartezeit zwischen den Messwerten erreicht werden,
# um dann die Ausgabe zu erhalten.
#===========================================================================================================================================
#Import der erforderlichen Bibliotheken
import RPi.GPIO as GPIO
import sys
import time
import urllib2
import tempfile
# definieren der Relaiskarte
PFAD = "http://191.247.47.11/steuerung/index.php?Teil=s&id="
R1_Ein = "21&Akt=l2&stell=0"
R1_Aus = "21&Akt=l2&stell=1"
#definieren der GPIO PINs
GPIOin = int(sys.argv[1])
#Wartezeit zwischen den Messungen
Wartezeit = int(sys.argv[2])/10
#deaktivieren Ausfall Ausgänge um unerwarteten Log-Ausgaben zu vermeiden
GPIO.setwarnings(False)
#set GPIO PINS
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIOin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
def Measure(IN):
#Read input Pin
Status = GPIO.input(IN)
return Status
#Start Hauptschleife
while True:
time.sleep(10)
#------------Start Messung mit X Wiederholungen------------
#definieren Variablen Schutzzustand der Schleife und wie viele gleiche Werte in einer Reihe nachgewiesen werden
retries = 5
guard = 1
counter = 0
#Da der counter bei betreten der Schleife eh 0 ist wird eine Messung erzwungen, so kann START einfach mit 0 deklariert werden
START = 0
#Start Messschleife
while guard:
#Wartezeit zwischen den Messungen /10 das Heist 1 entspricht 0.1 sec = 100ms.
time.sleep(Wartezeit)
#wenn Zähler == 0 beginnen, als Ausgangszustand des Eingangs-Pin zu messen
if counter == 0:
START = Measure(GPIOin)
#prüfen, wie viele erfolgreiche Wiederholungen erkannt werden
if counter < retries:
#wenn nicht alle Wiederholungsversuche durchgeführt werden, führe eine weitere Messung durch
CYCLE = Measure(GPIOin)
#überprüfe ob Startwert und Zykluswert gleich sind, wenn JA Zähler erhöhen, wenn nicht die Messung mit Zähler 0 und neuen Zyklus zu beginnen
if START == CYCLE:
counter = counter + 1
# Nur zum Testen Ausgabe Zähler und GPIOin Status
#print "Zaehler " + str(counter)
#Status = Measure(GPIOin)
#print "Eingang ist " + str(Status)
else:
counter = 0
else:
guard = 0
#Wenn alle Werte in der Schleife gleich sind Messung zurückgegeben
#print START
if START == 1:
fd=urllib2.urlopen(str (PFAD) + str (R1_Ein))
fd.close()
htmlfile=tempfile.mktemp('foo.html')
fd.close()
print "Pumpe Ein " + str(START)
else:
fd=urllib2.urlopen(str (PFAD) + str (R1_Aus))
fd.close()
htmlfile=tempfile.mktemp('foo.html')
fd.close()
print "Pumpe Aus " + str(START)
GPIO.cleanup()