Probleme mit Datetime

  • Hallo,


    vielleicht hatte auch schon mal jemand folgendes Problem und kann mir zu einer Lösung helfen.

    Ich habe in Python ein script mit dem ich einen das Licht über einen Schalter steuere(Türkontakt).

    Ich dem Script habe ich eine Pause je nach Monat und Uhrzeit, so das z. B. im Sommer das Licht am Tag nicht angeht.

    Es funktioniert auch alles so wie ich es mir vorstelle bis auf das eine.

    Am Ende des Monats, so die letzten 4-5 Tage funktioniert die Steuerung nicht mehr und wenn ich es mal laufen lasse und kontrolliere, dann kommt der Fehler "Day is out of range"

    Ich verwende in einem anderen script Datetime auch noch um die Uhrzeit und das Datum anzuzeigen und das stimmt alles.

    Woran kann es liegen?:danke_ATDE:

  • Was fuer ein haessliches Script!


    Eine List mit Dictionaries wuerde den Code auf einen Viertel reduzieren und erst noch klarer machen...


    > dann kommt der Fehler "Day is out of range"

    Wahrscheinlich weil es im Februar keinen Tag gibt ueber 28

  • Am Ende des Monats, so die letzten 4-5 Tage funktioniert die Steuerung nicht mehr und wenn ich es mal laufen lasse und kontrolliere, dann kommt der Fehler "Day is out of range"

    Hast du die Tracebacks auch noch vorliegen? (Fehlermeldungen)

    Dort wär nämlich auch eine Zeilenangabe enthalten wo der Fehler auftritt...



    Am Ende des Monats, so die letzten 4-5 Tage funktioniert

    Ja ab dem 29. bekommst du Probleme, weil der Februar nur 28/29 Tage hat.

    Bei replace veränderst du aber im Moment die Tage nicht, somit bekommst du immer Probleme wenn der aktuelle Kalendertag mehr Tage hat wie das minumum von den Monaten ->

    Februar macht ab dem 29. Probleme

    ab dem 31. machen auch alle anderen Monate Probleme die nur 30 Tage haben.


    Weiteres:

    • Zeile 198 brauchst du nicht,
    • Variablennamen werden klein_und_mit_bindestrich geschreiben, ebenso Funktionen.
    • RT ist keine Konstante, somit klein schreiben
    • # ohne Kommentare sind verwirrend und unübersichtlich
    • Ebenso lassen sich deine if und elif verkürzt darstellen, Beispiel Zeile 123:
      if AnfangszeitJa < RT < EndzeitJa:
  • Danke Hofei für die Tips. Kann ich die Tage mit replace denn auch noch so anpassen, daß es klappt, oder geht das nicht damit?

  • Zur Berechnung des Sonnenauf- und -Unterganges musst Du das Rad nicht neu erfinden. Dafür gibt es Bibliotheken und Scripte in fast jeder Programmiersprache. Wenn Du mit Sonnenaufgang, oder "Sunrise Python" danach suchst., eben speziell für Python.



    Servus !

    Wer nichts weiß, muss alles glauben.

  • leider ist es in dem Bereich sehr dunkel, auch wenn die Sonne schon aufgegangen ist. Gerade brauche ich das Licht z. B. bis 8 Uhr am morgen. Daher habe ich es auch mit er Uhrzeit, die ich selbst eingeben kann gelöst. Danke aber für den Tip, ist sehr interessant.

  • Und wenn man es doch selber bestimmen will, kann man auch mit Offsets arbeiten für jeden Tag oder Woche im Jahr. Vermutlich mit einem Array anzulegen. Dadurch wird das Skript auch deutlich kürzer und sogar genauer wie das Jetzige. Aber wenn es schon was fertiges für die Berechnung gibt, würde ich auch das benutzen.


    Oder mit einem Lichtsensor das ganze obsolet machen. :)

  • Kann ich die Tage mit replace denn auch noch so anpassen, daß es klappt, oder geht das nicht damit?

    Ja. Du könntest z.B die Tage immer auf 1 setzen -> AnfangszeitJa = RT.replace(month=1, day=1, hour=AHJA, minute=AMJA)

    näheres hier: https://docs.python.org/3.6/li…ime.html#datetime-objects


    wenn auch ich nicht mit der Art und Weise einverstanden bin, wie es vermittelt wurde, so geb ich Tell inhaltlich recht. Ja dein vorhaben ist auch auf "einfachere" und kürzere Weise lösbar. (einfacher immer natürlich abhängig vom Wissensstand von Python und allg. Programmierung)

    So wär mal mein Ansatz vermischt mit deinem, hab es aber leider nicht testen können! (Könnte also noch Fehler beinhalten)


    Vorallem bei Zeile 106 bin ich mir nicht sicher ob das so klappt oder nicht

  • Hallo,


    mal so als Idee / Insperation für kürzer & eleganter:


    Gruß, noisefloor