Seite 1 von 2

Cocktailmaschine Bartender.py Problem

Verfasst: Donnerstag 24. Oktober 2024, 21:22
von Tim_Raspberry Pi
Hallo , ich programmiere gerade einen Cocktailmaschine nach dem ich alles eingerichtet habe , wurde der Code aus dem Internet heruntergeladen .
Ich wollte ihn mit dem hier drunter stehen ,, sudo Python bartender.py starten , leider kam der folgende Fehler , habt ihr eventuell eine Idee ? ´´home/azubi29/Downloads/bartender.py´´, line 123
def readPumpConfiguration():
IndentationError: unindent does not match any outer indentation level

Unter folgenden Link ist die Bartender.py zu finden . Vielleicht kann mir ja wer behilflich sein

https://github.com/Pazekal90/Smart-Bart ... rtender.py

Gruß Tim

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 25. Oktober 2024, 08:39
von sparrow
Die Namensgebung lässt vermuten, dass die bartender.py nicht von jemanden geschrieben wurde, der regelmäßig Python entwickelt.

Die Fehlermeldung sagt: Irgendwo stimmt etwas mit der Einrückung nicht, was dem Parser in Zeile 123 auffällt.
Entweder ist die Zeile (oder eine Zeile auf dem Weg dorthin) falsch eingerückt.

Der Autor der Datei rückt mit Tabs ein, nicht mit Leerzeichen, wie es eigentlich Konvention ist.
Und Zeile 75 fällt augenscheinlich völlig aus dem Rahmen.

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 25. Oktober 2024, 08:43
von DeaD_EyE
Zeile 68 hat die falsche Einrückung. Es werden Tabs verwendet. Es sollten aber 4 Leerzeichen verwendet werden.

Code: Alles auswählen

PS C:\Users\XXX\Downloads> py -3.13 -m ruff check .\bartender.py
bartender.py:68:1: SyntaxError: unindent does not match any outer indentation level
   |
67 |         # configure interrups for buttons
68 |         GPIO.setup(self.btn1Pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
   | ^^^^
69 |         GPIO.setup(self.btn2Pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
   |

bartender.py:118:9: SyntaxError: Simple statements must be separated by newlines or semicolons
    |
116 |         self.strip.show()
117 |
118 |         print "Done initializing"
    |               ^
119 |
120 |     @staticmethod
    |

bartender.py:255:16: E703 Statement ends with an unnecessary semicolon
    |
254 |         # sleep for a couple seconds to make sure the interrupts don't get triggered
255 |         time.sleep(2);
    |                      ^ E703
256 |
257 |     def shutdown(self):
    |
    = help: Remove unnecessary semicolon

bartender.py:270:16: E703 Statement ends with an unnecessary semicolon
    |
268 |         self.led.image(self.image)
269 |         self.led.display()
270 |         time.sleep(5);
    |                      ^ E703
271 |
272 |         #Clean shutdown device
    |
    = help: Remove unnecessary semicolon

bartender.py:277:9: SyntaxError: Simple statements must be separated by newlines or semicolons
    |
276 |     def displayMenuItem(self, menuItem):
277 |         print menuItem.name
    |               ^
278 |         self.led.clear()
279 |         self.draw.rectangle((0,0,self.screen_width,self.screen_height), outline=0, fill=0)
    |

bartender.py:306:19: E701 Multiple statements on one line (colon)
    |
304 |                 head    = 0              # Reset to start
305 |                 color >>= 8              # Red->green->blue->black
306 |                 if(color == 0): color = 0xFF0000 # If black, reset to red
    |                               ^ E701
307 |
308 |             tail += 1                        # Advance tail position
    |

bartender.py:309:30: E701 Multiple statements on one line (colon)
    |
308 |             tail += 1                        # Advance tail position
309 |             if(tail >= self.numpixels): tail = 0  # Off end? Reset
    |                                       ^ E701
310 |
311 |     def lightsEndingSequence(self):
    |

bartender.py:382:16: E703 Statement ends with an unnecessary semicolon
    |
381 |         # sleep for a couple seconds to make sure the interrupts don't get triggered
382 |         time.sleep(2);
    |                      ^ E703
383 |
384 |         # reenable interrupts
    |
    = help: Remove unnecessary semicolon

Found 8 errors.

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 25. Oktober 2024, 10:35
von Sirius3
@Tim_Raspberry Pi: die von Dir verlinkte Datei läßt sich ohne Probleme starten. Die von dir angegeben Zeile 123 ist eine Leerzeile, Du hast die Datei also irgendwie modifiziert. Benutzt Du auch Python 2.7?
@sparrow: bei Kommentaren ist die Einrückung egal
@DeaD_EyE: es handelt sich um ein Python2-Programm, dort sind die Tab-Space-Regeln noch freier.

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 25. Oktober 2024, 13:24
von __blackjack__
An der statischen Analyse in DeaD_EyeEs Beitrag sieht man an den Semikolons die Vermutung bestätigt, dass das kein Python-Programmierer geschrieben hat. Und wenn man dann rein schaut die ganzen unnötigen Klammern bei ``if`` & Co, oder wie über Schlüssel iteriert wird um in der Schleife dann über den Schlüssel auf die Werte zuzugreifen, statt gleich über die Werte zu iterieren, oder Schlüssel/Wert-Paare wenn man beides braucht.

Die Objektorientierung lässt auch zu wünschen übrig mit den ganzen Schleifen, die immer wieder ähnlich über eine verschachtelte Wörterbuchstruktur iterieren oder die Indirektion über Zeichenketten die einen ”Typ” repräsentiert, wo dann per ``if``/``elif``-Kaskade herausgefunden wird was anhand dieses Typs für Verhalten folgen soll, statt dass das Objekt von dem man diese Zeichenkette abgefragt hat, das Verhalten kennt/implementiert. Und das mindestens in zwei verschiedenen Funktionen.

Oder dieses ”Schmuckstück”, das es noch mal mit leicht anderen Namen gibt:

Code: Alles auswählen

    TextNew = ''
    for ii in words_list[:-1]:
        TextNew = TextNew + ii + "\n"
    TextNew += words_list[-1]
`self.running` kann `True` oder `False` sein, und es kann den Wert 2 annehmen — WTF‽ Aber klar, das macht natürlich Sinn wenn man dann folgenden Code findet:

Code: Alles auswählen

                    if self.running not in (True,False):
                        self.running -= 0.1
                        if self.running == 0:
                            self.running = False
Ich nehme mal an dem Autor war nicht klar, dass man aus der Nummer nicht mehr raus kommt wenn das mal 2 angenommen hat, weil das dann auf dem Weg nach unten weder 1 (True) noch 0 (False) treffen wird, weil Gleitkommazahlen und (Un)genauigkeit:

Code: Alles auswählen

In [2]: 2 - 0.1
Out[2]: 1.9

In [3]: _ - 0.1
Out[3]: 1.7999999999999998

In [4]: _ - 0.1
Out[4]: 1.6999999999999997

In [5]: _ - 0.1
Out[5]: 1.5999999999999996

In [6]: _ - 0.1
Out[6]: 1.4999999999999996

In [7]: _ - 0.1
Out[7]: 1.3999999999999995

In [8]: _ - 0.1
Out[8]: 1.2999999999999994

In [9]: _ - 0.1
Out[9]: 1.1999999999999993

In [10]: _ - 0.1
Out[10]: 1.0999999999999992

In [11]: _ - 0.1  # Wird leider nicht 1.
Out[11]: 0.9999999999999992

In [12]: _ - 0.1
Out[12]: 0.8999999999999992

In [13]: _ - 0.1
Out[13]: 0.7999999999999993

In [14]: _ - 0.1
Out[14]: 0.6999999999999993

In [15]: _ - 0.1
Out[15]: 0.5999999999999993

In [16]: _ - 0.1
Out[16]: 0.49999999999999933

In [17]: _ - 0.1
Out[17]: 0.39999999999999936

In [18]: _ - 0.1
Out[18]: 0.2999999999999994

In [19]: _ - 0.1
Out[19]: 0.19999999999999937

In [20]: _ - 0.1
Out[20]: 0.09999999999999937

In [21]: _ - 0.1  # Und auch 0 treffen wir hier nicht.
Out[21]: -6.38378239159465e-16

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Dienstag 29. Oktober 2024, 10:10
von Kebap
Tim_Raspberry Pi hat geschrieben: Donnerstag 24. Oktober 2024, 21:22 Hallo , ich programmiere gerade einen Cocktailmaschine nach dem ich alles eingerichtet habe , wurde der Code aus dem Internet heruntergeladen .
Hallo Tim, zeigst du uns auch, was du programmiert hast? :mrgreen:

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 15. November 2024, 08:46
von Tim_Raspberry Pi
Hi , danke für die ganze Hilfe . Das Programm habe ich alles heruntergeladen, auf den raspberry pi gespeichert. Mit dem einrückfehler habe ich herausgefunden nun habe ich ein ELFClass Fehler 32 . Liegt das an der Architektur des raspberrys da dieser ja 64 Bit hat ? Und das ja ein 32 Bit Fehler ist ? Was kann ich tuen das der Fehler verschwindet ?
Gruß Tim

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 15. November 2024, 08:52
von __blackjack__
@Tim_Raspberry Pi: Am besten einen anderen Quelltext als Basis nehmen, oder Python (3!) lernen und selbst ein Programm entwickeln. 🙂

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 15. November 2024, 10:42
von Tim_Raspberry Pi
Ja, hoffe einfach das es klappt jetzt . Die Zeit habe ich leider nicht mehr ich muss in 2 Wochen meine Prüfung abgeben 😅

Was kann ich dagegen tuen das es läuft .
Gruß

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 15. November 2024, 10:47
von Tim_Raspberry Pi
@sirius3 In der Anleitung die ich verlinkte hatte steht das es Python 3 ist , da habe ich mich drauf verlassen .
Aber leider sind ja ein paar Fehler drin

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 15. November 2024, 11:08
von Tim_Raspberry Pi
Wie bekomme ich sonst Python 2.7 auf den raspberry ? Oder könnte dir mir wer umschreiben ? Natürlich gegen einen Obolus wenn alles nicht mehr hilft 😅
Gruß Tim

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 15. November 2024, 11:24
von __blackjack__
@Tim_Raspberry Pi: Du brauchst nichts dagegen tun das es läuft — es läuft ja nicht. 😈

Hier sind die Änderungen zum Originalprojekt: https://github.com/Joe2824/Smart-Barten ... der:master — da ist ausser der Behauptung in der Readme, dass es mit Python 3 läuft, nichts gemacht worden, dass es auch tatsächlich mit Python 3 läuft.

Der Quelltext ist 6 Jahre alt, für Python 2.7 geschrieben, hat eine binäre Bibliothek für ARM 32 ohne Quelltext im Repository, und sieht auch nicht nach gutem, idiomatischem Python-Quelltext aus. Das ist einfach keine sinnvolle Basis für ein aktuelles Projekt.

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 15. November 2024, 11:29
von Tim_Raspberry Pi
Gut , was können wir machen das es läuft ?
Gruß Tim 😅

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 15. November 2024, 11:49
von __blackjack__
Nichts sinnvolles. 🤷‍♂️

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 15. November 2024, 11:54
von Sirius3
Du kannst Dir Hardware von vor 10 Jahren besorgen, einen Raspberry PI2 Model B1 mit ARM-Cortex A7 Prozessor. Darauf ein aus dieser Zeit stammendes Image draufspielen und hoffen, dass Du damit das Programm ans Laufen bringst.

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 15. November 2024, 12:00
von Tim_Raspberry Pi
Aber warum funktioniert es bei denen in der Software ? Mit was hängt das zusammen ?

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 15. November 2024, 12:26
von __blackjack__
@Tim_Raspberry Pi: Bei wem funktioniert was? Das ist Python 2.7 Code mit einer kompilierten ARM 32 Bibliothek. Das ganze ist 6 Jahre alt und wurde für einen Raspi 3 geschrieben. Wenn das ohne Änderungen läuft, dann auf einem entsprechend alten System mit Python 2.7.

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Freitag 15. November 2024, 13:03
von Tim_Raspberry Pi
Es hatte doch wer geschrieben hier in dem Beitrag das es problemlos läuft der Code . Was bräuchte ich für einen raspberry für Python 2.7 ?
Gruß Tim

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Samstag 16. November 2024, 16:58
von Dennis89
Hallo,

hast du die Antwort von @Sirius3 gelesen?

Grüße
Dennis

Re: Cocktailmaschine Bartender.py Problem

Verfasst: Sonntag 17. November 2024, 07:45
von Tim_Raspberry Pi
Hallo , ja mit dem raspberry 1 . Meint ihr es würde auch gehen auf einen raspberry 3 b + Python 2.7 aufzuspielen ? Oder würde das nicht funktionieren?
Gruß Tim