Guten Morgen,
Seit einigen Tagen bastle ich an einen Skript, welches mir aus einer MySQL Datenbank werte ausliest, entsprechend einen GPIO-Pin schaltet und Zustandsänderungen in die Datenbank schreibt.
kurz zum Ablauf:
In der Tabelle 1 sind drei werte. wenn diese drei werte gleich sind soll eine LED leichten. Immer wenn die LED an oder aus geht, soll das in Tabelle2 geschrieben werden.
Zudem ist ein Schalter am Raspberry. Wenn dieser an ist, soll nichts passieren und die LED dauerhaft aus sein. Bei aktivem Schalter soll alle 10 Sekunden ein Eintrag in Tabelle2 geschrieben werden
Nach ewigem Gefummel funktioniert das jetzt ganz zuverlässig.
Jetzt suche ich nur noch nach einer Möglichkeit, dass bei einem Verbindungsabbruch nur eine Sekunde gewartet wird und das Skript dann einfach weiter abgearbeitet wird.
Leider konnte ich bisher noch keine Lösung für mich finden. Oder ich bin zu dämlich das Gefundene richtig in meinen Code zu übertragen Vielleicht könnt ihr mit ja helfen
#bibliotheken
import mysql.connector
import RPi.GPIO as GPIO
import time
#gpio
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)
GPIO.setup(17, GPIO.IN)
#variablen
led = 9
led_old = 9
wert1 = 9
wert2 = 9
wert3 = 9
schalter = 9
#db zugang
mydb = mysql.connector.connect(
host = "********",
user = "********",
passwd = "********",
db = "********")
#schalter prüfen
while True:
if (GPIO.input(17) == False):
mycursor = mydb.cursor()
sql = "INSERT INTO tabelle2 (schalter) VALUES ('1')"
mycursor.execute(sql)
mydb.commit()
print("schalter ist an")
GPIO.output(4, GPIO.LOW)
led_old = 2
time.sleep(10)
else:
#wert1 Lesen
mycursor = mydb.cursor()
mycursor.execute("SELECT wert1 from tabelle1 WHERE raum LIKE '3%'")
wert1 = mycursor.fetchall()
mycursor.close()
#wert2 lesen
mycursor = mydb.cursor()
mycursor.execute("SELECT wert2 from tabelle1 WHERE raum LIKE '3%'")
wert2 = mycursor.fetchall()
mycursor.close()
#wert3 lesen
mycursor = mydb.cursor()
mycursor.execute("SELECT wert3 from tabelle1 WHERE Zone raum '3%'")
wert3 = mycursor.fetchall()
mycursor.close()
mydb.commit()
print(wert1, wert2, wert3)
#led an
if wert1 == wert2 == wert3:
led = 1
GPIO.output(4, GPIO.HIGH)
if led != led_old: #neuer zustand - in db schreiben
mycursor = mydb.cursor()
sql = "INSERT INTO tabelle2 (led) VALUES ('1')"
mycursor.execute(sql)
mydb.commit()
led_old = led
#led aus
else:
led = 0
GPIO.output(4, GPIO.LOW)
if led != led_old: #neuer zustand - in db schreiben
mycursor = mydb.cursor()
sql = "INSERT INTO tabelle2 (led) Values ('0')"
mycursor.execute(sql)
mydb.commit()
led_old = led_b
wert1 = 8
wert2 = 7
wert3 = 6
time.sleep(0.1)
Alles anzeigen