ich habe jetzt zwar schon sehr viel gelesen, komme aber nicht weiter.
Folgenden Ablauf habe ich im moment:
Ich lege meine fix-variabeln fest (z.B Anzahl der LEDs apix=300)
Code: Alles auswählen
#Configuration:
#apix = Anzahl der angeschlossenen LEDs (Fächer + Fail LED)
#Bei 'apix' muss die Anzahl der angeschlossenen LEDs angegeben werden.
apix = 300
##############################################################
Code: Alles auswählen
##############################################################
#Imports
import time
import mysql.connector
import itertools
import functools
from flask import Flask, request
from rpi_ws281x import *
Code: Alles auswählen
#Script für Datenbankaufbau
# Versuche...
try:
#Aufbau einer Verbindung
db = mysql.connector.connect(
host='db4free.net', # Servername
user='benutzer', # Benutzername
password='passwort', # Passwort
database='datenbank',
port='3306'
)
# Ausgabe des Hashwertes des initialisierten Objektes
print(db)
print("Connected to database")
# Wenn ein Fehler vom Typ "mysql.connector.errors.ProgrammingError" aufgetreten ist...
except mysql.connector.errors.ProgrammingError:
# Ausgabe einer Fehlermeldung auf der Konsole
print("Fehler beim Aufbau der DB Verbindung aufgetreten!")
cursor = db.cursor()
cursor.execute("SHOW TABLES")
for tbl in cursor:
print(tbl)
##############################################################
Code: Alles auswählen
app = Flask(__name__)
strip = Adafruit_NeoPixel(apix, 18, 800000, 5, False, 255)
strip.begin()
@app.route('/')
def main():
return 'Hello Mitarbeiter, hier gibt es nichts zu sehen.'
@app.route('/p2lwert', methods=['GET'])
Code: Alles auswählen
def p2lwert():
# if key doesn't exist, returns None
teilnehmer = request.args.get('user', default = 4, type = int)
nummer = request.args.get('code')
if (teilnehmer == 1):
print ("Der teilnehmer 1 (Erfassung) wurde erkannt")
farbe = "rot"
rt = 255
gn = 0
bl = 0
elif (teilnehmer == 2):
print ("Der Teilnehmer 2 (Vorlegen) wurde erkannt")
farbe = "gruen"
rt = 0
gn = 255
bl = 0
elif (teilnehmer == 3):
print ("Der Teilnehmer 3 (Getriebeschrauben) wurde erkannt")
farbe = "blau"
rt = 0
gn = 0
bl = 255
elif (teilnehmer == 4):
print ("Der Teilnehmer wurde nicht angegeben")
farbe = "pink"
rt = 255
gn = 0
bl = 255
teilnehmer = "wurde nicht angegeben"
else:
print ("Ich kenne den Teilnehmer nicht")
farbe = "weiß"
rt = 255
gn = 255
bl = 255
teilnehmer = "Unbekannt!"
cursor = db.cursor()
sql = "SELECT fach FROM barcodes WHERE barcode = %s"
cursor.execute(sql, (nummer,))
farbeprint = cursor.fetchall()
string = list(itertools.chain.from_iterable(farbeprint))
if string:
led = int(functools.reduce(lambda a, b : a + str(b), string, ""))
else:
led = None
if (led != None):
strip.setPixelColorRGB(led, rt, gn, bl)
print ("Barcode: ", nummer)
print ("Fach: ", led)
strip.show()
return '''
<h1>Bauteil mit dem Barcode {} liegt im Fach {}</h1>
<h1>Das Fach {} leuchtet nun {} </h1>
'''.format(nummer, led, led, farbe)
else:
strip.setPixelColorRGB(0, rt, gn, bl)
print ("Barcode: ", nummer)
print ("Barcode konnte nicht gefunden werden")
strip.show()
return '''
<h1>Bauteil mit dem Barcode {} konnte nicht gefunden werden</h1>
<h1>Die Fail LED leuchtet nun in der Teilnehmerfarbe {} </h1>
'''.format(nummer, farbe)
if __name__ == "__main__":
app.run(port=5055, host='0.0.0.0')
Es funktioniert auch mit den LEDs ansteuern, auch wenn der Teilnehmer nicht übertragen wird, der Barcode nicht gefunden wurde usw.
Info: Fach = LED also im echten Leben sind es Fächer die Angesteuert werden, im Demoaufbau sind es LEDs (neopixel LED Stripe mit 60LED/m und 5m = 300 LEDs RGB)
Aber folgende Probleme habe ich noch:
1. Die LEDs werden nach dem setzen nicht mehr gelöscht. Also wenn Teilnehmer 1 erst den Barcode aus Fach 10 liefert, dann leuchtet auch die LED in Fach 10 entsprechend ROT (Teilnehmer 1= Rot, 2= Grün, 3=Blau)
Wenn teilnehmer 1 nun den Barcode aus fach 11 aufruft, leuchtet fach 11 und weiterhin fach 10 rot. Hier müsste aber die 10 ausgehen.
Nur irgendwie bekomme ich es nicht gebacken. Wenn teilnehmer 2 nun fach 10 Aufruft ändert sich die Farbe auf Grün, das passt.
Ich hätte hier 2 Ansätze: 1. Man schreibt in eine Variable je Teilnehmer z.B LED1 und schreibt hier rein welche die letzte LED war ( LED1= led) und löscht beim erneuten Aufruf des Teilnehmers seine letzte LED.
Problem hier wäre aber das wenn Teilnehmer 1 fach 10 aufruft, dann teilnehmer 2 fach 10 aufruft, das dann der teilnehmer 1 bei aufruf von led 20 automatisch ja die LED 10 löschen würde also die vom Teilnehmer 2.
2. Ansatz wäre man schreibt nicht die LEDs direkt sondern beim Flask aufruf wird die LED ermittelt und in eine DB geschrieben. 1 Tabelle mit 3 Zeilen. In Zeile 1 Zelle 1 steht der Wert von Teilnehmer 1, in Zeile 2 Zelle 1 steht die LED von Teilnehmer 2 usw.
Dann könnte ein zweiter Script zyklisch alle 3 Zellen abfragen, den Wert einsetzen und entsprechende LEDs ansteuern.
Aber: Ist das für die DB okay mit dem ständigen geschreibe? Gibt es eine schönere Lösung? Die DB dann local um das netzwerk nicht so zu belasten?
Und wie wäre es wenn die Abfrage der LED (Also nach Übergabe Barcode wird ja in einer DB gesucht welchem Fach dieser Barcode zugeordnert ist, was aber wenn der Barcode dem Fach 10 und dem Fach 20 zugeordnert ist) durch den das die Abfrage eine Liste liefert könnte man ja einfach die Liste als LED setzen und es müssten dann alle LEDs angesteuert werden. Aber in meinen Test schluckt der
Code: Alles auswählen
strip.setPixelColorRGB(led, rt, gn, bl)
Ich hoffe ihr versteht was ich meine. Schonmal 1000 Dank. Ich versuche es jetzt wirklich schon seit 3 Tagen und jetzt hätte ich einfach gerne die Meinung von den Profis.