Was die Begriffe Kaninchen, Taster, Lean-Management alles mit dem Raspberry Pi zu tun haben, erfahren Sie in diesem Artikel.
Vorgeschichte
Alles begann mit dem Einzug von 2 Kaninchen in unsere Garage. Die Kinder waren voll motiviert und damit war auch die Fütterung und Reinigung sichergestellt. Aber wie es manchmal so läuft…
Die Fütterungshäufigkeit durch die Kids passte nicht so ganz zu den Wünschen der Kaninchen. Es musste also eine Lösung her.
Die erste Lösung war: Papa macht alles allein. Die fand ich nicht ganz so gut. Ich brauche also eine Zweite.
Lösung mit Lean Thinking
Im Job würde ich es mit Methoden aus dem Lean Management anpacken. Den Prozess visualisieren, Verschwendung eliminieren, ausprobieren, verbessern…
Das war ein guter Plan. Also den Familenrat einberufen und dann legten wir gemeinsam los.
Das Ergebnis konnte sich wirklich sehen lassen. Meine Tochter hat eine Schiebe-Karte gebastelt und es gab Regeln.
Regeln (= „Prozessablauf“)
1. Die Schiebe-Karte wird an die Haustüre geklebt und beachtet.
2. Jeden Morgen stellt Papa die Karte auf HUNGRIG.
3. Sobald jemand füttert, stellt er die Karte auf SATT.
4. Am Abend wird geprüft, ob die Karte auf SATT steht.
Wenn Ja ist alles gut. Wenn Nein – ja dann muss nochmal jemand raus.
Soweit so gut. Eine Zeitlang hat das ziemlich gut funktioniert. Aber irgendwann schaute auch nicht immer jemand jeden Abend auf die Schiebe-Karte. Und für das Saubermachen des Geheges gab es das gleiche Problem.
Damit war klar: → Kontinuierliche Verbesserung! Eine dritte Lösung muss her.
Smarter Raspberry
Die Lösung musste auf jeden Fall smarter sein, auch um das Interesse wieder neu zu wecken. Und es sollte diesmal alle Probleme lösen.
- Es muss jedem klar sein, ob bereits gefüttert wurde.
- Die Problematik „Saubermachen“ muss auch mit gelöst werden.
- Wenn etwas vergessen wird, muss eine Erinnerung kommen.
- Und das Wichtigste: Es muss Spaß machen.
Mit meinem Sohn habe ich dann ein Realisierungskonzept überlegt:
- Unser Smarthome, bestehend aus einem Raspberry Pi, wird erweitert
- Bei den Kaninchen werden 3 Taster installiert:
(1) Gefüttert
(2) Saubergemacht und eine Taste
(3) für Leckerli gegeben - Auf dem Raspberry läuft ein Python-Programm zur Überwachung der Tastenereignisse
- Werden Tasten gedrückt, erfolgt eine Ereignisbearbeitung: Der jeweilige Zähler wird für den ausgewählten Zeitraum zurückgesetzt:
– Gefüttert, täglicher Zähler (muss täglich bis 19:00h erfolgt sein)
– Saubergemacht, wöchentlicher Zähler (muss sonntags bis 12:00h erfolgt sein)→ Erfolgt keine Rücksetzung bis zum gewählten Zeitpunkt, wird eine E-Mail mit einer Erinnerung an alle Kinder versendet. - Bei jedem Ereignis wird eine Textdatei erstellt, die vom Webserver ebenfalls ausgewertet werden kann
Schritt 1: Panel für Tasten bauen
Die Tasten haben wir direkt neben den Stall gebaut. In einer kleinen Holz-Box kommen die 3 Tasten problemlos unter. Welche Taster Sie verwenden spielt keine Rolle. Mir gefallen die Industrie-Ausführungen aber besser.
Oft bekommen Sie gute gebrauchte Taster/Schalter-Angebote bei Ebay, wenn Sie unter „Industrie Taster“ suchen. Die Taster sind sehr robust und es ist sehr einfach eine LED einzubauen (ein wenig Heißkleber reicht). Damit kann die Beleuchtungsproblematik elegant gelöst werden.
Das Panel haben wir Kaninchen Konsole getauft.
Schritt 2: Verkabelung
Der Schaltungsaufbau der Taster erfolgt über einen 10kΩ Pull-Up-Widerstand gegen die 3,3 V des Raspberrys. Da es mit langen Leitungen öfters Probleme gibt, verweise ich auf meinen Blog Telekom T-Concept X311 mit Doorline am Raspberry. Dort habe ich verschiedene Lösungsmöglichkeiten beschrieben. Wie Sie später sehen werden, setzen wir hier eine Software-Lösung ein.
Schritt 3: Python-Software programmieren
Zuerst muss klar sein, wie die Funktion der Taster und LED’s aussehen soll. Die LED’s sollten auf jeden Fall nicht permanent eingeschaltet sein (und damit vielleicht im Dunkeln die Kaninchen stören).
Um trotzdem den aktuellen Status zu erkennen, haben wir uns überlegt, nach dem ersten Tastendruck den Status anzuzeigen.
→ Kaninchen wurden noch nicht gefüttert: LED blinkt für 10 Sekunden
→ Kaninchen wurden schon gefüttert: LED leuchtet für 10 Sekunden
Wird innerhalb der 10 Sekunden die Taste nochmal gedrückt, wird das als Signal für die Fütterung gewertet.
Die Programmierung erfolgt am besten über eine Testaufbau. Wir haben ein Breadboard und unseren Raspberry-Stecker benutzt.
Der Aufbau der Taster ist für alle 3 identisch, deshalb ist er über eine eigene Klasse definiert:
class EreignisTaster: def __init__(self,PinTaster,PinLed,Name,DateinameProtokoll,DateinameStatus): self.PinTaster=PinTaster self.PinLed=PinLed self.Name=Name self.DateinameProtokoll=DateinameProtokoll self.DateinameStatus=DateinameStatus self.Status=False self.gedrueckt=0 self.lastKeypress=0 self.PruefungIntervall="-" self.PruefungErfolgt=0 self.Meldung=""
Die Funktion zur Prüfung, ob ein Taster gedrückt wurde, sieht so aus:
def Pruefung(self): if GPIO.input(self.PinTaster)==False: if self.gedrueckt==0: #Taste wird gedrueckt self.gedrueckt=1 self.lastKeypress=datetime.datetime.now() print("Taste "+self.Name+": erkannt") else: if (self.gedrueckt==1) and (datetime.datetime.now()-self.lastKeypress>datetime.timedelta(milliseconds=200)): #Status anzeigen print("Taste "+self.Name+": Status anzeigen") self.lastKeypress=datetime.datetime.now() self.gedrueckt=2 #LED einschalten GPIO.output(self.PinLed,True) if (self.gedrueckt==2) and (datetime.datetime.now()-self.lastKeypress>datetime.timedelta(milliseconds=1000)): print("Taste "+self.Name+": EREIGNIS gewertet") Blink(self.PinLed,0.1) self.Status=True GPIO.output(self.PinLed,True) KaninchenLogEintrag(self.Name) #Protokoll schreiben tex=open(pfadDokumente+self.DateinameProtokoll,'a') tex.write('\n'+time.strftime('%d.%m.%Y %H:%M:%S')) tex.close() #Letztes Datum schreiben tex=open(pfadDokumente+self.DateinameStatus,'w') tex.write(time.strftime('%d.%m.%Y %H:%M:%S')) tex.close() self.lastKeypress=datetime.datetime.now()
Über einen Merker wird geprüft, ob die Ereignisse schon eingetreten sind. Ist das nicht der Fall wird eine Erinnerungsmail versendet.
So sieht der Quellcode für die tägliche Fütterung bis spätestens 19:00 Uhr aus. Über Definitionen von Intervalle erfolgt die Prüfung.
#Definitionen Taster=[0,1,2] Taster[0]=EreignisTaster(12,22,"Gefüttert","kaninchen_gefuettert.txt","kaninchen_gefuettert2.txt") Taster[1]=EreignisTaster(16, 9,"Leckerli gegeben","kaninchen_leckerli.txt","kaninchen_leckerli2.txt") Taster[2]=EreignisTaster(20,11,"Saubergemacht","kaninchen_saubergemacht.txt","kaninchen_saubergemacht2.txt") Taster[0].PruefungIntervall="*-15:18" Taster[0].Meldung="Es ist nach 19:00 Uhr und die Kaninchen wurden noch nicht gefüttert." #Für Prüfung wöchentlich, statt *, eine Zahl eingeben #0: Sonntag #1: Montag #... #6: Samstag Taster[2].PruefungIntervall="0-12:00" Taster[2].Meldung="Es ist Sonntag nach 12:00 Uhr und die Kaninchen wurden noch nicht sauber gemacht."
Die eigentliche Prüfung erfolgt hier:
time.sleep(0.2) tick=tick+1 if tick>300: #Jede Minute prüfen, ob Erinnerungen notwendig sind tick=0 s=time.strftime("%Y.%m.%d") #Rücksetzen des Zählers um 23:59 Uhr if s!=signal0h: if time.strftime("%H:%M")=="23:59": signal0h=s for t in Taster: if t.PruefungIntervall!="-": if t.PruefungIntervall[0]=="*": #wenn tägliches Intervall, dann rücksetzen t.Status=False t.PruefungErfolgt="-" print("Rücksetzen täglich:"+t.Name) else: #wenn wöchentlich Intervall, dann erst Prüfung, ob Tag stimmt if time.strftime("%w")==t.PruefungIntervall[0]: t.Status=False t.PruefungErfolgt="-" print("Rücksetzen wöchentlich:"+t.Name) #Prüfen, ob Erinnerung notwendigt ist? for t in Taster: if t.PruefungIntervall!="-": if s!=t.PruefungErfolgt: if ((t.PruefungIntervall[0]=="*") and (time.strftime("%H:%M")==t.PruefungIntervall[2:])) or (time.strftime("%w-%H:%M")==t.PruefungIntervall): #es ist zum ersten Mal die Zeit der Prüfung t.PruefungErfolgt="X" #dadurch wird nicht erneut geprüft if t.Status==False: MailVersenden('Thomas Angielsky <name@deinserver.de>','Hinweis',t.Meldung) print(t.Meldung)
Im Mailprogramm könnte dann das Ergebnis so aussehen:
So weit so gut. Wie gut oder interessant diese Lösung in der Praxis funktioniert hat, erfahren Sie dann später einmal…
Downloads
Das vollständige Python-Programm finden Sie in meiner Dropbox unter kaninchen.py.
Pingback: Raspberry Erweiterungen durch Stecker-Module – Mein Techblog
Pingback: Garagentor-Überwachung und -steuerung – Mein Techblog
Pingback: Raspberry Erweiterungen durch Stecker-Module – Tech+Code
Pingback: Kaninchen, Taster und Lean-Management – tangielskyblog