Zeitsteuerung per Python

  • Hallo, ich möchte mittels Raspberry und Python Lüfter steuern.
    Die an aus Intervalle funktionieren, jetzt möchte ich jedoch noch eine Auszeit der Lüfter in den Skript vorsehen.
    Nachfolgend findet ihr meinen Code, ich habe die Lüfteransteuerungen aufgrund der Fehlersuche durch print Befehle erstetzt.


    Ich gebe initial ein Startzeit und eine Endzeit für die Auszeit vor, in einer For -Schleife frage ich dieses Zeitfenster mittels einer If-Bedingung
    ab. Bei meiner Fehlersuche konnte ich feststellen, dass die If-Bedingung nicht berücksichtigt wird. Entferne ich z.B einen Teil der If-Bedinfung
    also folgendermaßen

    Code
    1. elif (std >= start):


    dann wird die Bedingung berücksichtigt.
    Ich habe noch nicht viel Erfahrung mit Python bzw. Programmieren und komme irgendwie nicht weiter. Hätte vielleicht jemand einen Tip?

  • Du vergleichst Aepfel mit Birnen, bzw. Strings mit Zahlen. Und deine Darstellung einer Tageszeit als Fliesskommazahl, bei welcher der Nachkommaanteil die Minuten darstellt ist ungewoehnlich, und hinderlich.


    Ich empfehle fuer Zeitberechnungen die nicht einfach nur verflossenen Zeit messen sollen das datetime-Modul. Darin findest du Moeglichkeiten sowohl Zeitpunkte als auch Zeitdifferenzen darzustellen - mit den Klassen datetime und timedelta.

  • Hi, danke für das Feedback.


    Kannst du mir sagen, wo ich Strings und Zahlen vergleiche?
    Habe noch mal nachgeschaut, ich habe leider nichts gefunden.


    Die Darstellung der Zeit als Fliesskommazahl ergibt sich aus meinem begrenzten Horizont mit Python, wie eingangs geschrieben.
    Demnach für mich zuerst mal die sinnvollste Lösung. Ich werde mir das datetime-Modul anschauen und versuchen es zu verwenden.
    Ich möchte jedoch die jetzige Version zum Laufen bekommen bzw. verstehen warum sie es nicht tut?

  • Hallo,


    Quote

    Kannst du mir sagen, wo ich Strings und Zahlen vergleiche?


    In dem du einen von beiden in explizit in den Typ des anderen umwandelst. Die Funktionen gehören zu den Build-Ins von Python und heißen `str()`, int()` und `float()`.


    Quote

    Demnach für mich zuerst mal die sinnvollste Lösung.


    Sinnvoll ist das nie. Warum, hat __deets__ ja schon erklärt. Von daher solltest es erst gar nicht versuchen zu fixen (weil das nur ein schlechter Würg-Around wäre), sondern direkt richtig und sauber machen.


    Gruß, noisefloor

  • String: std = time.strftime("%H.%M")*
    Zahl: start = 14.15*
    Vergleich Apfel und Birne: elif (std >= start) and (std <= ende)*


    Gruß Lunepi


    *Ohne Ahnung von python zu haben

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

  • So saehe ein Vergleich unter Verwendung von datetime aus:


  • Danke für die Hinweise!!
    Ich habe es jetzt mit datetime umgesetzt und es läuft.
    Nachfolgend der Code, wenn jemand mal was ähnliches machen will.



    Bei dieser Lösung wird es jedoch Probleme geben, falls die Endzeit kleiner ist als die Startzeit. Dies ist der Fall, wenn die Auszeit 0 Uhr
    überschreitet.
    Dies kann mit folgender Bedingung (von http://stackoverflow.com/) gelöst werden, ist jedoch bei meiner Anwendung nicht erforderlich.

    Code
    1. if startTime < endTime:
    2.        return nowTime >= startTime and nowTime <= endTime
    3.    else: #Over midnight
    4.        return nowTime >= startTime or nowTime <= endTime