ich bin sehr neu in Sachen Python und hab da gleich ein Problem.
Ich versuche den Status bzw. die Status Änderung per UDP zu senden.
Das funktioniert soweit auch.
Aber bleibt einer der Taster an den GPIO´s geschlossen werden ab da die anderen GPIO´s ignoriert.
Ich möchte mit einem GPIO einen Betriebszustand einer Heizung und mit einem GPIO Impulse des Gaszählers übertragen.
Deswegen kommt es natürlich durchaus vor das einer der GPIO´s für eine längere Zeit aktiv ist.
Ich finde den Fehler im Script leider nicht.
Könnt Ihr mir helfen?
Danke und Viele Grüße
Mike
Code: Alles auswählen
# Beenden dauert solange wie in temperaturzeit drine steht
import os, sys, time, socket, RPi.GPIO as GPIO, threading # Importiert die Klassen
GPIO.setmode(GPIO.BCM) #BCM Modus fuer GPIO
GPIO.setwarnings(False) # Warnungen fuer GPIO Auschalten
#___________________UDP___________________________
UDP_IP = "172.16.1.40" # IP des empfaengers
UDP_PORT = 7007 # Port des empfeangers
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # UDP Seasion eaffnen
#__________________________________________________
#___________________Temperatur_sensoren____________
temperaturzeit = 10 # Zeit bis zur neachsten wiederholung in Sekunden
Sensor = ['28-041685fa3dff','28-041686101aff','28-041685eb30ff','28-0416860135ff','28-0516869ef8ff']#Sensoren hier eintragen -----> ['10-000802d3ab2f','Neachstersensor'] zufinden in /sys/devices/w1_bus_master1/
#___________________________________________________
#___________________GPIO__________________________
buttonsend = 5 # Wird 5 Mal gesendet
druchlaeufe = 0
buttonwait = 0.01 # x Sec Warten bis zum naechsten senden
button1 = 13
button2 = 17
button3 = 18
buttonstatus1 = 0
buttonstatus2 = 0
buttonstatus3 = 0
GPIO.setup(button1, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(button2, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(button3, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
#______________________________________________________
def aktuelleTemperatur():
while not stop:
time.sleep(temperaturzeit)
for index in range(len(Sensor)):
# 1-wire Slave Datei lesen
file = open('/sys/bus/w1/devices/' + str(Sensor[index]) +'/w1_slave')
filecontent = file.read()
file.close()
# Temperaturwerte auslesen und konvertieren
stringvalue = filecontent.split("\n")[1].split(" ")[9]
temperature = float(stringvalue[2:]) / 1000
# Temperatur ausgeben
rueckgabewert = '%0.2f' % temperature #<-------- wird aktuell in 21.25 ausgegeben fuer Temperatur 21,25 C [rueckgabewert = '%0.2f' % temperature]
print "Aktuelle Temperatur von Sensor " + (Sensor[index])+ ":" , rueckgabewert, "C"
sock.sendto(Sensor[index] + ":"+ rueckgabewert, (UDP_IP, UDP_PORT))# Sendet wert an UDP Client
def buttonsender(button,status):
global druchlaeufe
global buttonsend
if status == 0:
if not druchlaeufe == buttonsend:
for x in range(0,buttonsend):
time.sleep(buttonwait)
print(str(button) + ":1" )
sock.sendto(str(button) + ":1", (UDP_IP, UDP_PORT))
druchlaeufe += 1
# print status
# print druchlaeufe
if status == 1:
if druchlaeufe == buttonsend:
if not GPIO.input(button): #Wenn Button
for x in range(0,buttonsend):
time.sleep(buttonwait)
print(str(button) +":0" )
sock.sendto(str(button) +":0", (UDP_IP, UDP_PORT))
druchlaeufe=0
# print status
# print druchlaeufe
try:
stop = False
t1 = threading.Thread(target=aktuelleTemperatur)
t1.start()
while True:
#______Buttons senden___________
if GPIO.input(button1):
if buttonstatus1 == 0:
buttonsender(button1,buttonstatus1)
buttonstatus1 = 1
if not GPIO.input(button1):
if druchlaeufe == buttonsend:
buttonsender(button1,buttonstatus1)
buttonstatus1 = 0
if GPIO.input(button2):
if buttonstatus2 == 0:
buttonsender(button2,buttonstatus2)
buttonstatus2 = 1
if not GPIO.input(button2):
if druchlaeufe == buttonsend:
buttonsender(button2,buttonstatus2)
buttonstatus2 = 0
if GPIO.input(button3):
if buttonstatus3 == 0:
buttonsender(button3,buttonstatus3)
buttonstatus3 = 1
if not GPIO.input(button3):
if druchlaeufe == buttonsend:
buttonsender(button3,buttonstatus3)
buttonstatus3 = 0
#________________________________
#---------Unwichtig-----
except (KeyboardInterrupt, SystemExit):
stop = True
#-----------------------
sock.close
print("Ende")