python skripte automatisch starten lassen nach Uhrzeit

  • Moin moin :)


    zu Beginn einmal: Ich bin wirklich schlecht im Thema programmieren und kenne mich noch so gut wie gar nicht mit python aus...


    Ich habe vor einiger Zeit ein LED matrix display bestellt, alles an meinen Pi 4 b angeschlossen und mir eine Uhr Anzeige programmiert (ehrlich gesagt ausm Internet kopiert). Ich möchte jetzt aber gerne, dass die Datei clock.py automatisch bei einer bestimmten Uhrzeit angeht und dann wieder ausgeht, z.B. zwischen 10 & 22 Uhr.


    Freue mich über jede Antwort :)^^

  • salü Moritz. Das lässt sich mit 2 cronjobs erledigen.


    Suche doch mit der Suchmaschine deines vertrauens mal nach cronjob.

    Falls du weitere Hilfe benötigst einfach wieder melden


    Gruss Dani

  • Suche doch mit der Suchmaschine deines vertrauens mal nach cronjob.

    Und wenn Du keiner Suchmaschine vertraust, oder das Internet kaputt ist, verwende die in Linux eigebaute, und stets aktuell gehaltene Systembeschreibung (aka man.pages) mit z.B. < man 5 crontab >, < man 1 crontab >, < man cron >.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Die python datei startet jetzt zu einer bestimmten Uhrzeit. Ich weiß aber nicht wie ich sie dann zu einer bestimmten Uhrzeit wieder beenden lassen kann.

    • Official Post

    Ich weiß aber nicht wie ich sie dann zu einer bestimmten Uhrzeit wieder beenden lassen kann.

    Indem Du z.B. mit

    Code
    0 10 * * * pkill -f skriptname.py

    um 10 Uhr den Prozess beendest.


    //Edit

    Möglicherweise sind root-Rechte dafür nötig. Nur um das noch erwähnt zu haben.

  • Danke es klappt. Mir ist aber gerade aufgefallen, nicht so wie ich es brauche xD Das Display soll nämlich komplett leer sein. Hier wird die Uhr quasi nur angehalten und steht still...

    Meine Idee ist eine neue Datei zu erstellen, wo das Display einmal komplett gecleart wird und die dann zu starten. Bin mir nur nicht sicher, was in die Datei rein muss

  • Hallo,


    wenn das Python-Programm beendet ist, sollen alle LED's aus sein?


    Kannst du uns dein Programm mal zeigen? Füge es aber bitte mit den richtigen Einrückungen in Code-Tags ein. Das ist der </>-Button.



    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

    • Official Post

    Füge mal ganz unten an das Ende der Datei noch folgende Zeilen ein:

    Python
    finally:
        Uhr.close()
        Uhr.join()


    //Edit: @XMoritz004 Die print-Zeilen habe ich noch raus genommen, die können weggelassen werde.

  • so sehen übrigens meine beiden cronjobs aus

    Code
    10 * * * * pkill -f sillyclock2.py
    40 * * * * python3 /home/pi/Desktop/sillyclock2.py
  • Hallo,


    wenn du die Funktion 'close' ausführst, wieso sollte sich das Display dann leeren? Diese Code-Zeilen fehlen dir und dann klappt das auch. Durch 'Strg+c' beendet sich zwar dein Thread und du setzt mit 'close' zwei Namen auf False, aber mehr nicht. Irgendwo muss in den 'finally'-Block noch eine Funktion ausgeführt werden, die das Display leert.


    Grüße

    Dennis


    Edit: Du verwendest diese Bibliothek ? Dabei hast du 'max7219' importiert. Wenn du dir den Quellcode anschaust, kannst du eine Funktion 'hide' erkennen, die hat folgenden Inhalt:

    Code
        def hide(self):
            """
            Switches the display mode OFF, putting the device in low-power
            sleep mode.
            """
            self.data([self._const.SHUTDOWN, 0] * self.cascaded)

    Willst du, dass das Display ausgeschaltet wird? Dann würde ich mal versuchen diese Funktion aufzurufen. Dazu änderst du dein Code-Ende so ab:


    Code
        except KeyboardInterrupt:
            print("Die Uhr wird ausgeschalten")
        finally:    
            Uhr.close()
            Uhr.join()
            max7219.hide()

    Dann kannst du das ganze mal bitte testen, wenn du deinen Code manuell, ohne Cronjob, startest und ihn wieder mit Strg+c abbrichst.


    Wie es in deinem anderen Thema schon von hyle steht:


    Dann wäre 0 10 * * * pkill -SIGINT -f skriptname.py besser geeignet

    Ohne '-SIGINT' wird dein 'finally' nicht abgearbeitet.

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

    Edited once, last by Dennis89 ().