Tracebackfehler, kann jemand helfen?

  • Hallo,

    ich hab mir letztes Jahr ein Phytonprogramm zur Steuerung der Gartenbewässerung geschrieben.

    Leider mach ich seit dem nichts mehr mit Phyton.

    Jetzt habe ich aber folgendes Problem:

    Ich bekomme bei Start mit Thonny folfgende Fehler angezeigt:

    Python 3.9.2 (/usr/bin/python3)

    >>> %Run gartenbewaesserung_final.py

    Traceback (most recent call last):

    File "/usr/lib/python3.9/ast.py", line 50, in parse

    return compile(source, filename, mode, flags,

    File "/home/pi/Gartenbewässerung/gartenbewaesserung_final.py", line 32

    schedule.every().day.at("08:00").do(bewaessern_an, REL_5)

    ^

    IndentationError: unindent does not match any outer indentation level

    Hier das Phytonfile:

    #!/usr/bin/env python3

    from gpiozero import LED

    from time import sleep

    import schedule

    import time

    def bewaessern_an(relais):

    relais.on()

    def bewaessern_aus(relais):

    relais.off()

    def main():

    REL_1=LED(12) # Rasenbewässerung 1, beim Wintergarten/Rasenmäher

    REL_2=LED(13) # Rasenbewässerung 2, beim Bambus/Rosen

    REL_5=LED(21) # Bewässerung 3, Einfahrt

    # schedule.every().day.at("22:00").do(bewaessern_an, REL_1)

    # schedule.every().day.at("22:05").do(bewaessern_aus, REL_1)

    # schedule.every().day.at("22:30").do(bewaessern_an, REL_2)

    # schedule.every().day.at("22:35").do(bewaessern_aus, REL_2)

    # schedule.every().day.at("03:00").do(bewaessern_an, REL_1)

    # schedule.every().day.at("03:05").do(bewaessern_aus, REL_1)

    # schedule.every().day.at("03:30").do(bewaessern_an, REL_2)

    # schedule.every().day.at("03:35").do(bewaessern_aus, REL_2)

    # schedule.every().day.at("04:00").do(bewaessern_an, REL_1)

    # schedule.every().day.at("04:05").do(bewaessern_aus, REL_1)

    # schedule.every().day.at("04:30").do(bewaessern_an, REL_2)

    # schedule.every().day.at("04:35").do(bewaessern_aus, REL_2)

    schedule.every().day.at("08:00").do(bewaessern_an, REL_5)

    schedule.every().day.at("08:05").do(bewaessern_aus, REL_5)

    schedule.every().day.at("10:00").do(bewaessern_an, REL_5)

    schedule.every().day.at("10:05").do(bewaessern_aus, REL_5)

    schedule.every().day.at("12:00").do(bewaessern_an, REL_5)

    schedule.every().day.at("12:05").do(bewaessern_aus, REL_5)

    schedule.every().day.at("14:00").do(bewaessern_an, REL_5)

    schedule.every().day.at("14:05").do(bewaessern_aus, REL_5)

    schedule.every().day.at("18:00").do(bewaessern_an, REL_5)

    schedule.every().day.at("18:05").do(bewaessern_aus, REL_5)

    schedule.every().day.at("22:00").do(bewaessern_an, REL_5)

    schedule.every().day.at("22:05").do(bewaessern_aus, REL_5)

    while True:

    schedule.run_pending()

    time.sleep(1)

    if __name__ == "__main__":

    main()

    Hat jemand eine Ahnung wo's hängt?

    LG

    Andreas

  • Hast du die Fehlermeldung überhaupt gelesen? Da steht doch Eindrückungsfehler in Zeile 32.

    File "/home/pi/Gartenbewässerung/gartenbewaesserung_final.py", line 32

    schedule.every().day.at("08:00").do(bewaessern_an, REL_5)

    ^

    IndentationError: unindent does not match any outer indentation level


    Die Zeile und vermutlich alle folgenden sind wohl falsch eingerückt.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Ich hab mal das LED  durch DigitalOutputDevice geändert und deinen Variablen neue Namen verpasst.

  • Wahrscheinlich hast du beim Bearbeiten die Einrückung falsch gemacht.

    Das Problem, dass ich aus 10 Meter Entfernung sehe, ist die Wiederholung von schedule.every().day.at(....).do(..., ...).

    Das macht eine nachträgliche Änderung unheimlich nervig, da man immer wieder das Gleiche wiederholen muss und Copy&Paste ist keine Lösung.

    Hier eine verbesserte Variante, wo das nachträgliche Bearbeiten nicht ganz so schiefgehen kann.

    Eine weitere Verbesserung wäre es, wenn man Aufgaben mit Startzeit, Dauer, Einschalt-Funktion und Ausschaltfunktion erstellt.

    Das würde die Liste um die Hälfte reduzieren. Ich will es aber nicht komplizierter machen, als e schon ist.

  • Wenn es ein Problem ist, dass (!!!) du aus 10 m Entfernung siehst, dann setz dich doch näher an den Bildschirm! ;)

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Wobei man Funktion und Ort noch leicht zusammenfassen kann, denn die beiden Funktionen machen ja nicht wirklich etwas ausser `on()`/`off()` aufzurufen:

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Und ich würde zudem auch nach Orten, statt nach Zeit sortieren (wenn nicht sogar für jeden Ort einen eigene Zeitliste erstellen). So wäre es für mich zumindest übersichtlicher und vor allem kann man ohne groß suchen zu müssen, einen Ort raus nehmen oder einen neuen Ort hizufügen.

  • Wenn ich das richtig sehe sind das auch immer on/off-Paare die genau 5 Minuten auseinander liegen. Das heisst eigentlich bräuchte man auch nur die Hälfte der Information in der Liste, weil man aus den on-Zeiten die off-Zeiten berechnen kann.

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Ungetestet:

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Ich will ja nicht meckern, aber bin ein bissel hin- und hergerissen. Einerseits finde ich es echt großartig (!!!), was in diesem Thread aus einem simplen Einrückungsfehler entstanden/gewachsen ist, aber andererseits bin ich nicht sicher ob ihr nicht viel zu gutmütig für diese (digitale) Welt seid! ^^

    SCNR!

  • Vielen Dank für die großartige Unterstützung.

    Wie geschrieben, hab ich das Programm letztes Jahr mit sehr viel externer Hilfe geschrieben.

    Was der Fehlercode bedeutet, hat sich mir leider nicht erschlossen - egal wie nah oder fern ich vorm Monitor gesessen bin.

    Aber ja, es war der Einrückungsfehler, der kam dadurch zustande, da ich im Winter die Rasenbewässerung (REL 1 und REL 2) mit "#"deaktiviert habe.

    Beim löschen von "#" kams dann wohl zu dem Einrückungsfehler.

    Falls es da jemand gibt, der mir helfen kann und mag, ich hätte da eigentlich noch einiges zu verbessern an dem Programm.

    Am Pi4 ist noch ein kapazitiver Feuchtigkeitsmesser angeschlossen und im Garten verbuddelt, der eigentlich mit integriert werden sollte - so nach dem Motto, ist der Rasen zu feucht, braucht nicht gesprengt werden und ein Außentemperaturmesser ist auch angeschlossen, quasi als Frostmelder, ab wann sich die Bewässerung durch das öffnen der Ventile entleeren soll.

    Die Werte des Feuchtigkeitssensors, sowie die Temperatur kann ich aus seperaten Programm schon auslesen, es hapert halt an den Verknüpfungen ....

    SG

    Andreas

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!