Tracebackfehler, kann jemand helfen?

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!
  • 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

  • So können wir dir leider nicht helfen, kopiere den bitte noch einmal, und zwar in einem Codeblock, damit die Einrückung beibehalten wird. Und packe den Stacktrace am besten auch in einen Codeblock.


    Aber was man schonmal sagen kann, dass wahrscheinlich in Zeile 32 was mit der Einrückung falsch ist

  • 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:

    „Eat the rich — the poor are full of preservatives.“ — Rebecca ”Becky” Connor, The Connors

  • 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.

    „Eat the rich — the poor are full of preservatives.“ — Rebecca ”Becky” Connor, The Connors

  • Ungetestet:

    „Eat the rich — the poor are full of preservatives.“ — Rebecca ”Becky” Connor, The Connors

  • 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