Zeitgesteuerter Ablauf

Ein neuer Artikel wurde veröffentlicht
  • Hallo liebe Forenmitglieder,


    ich bin mal wieder kurz vorm verzweifeln :).


    Ich suche eine Lösung um in einem bestegenden Script in einer while Schleife einen Gpio zeitlich zu steuern. Ich möchte einfach das jeden Tag um z.B. 11 Uhr der Gpio 23 auf High wechselt und um 11:10 wieder auf low .


    Leider finde ich da keine Lösung im Netz und in meinen Einsteigerbüchern erst recht nicht. Hoffe ihr könnt mir helfen.


    Meine Idee:


    2 Definitionen ( Gpio an, Gpio aus)


    und eine If Abfrage in der While Schleife.


    Ich würde mich über konstruktive Ideen freuen.


    Gruß Jan
         

  • Dann halt die While und jede Sekunde prüfen, ob die gewünschte Uhrzeit erreicht ist. Dann die Aktionen definieren, fertig. Zur passenden Uhrzeit dann ausführen. Wo ist das Problem?

    Ich hätte da jetzt auch nen Cronjob genommen :conf:

  • linusg : genau so wie du es meinst habe ich das vor. Ich bin nur Anfänger im Programmieren. Das aberiten mit (ich tippe mal auf) datetime habe ich bisher noch nicht gemacht. Das ist noch Neuland. So trivial es sich für euch Profis anhört ist es für mich nicht.


    die def soll auch nur einmal um genau 11:00:00 ausgeführt werden um andere aktionen nicht auszubremsen. die Aktionen dafür kriege ich hin. Nur kriege ich den Code für die if anweisung nicht hin. Gemeint ist: Wenn 11:00:00 dann....

    Ich werf jetzt mal einfach was in den raum und hoffe auf Korrektur:


    if datetime.datetime.now()

    .hour.minute.second == 11:00:00:

    Aktionen

  • https://de.lmgtfy.com/?q=pytho…unction+at+a+certain+time

    Da sind diverse Beispiele dabei... Ist wirklich kein Hexenwerk. Nur die Basics musst du dir selbst beibringen. Noch besser als eine while Schleife ist wahrscheinlich das sched Modul.

  • Oder...crontab. Wer es nicht hinkriegt die zu ändern soll später:


    1. das script stoppen

    2. das script im editor öffnen

    3. die codestelle finden, ändern u. speichern

    4. das script starten


    Das ist der eindeutig leichtere Weg :shy:

  • Also bei mir funktioniert es so um etwas ei n und aus zuschalten.

    Den I/O wirst du ja wohl selber einfügen können.


  • Danke der Code ist verständlich.

    ...und grausam. Bitte nicht merken.

  • Hallo JanR,

    hier ein Beispiel, das an Kürze nicht zu überbieten ist - mit Hilfe meines Pseudo-Code-Compilers aber lauffähig ist.


    Eine komplexere Anwendung geistert hier auch irgendwo rum.



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo,


    zum Code in #12:


    • Eingerückt wird immer mit genau vier Leerzeichen
    • Die Klammer in Zeile 7 ist überflüssig.
    • os.system ist veraltet und sollte nicht mehr genutzt werden - steht auch wörtlich in der Python-Doku. Stand der Dinge ist das `subprocess`Modul.
    • sleep(1) und sleep(2) in den beiden if-Blöcken ist sinnfrei - weg damit.
    • Die Rechnerei mit der Uhrzeit ist ein bisschen kompliziert, das geht eleganter.
    • Wenn man anfängt, Variablen (wie timewindow) zu nummerieren, dann ist das ein starkes Indiz dafür, dass man a) entweder eine Liste verwenden will oder b) bessere / aussagekräftigere Variablennamen. Hier ist letzteres der Fall.
    • Der Schaltzeitraum hat ein Fenster von einer Minute, es wird aber im 0,1 Sekunden-Takt geprüft, ob der Zeitschaltraum erreicht ist. Das macht auch wenig Sinn - außer, dass man die CPU dauerbeschäftigt.


    JanR : sagen wir mal, die verbesserst das Skript und übernimmst es - hast du dir schon gedanken gemacht, wie du sicherstellt, dass das Skript neu gestartet wird, wenn es mal crashen sollte? Des weiteren sollte man vielleicht nicht prüfen, ob der einzubauende `subprocess` Aufruf auch tatsächlich erfolgreich war, damit man den Zustand seines Systems auch sicher kennt.


    Des Weiteren würde ich, wenn du wirklich auf eine leichte Änderbarkeit der Schaltzeichen wert legst, die Werte in einer separaten Datei ablegen. Wenn es allgemein Verständlich sein soll, dann würde ich zu einer INI-Datei tendieren und die über das `configparser` Modul einlesen.


    Gruß, noisefloor

  • Der Schaltzeitraum hat ein Fenster von einer Minute, es wird aber im 0,1 Sekunden-Takt geprüft, ob der Zeitschaltraum erreicht ist. Das macht auch wenig Sinn - außer, dass man die CPU dauerbeschäftigt.

    Kurze passende Fragen meinerseits dazu,

    zur Ermittlung der passenden Zeit orientier ich mich immer an 1/10 bzw 2/10 (je nach dem wie genau das ganze werden soll) des gewünschten Taktes.

    Würde in diesem Fall bedeuten, dass es alle 6 Sekunden ausreicht zu prüfen, ob sich der Wert der Minute geändert hat. Passend so? Welche Faustregel verwendet ihr noisefloor &Co.

    Ein gefällt mir tut nicht weh :thumbup:

    Erledigte Threads bitte als erledigt markieren

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von Hofei ()

  • Hofei keine Regel, aber ich hätte einfach eine Sekunde genommen. Bei 1/10 min also 6 sek hast du halt unter Umständen bis zu 6 Sekunden Verzögerung, ob das in Ordnung ist kommt stark auf die Anwendung an.

  • Hallo,


    Hofei : wie linusg schon sagt - kommt drauf an :-) Also wie der benötigte Takt ist, in der etwas abgefragt werden soll.


    Bei 2x am Tag würde ich aber auch auf jeden Fall eine systemd Time Unit (oder crontab) nehmen. Ein dauerlaufendes Skript, dass 99,9999999% der Zeit mit Warten beschäftigt ist, macht halt wenig Sinn.


    Gruß, noisefloor