while-Schleife endet nicht

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    ich möchte für eine Temperatur/Feuchtigkeitsregelung mit unterschiedlichen Sollwerten für den Tag und die Nacht aufbauen.

    Der Grundaufbau funktioniert soweit, jetzt übe ich mich mit der zeitlichen Steuerung. Der nachfolgende Code läuft, aber die while-Schleife

    bricht nicht ab, wenn die Zeit außerhalb der beiden Schaltpunkte ist. Starte ich das Script außerhalb der Zeit, wird die Schleife richtigerweise

    übergangen. Kann es daran liegen, dass die Abfrage mit immer dem gleichen "alten" Zeitwert durchgeführt wird, der zu Beginn des Skripts eingelesen wird?

    Hatte den notwendigen Befehl dazu mal in die Schleife verlagert, das brachte aber auch nicht.

    Jemand ne Idee zur Hilfe für mich?

  • Hallo,

    Zitat

    Kann es daran liegen, dass die Abfrage mit immer dem gleichen "alten" Zeitwert durchgeführt wird, der zu Beginn des Skripts eingelesen wird?

    So isses. Du musst `zeit`innerhalb der Schleife aktualiseren, sonst klappt das nicht.

    Die Klammer um die Variablen nach dem `if` sind überflüssig.

    Welchen Sinn hat das `time.sleep(10)`am Ende vom Skript?

    Hast du irgendwelche spezifischen Gründe, Python 2.7 statt Python 3 zu nehmen?

    Gruß, noisefloor

    • Offizieller Beitrag

    Gibt es einen grund warum "Irgendwas" in Bash gemacht wird? Es sieht so aus als wenn dort GPIOs geschalten werden, das kann man dann auch direkt in Python abarbeiten

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Hallo zusammen,

    Python 2 nutze ich, weil ich hiermit meine ersten Gehversuche durchgeführt habe bzw. die ersten Skripte mit denen ich in Berührung kam in Python 2 programmiert waren. Ist es einfacher in Python 3?

    In den Bash-Skripten schalte ich eine 433 Mhz Steckdose. Das ist nur zurzeit so realisiert, weil ich mit Bash aktuell noch besser klar komme als mit Python.
    Wird aber noch geändert.

    Aktuell habe ich jetzt mal mit datetime experimentiert, bekomme aber noch eine Fehlermeldung:

    Traceback (most recent call last): File "regelung2.py", line 23, in <module> now = datetime.datetime.now AttributeError: type object 'datetime.datetime' has no attribute 'datetime'

    Danke für eure Hilfe!

  • Ok, dann werde ich mich als nächstes mal mit Python 3 beschäftigen.

    Hab jetzt "import datetime" und bekommen den Fehler:

    Traceback (most recent call last): File "regelung2.py", line 25, in <module> if schaltzeit1 <= now <= schaltzeit2: TypeError: can't compare datetime.datetime to str

  • Python
    schaltzeit1 = datetime.datetime.now()
    schaltzeit1.replace(hour=17, minute=0, second=0, microsecond=0)

    So bekommst du den aktuellen Tag (inkl jahr und monat) und überschreibst dann die gewünschte Uhrzeit

    datetime.replace

    Ebenso könntest du dir Datetimeobjekte so erstellen:

    Python
    datum = datetime.datetime(year=2018, month=11, day=20, hour=20)

    datetime

  • Ok, jetzt lässt sich das if nicht mehr erfüllen:

  • Irgendeine Fehlermeldung?

    Bei mir funktioniert es

    Code
    import datetime
    
    schaltzeit1 = datetime.datetime.now()
    schaltzeit1.replace(hour=6, minute=0, second=0, microsecond=0)
    schaltzeit2 = datetime.datetime.now()
    schaltzeit2.replace(hour=22, minute=0, second=0, microsecond=0)
    
    now = datetime.datetime.now()
    if schaltzeit1 <= now <= schaltzeit2:    
        print("if-Block")

    Ausgabe:

    Code
    if-Block
    
    Process finished with exit code 0

    EDIT: Stimmt die Uhrzeit vom System?

  • EDIT: Keine Fehlermeldung!

    Da mir schon aufgefallen ist, dass du nicht den ganzen Code gezeigt hast, try/except verwendest du nicht irgendwo?

    Was ich auch gerade noch sehe...du verwendest Python2.x, ich verwende Python3.x vll liegts an dem;) << Linus ? Möglichkeit?

    https://pythonclock.org/

  • du verwendest Python2.x, ich verwende Python3.x

    war auch mein Gedanke aber da ich von Python keine Ahnung habe :lol:

    Die Schleife sah aber gut aus

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Der ganze Code ist ja weiter oben zu sehen. Ich habe nur die IF-Anweisung bzw. die Definition der Schaltzeiten geändert.

    Was mich stutzig macht ist, dass ich deinen kürzeren Code zum check der IF-Anweisung übernommen habe und dieser läuft auch durch bzw.

    bringt nicht die Ausgabe "if-Block"! Habe jetzt versuchsweise ein #!/usr/bin/env python3 davor gesetzt (habe auch Python 3.5.3 installiert), aber

    trotzdem funktioniert auch dein Code nicht bei mir!

    EDIT:

    Dieser Code läuft bei mir ohne Meldung durch:

Jetzt mitmachen!

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