ich bin neu hier im Forum. Eigentlich bin ich beruflich SPS Programmierer aufgrund diverser privaten Interessen beschäftige ich immer mal wieder mit "richtigen" Programmiersprachen, je nachdem, was für mein Projekt gerade am Sinnvollsten ist. Ich bin M 33 Jahre alt. Zu meinen Hobbys ist alles gesagt

So nun zum Thema: (Keine Frage, informell)
ich bin schon seit geraumer Zeit dabei einen Cocktail Automaten zu bauen. Der funktioniert jetzt auch schon nur will ich den Code jetzt einmal einem Redesighn unterziehen, da bei der Entwicklung doch recht viel gewachsen ist und ein ziemlicher Spagetticode die Folge war.
Grundsätzlich funktioniert das Ganze zur Zeit so:
Eine einfache HTLM Seite für mit einem PHP Skript erstellt. PHP Schaut in einer Datenbank nach Hinterlegten Cocktails. Diese werden ausgelistet. In der Datenbank ist Hinterlegt, wie viel von welcher Zutat in den Cocktail gehört, an welchem Anschluss sich die Zutat befindet, wie schnell der Anschluss fördert und noch ein paar Andere dinge, auf die ich jetzt nicht eingehen will.
Auf der Webseite kann eine Schaltfläche bedient werden. Das ruft ein PhP Skript auf, dieses Schreib die ID vom angeforderten Cocktail in eine DB. Ein Pyhton Skript Pollt die ID in der Datenbak. (Gefällt mir nicht)
Wird eine ID vom Python erkannt, werden über eine Serielle Schnittstelle und eine Relais Platine bis zu 12 Ventile für eine bestimmte Zeit angesteuert. Durch die Ventile kommt dann die Entsprechende Menge der jeweiligen Zutat. Also rein Funktionell ist das schon richtig Geil

Nun habe ich erstmal das Python Skript angefangen zu überarbeiten. Ich will von der Datenbank weg und mit csv Dateien Arbeiten. Diese will ich später "am Stück" auf die Webseite Laden und dort mit HTLM5 Manier eine "Offline" Webseite erstellen. Ein anderer Grund für CSV ist die bessere Editierbarkeit am PC und das Einfachere Backuppen.
Hier ist erstmal mein Python 3.6 Code:
import csv
class AktorType:
Name = ""
Durchfluss = 0
Stromverbrauch = 0
Einschaltzeit = 0.0
class ZutatType:
Name = ""
Menge = 0.0
Faktor = 0.0
Alkohol = 0
Anteil = 0.0
ZielMenge = 0.0
AlkoholMenge = 0.0
Anschluss = None
class AnschlussType:
Name = ""
Bit = 0
Faktor = 0
Akotor = None
class CocktailType:
Name = ""
AuffüllenMenge = 0
Menge = 0
MaxMenge = 0
ZielMenge = 0
Alkohol = 0.0
AlkoholAnteil = 0.0
Zutaten = []
"Schleife 1: Für alle Zutaten, die im Cocktail sind, den ZutatType Anlegen"
"Schleife 2: Beim Anlegen des ZutatType muss der Anschluss gefunden und der AnschlussType definiert werden"
"Schleife 3: Beim Anlegen des AnschlussType muss der Aktor gefunden und der AktorType definiert werden"
def GetZutat(Name):
with open('Zutaten.csv') as csvfile:
readCSV = csv.reader(csvfile,delimiter=';')
LineNumber = 1
Zutat = ZutatType()
for row in readCSV:
if row[0] == Name:
Zutat.Name = row[0]
Zutat.Faktor = float(row[1])
Zutat.Alkohol = float(row[2])
Zutat.Anschluss = GetAnschluss(Zutat.Name)
return Zutat
#Zutat nicht gefunden
print ("Fehler: Zutat " + Name + " wurde nicht gefunden")
Zutat.Name = Name + "(nicht gefunden)"
Zutat.Faktor = 1.0
Zutat.Alkohol = 0.0
Zutat.Anschluss = AnschlussType()
Zutat.Anschluss.Name = ""
Zutat.Anschluss.Bit = 0
Zutat.Anschluss.Faktor = 1.0
Zutat.Anschluss.Aktor = AktorType()
Zutat.Anschluss.Aktor.Name = ""
Zutat.Anschluss.Aktor.Durchfluss = 1.0
Zutat.Anschluss.Aktor.Stromverbrauch = 1.0
return Zutat
def GetAnschluss(Name):
with open('Anschlüsse.csv') as csvfile:
readCSV = csv.reader(csvfile,delimiter=';')
LineNumber = 1
for row in readCSV:
if row[4] == Name:
Anschluss = AnschlussType()
Anschluss.Name = row[0]
Anschluss.Bit = int(row[1])
Anschluss.Akotor = GetAktor(row[2])
Anschluss.Faktor = float(row[3])
return Anschluss
#Anschluss für Zutat nicht gefunden
print ("Fehler: Anschluss für " + Name + " wurde nicht gefunden")
Anschluss = AnschlussType()
Anschluss.Name = ""
Anschluss.Bit = 0
Anschluss.Faktor = 1.0
Anschluss.Aktor = AktorType()
Anschluss.Aktor.Name = ""
Anschluss.Aktor.Durchfluss = 1.0
Anschluss.Aktor.Stromverbrauch = 1.0
return Anschluss
def GetAktor(Name):
with open('Aktoren.csv') as csvfile:
readCSV = csv.reader(csvfile,delimiter=';')
LineNumber = 1
for row in readCSV:
if row[0] == Name:
Aktor = AktorType()
Aktor.Name = row[0]
Aktor.Durchfluss = float(row[1])
Aktor.Stromverbrauch = float(row[2])
return Aktor
#Anschluss für Zutat nicht gefunden
print ("Fehler: Aktor " + Name + " wurde nicht gefunden")
Aktor = AktorType()
Aktor.Name = ""
Aktor.Durchfluss = 1.0
Aktor.Stromverbrauch = 1.0
return Aktor
def MixeCocktail(Name):
Cocktail = CocktailType() #Cocktail Datenstruktur Anlegen
DateiName = "Cocktails\\" + Name + ".csv"
with open(DateiName) as csvfile:
readCSV = csv.reader(csvfile,delimiter=';')
LineNumber = 1
for row in readCSV: #Cocktail.csv Zeilenweise auslsen
if LineNumber == 4:
Cocktail.AuffüllenMenge = float(row[1])
Cocktail.Menge = Cocktail.Menge + Cocktail.AuffüllenMenge #Auffülen Menge zur Gesamtmenge hinzuaddieren
if LineNumber == 5:
Cocktail.MaxMenge = float(row[1])
if LineNumber > 10: #Ab Zeile 10 Zutaten: Name, Menge, Schritt
Zutat = GetZutat(row[0]) #Zutat eigenschaften aus Zutaten.csv lesen inkl. Anschluss und Aktor Eigenschaften
Zutat.Menge = float(row[1])
Zutat.Schritt = int(row[2])
Cocktail.Menge = Cocktail.Menge + Zutat.Menge #Alle Mengen der Zutaten addieren für Gesamtmenge
Cocktail.Zutaten.append(Zutat)
LineNumber = LineNumber + 1
#Alle für den Cocktail benötigten Informationen sind jetzt in der Cocktail Datenstruktur
#Festlegen der Zielmenge für den Cocktail
if Cocktail.Menge > Cocktail.MaxMenge:
Cocktail.ZielMenge = Cocktail.MaxMenge
else:
Cocktail.ZielMenge = Cocktail.Menge
#Später auf Glasgröße begrenzen
#Berechnen, zu welchem Anteil welche Zutat im Cocktail vorhanden ist
#Alkoholgehalt ermitteln
#Einschaltzeiten berechnen
for i in range(len(Cocktail.Zutaten)):
Cocktail.Zutaten.Anteil = Cocktail.Zutaten.Menge / Cocktail.Menge
Cocktail.Zutaten.ZielMenge = Cocktail.Zutaten.Anteil * Cocktail.ZielMenge
Cocktail.Zutaten.AlkoholMenge = Cocktail.Zutaten.ZielMenge * (Cocktail.Zutaten.Alkohol/100)
Cocktail.Alkohol = Cocktail.Alkohol + Cocktail.Zutaten.AlkoholMenge
Cocktail.Zutaten.Anschluss.Akotor.Einschaltzeit = (Cocktail.Zutaten.ZielMenge / Cocktail.Zutaten[i].Anschluss.Akotor.Durchfluss) * Cocktail.Zutaten[i].Faktor * Cocktail.Zutaten[i].Anschluss.Faktor
#Alkoholanteil vom Cocktail berechnen
Cocktail.AlkoholAnteil = (Cocktail.Alkohol/Cocktail.ZielMenge)*100.0
#Ergebnisse erstmal nur als Text ausgeben
print("Gesamtmenge: " + str(Cocktail.Menge))
print("ZielMenge: " + str(Cocktail.ZielMenge))
print("Alkohol gehalt: " + str(Cocktail.Alkohol) + "ml")
print("Alkohol Anteil: " + str(Cocktail.AlkoholAnteil) + "%")
for i in range(len(Cocktail.Zutaten)):
print("Zutat " + str(i+1) + ": " + str(Cocktail.Zutaten[i].ZielMenge) + "ml " + Cocktail.Zutaten[i].Name + ", " + Cocktail.Zutaten[i].Anschluss.Akotor.Name + " an " + Cocktail.Zutaten[i].Anschluss.Name + " im Schritt " + str(Cocktail.Zutaten[i].Schritt) + " für " + str(Cocktail.Zutaten[i].Anschluss.Akotor.Einschaltzeit) + "s einschalten")
MixeCocktail("Cocktail")