TS: Cron-Job auf Raspi mit Ausnahmeregel

Hello,

nachdem mein Modbus-Logging vom SDM230-Modbus mittels MinimalModbus für Python3 und einem "Isolation-Board" (galvanische Trennung für die Raspberry Pi) double-stackable (!) nun fast zufriedenstellend läuft, möchte ich das weiter automatisieren.

Wie kann ich für Linux einen Cronjob bauen, der regelmäßig alle fünf Minuten ein Py-Script aufruft, aber z. B. von 20:00h bis 06.00h nur alle 30 Minuten.

Den ersten Teil habe ich schon. Aber die Ausnahmezeit bekomme ich logisch nicht rein ins Cron-Konzept.

Alternativ könnte ich die Ausnahmeregel auch ins Skript einbauen, würde die Konfiguration dafür dann aber gleich auslagern in eine *.conf-Datei. Leider fehlen mir dazu (noch) die Python-Kenntnisse.
Dafür habe ich jetzt den Source Code

Tabelle mit:

Von-Datum     Bis-Datum     Ausnahmezeit
03-15         04-30         17:00, 08:00
05-01         09-15         20:00, 06:00
09-16         03-14         17:00, 08:00

oder so ähnlich.

Hintergrund:
In der Zeit, in der die Sonne nicht scheinen kann, muss ich nicht loggen, oder nur minimal, um eventuell Fehler zu erkennen oder (später mal) den Netzbezug von einem weiteren Modbus-Zähler erfassen zu lassen.

Das Ganze soll dann wieder per SVG-Grafik dargestellt werden können.

Daten (Beispiel):

Datum   Zeit(MESZ)      Volt    Hz      kWh-Up  kWh-Dn  W-Up    W-Dn
20230524        135211  237.43  50.0    912.58  16.15   923.3   0.0
20230524        135358  237.59  50.05   912.6   16.15   797.61  0.0
20230524        140010  238.64  50.0    912.7   16.15   858.86  0.0
20230524        140228  242.18  49.95   912.77  16.15   1362.14 0.0
20230524        140400  241.82  49.95   912.9   16.15   2232.62 0.0
20230524        140432  240.42  50.0    912.93  16.15   2877.77 0.0

Das Ganze soll ohne Grafana laufen und mittels einfachster Installationsanleitung zum Laufen gegracht werden können.

Es werden auch Steuerungsfunktionen per HTTPS möglich sein, also das gesamte (einfache) HTML- und CSV-Spektrums wird sinnvoll genutzt werden können.

AJAX will ich mir, soweit es geht, verkneifen.

Kleine Macke noch:

Da der Jonas Berg (Author von MinimalModbus) leider die Function-Codes hart an die meisten Funktionen gekoppelt hat, kann man das Rücksetzen des "Größter Watt-Wert" nicht mit seiner Klasse per Modbus vornehmen. Ich würde Jonas Berg gerne erreichen, um den Misstand im Quellcode beseitigen zu können (wenn ich dann mal irgendwann Python kann...). Leider habe ich keine eMail von ihm.

Vielleicht kann man das aber auch jetzt schon durch Konfigurationsänderung erreichen. Dazu müsste ich die Doku vollständig verstehen, oder ein(e) Python-Kundige(r) müsste mir die Stelle im Manual zeigen, an der das möglich wäre :-)

Dafüe habe ich jetzt aber den Source Code erhalten :-)

Es bleibt also noch viel zu tun!

Glück Auf
Tom vom Berg

--
Es gibt soviel Sonne, nutzen wir sie.
www.Solar-Harz.de
S☼nnige Grüße aus dem Oberharz

akzeptierte Antworten

  1. Hi,

    Wie kann ich für Linux einen Cronjob bauen, der regelmäßig alle fünf Minuten ein Py-Script aufruft, aber z. B. von 20:00h bis 06.00h nur alle 30 Minuten.

    Mach es wie der Bonbonhersteller: Nimm Zwei.

    Einen für die 5-Minuten-Intervalle und einen für die 30-Minuten-Intervalle.

    cu,
    Andreas a/k/a MudGuard

    1. Hello,

      Wie kann ich für Linux einen Cronjob bauen, der regelmäßig alle fünf Minuten ein Py-Script aufruft, aber z. B. von 20:00h bis 06.00h nur alle 30 Minuten.

      Mach es wie der Bonbonhersteller: Nimm Zwei.

      Einen für die 5-Minuten-Intervalle und einen für die 30-Minuten-Intervalle.

      Hatte ich schon überlegt, aber wie kann ich die Fünfminuten-Calls auf die Zeit von z. B. 06:00 bis 19:30 begrenzen und die 30-Minuten-Calls dann eben auf die übrige Zeit?

      Da habe ich vermutlich Crontab noch nicht ganz verstanden!

      Glück Auf
      Tom vom Berg

      --
      Es gibt soviel Sonne, nutzen wir sie.
      www.Solar-Harz.de
      S☼nnige Grüße aus dem Oberharz
      1. Hi,

        Wie kann ich für Linux einen Cronjob bauen, der regelmäßig alle fünf Minuten ein Py-Script aufruft, aber z. B. von 20:00h bis 06.00h nur alle 30 Minuten.

        Mach es wie der Bonbonhersteller: Nimm Zwei.

        Einen für die 5-Minuten-Intervalle und einen für die 30-Minuten-Intervalle.

        Hatte ich schon überlegt, aber wie kann ich die Fünfminuten-Calls auf die Zeit von z. B. 06:00 bis 19:30 begrenzen und die 30-Minuten-Calls dann eben auf die übrige Zeit?

        Da habe ich vermutlich Crontab noch nicht ganz verstanden!

        0,30 0—5,20-23 * * * ...

        0/5 6-19 * * * ...

        So auf die Schnelle im fahrenden Treno ...

        cu,
        Andreas a/k/a MudGuard

        1. Hello Andreas,

          Wie kann ich für Linux einen Cronjob bauen, der regelmäßig alle fünf Minuten ein Py-Script aufruft, aber z. B. von 20:00h bis 06.00h nur alle 30 Minuten.

          Mach es wie der Bonbonhersteller: Nimm Zwei.

          Einen für die 5-Minuten-Intervalle und einen für die 30-Minuten-Intervalle.

          Hatte ich schon überlegt, aber wie kann ich die Fünfminuten-Calls auf die Zeit von z. B. 06:00 bis 19:30 begrenzen und die 30-Minuten-Calls dann eben auf die übrige Zeit?

          Da habe ich vermutlich Crontab noch nicht ganz verstanden!

          0,30 0—5,20-23 * * * ...

          0/5 6-19 * * * ...

          So auf die Schnelle im fahrenden Treno ...

          Fährt der denn 0-24? ;-)

          Danke. Das wird getestet und könnte klappen.
          Muss ich wohl nochmal eine Nachschulung für Cron nehmen.

          Glück Auf
          Tom vom Berg

          --
          Es gibt soviel Sonne, nutzen wir sie.
          www.Solar-Harz.de
          S☼nnige Grüße aus dem Oberharz
          1. Hi,

            So auf die Schnelle im fahrenden Treno ...

            Fährt der denn 0-24? ;-)

            Ich hoffe, daß um 13:35 Ende der Fahrt ist …

            cu,
            Andreas a/k/a MudGuard

            1. Hi,

              So auf die Schnelle im fahrenden Treno ...

              Fährt der denn 0-24? ;-)

              Ich hoffe, daß um 13:35 Ende der Fahrt ist …

              Wobei mir das nicht am Arsch vorbeigeht - dafür aber über den Po …

              cu,
              Andreas a/k/a MudGuard

            2. Hello Andreas,

              So auf die Schnelle im fahrenden Treno ...

              Funktioniert...

              Fährt der denn 0-24? ;-)

              Ich hoffe, daß um 13:35 Ende der Fahrt ist …

              Der Streik ist erstmal abgewendet.

              Glück Auf
              Tom vom Berg

              --
              Es gibt soviel Sonne, nutzen wir sie.
              www.Solar-Harz.de
              S☼nnige Grüße aus dem Oberharz
              1. Hi,

                Fährt der denn 0-24? ;-)

                Ich hoffe, daß um 13:35 Ende der Fahrt ist …

                Der Streik ist erstmal abgewendet.

                Die italiener wollten streiken?

                cu,
                Andreas a/k/a MudGuard

                1. Hello,

                  Fährt der denn 0-24? ;-)

                  Ich hoffe, daß um 13:35 Ende der Fahrt ist …

                  Der Streik ist erstmal abgewendet.

                  Die italiener wollten streiken?

                  Weiß ich nicht. Habe ich leider auch nicht darauf geachtet, in welchem Teil Europas Du unterwegs bist. -Oh-

                  Die Deutschen auf jeden Fall und die Franzosen haben laut Nachrichten auch gezuckt.

                  Jedenfalls hast Du mir viel Arbeit erspart. Danke!

                  Glück Auf
                  Tom vom Berg

                  --
                  Es gibt soviel Sonne, nutzen wir sie.
                  www.Solar-Harz.de
                  S☼nnige Grüße aus dem Oberharz
                  1. Hi,

                    Weiß ich nicht. Habe ich leider auch nicht darauf geachtet, in welchem Teil Europas Du unterwegs bist. -Oh-

                    Ich dachte, drr Hinweis mit dem Arsch war eindeutig genug …

                    Jedenfalls hast Du mir viel Arbeit erspart. Danke!

                    Gern geschehen

                    cu,
                    Andreas a/k/a MudGuard

  2. Hallo TS,

    Ich würde Jonas Berg gerne erreichen, um den Misstand im Quellcode beseitigen zu können

    Das Medium dafür heißt: Issue! (Gesundheit!)

    Rolf

    --
    sumpsi - posui - obstruxi
  3. ...Ich würde Jonas Berg gerne erreichen, um den Misstand im Quellcode beseitigen zu können (wenn ich dann mal irgendwann Python kann...). Leider habe ich keine eMail von ihm.

    Dafüe habe ich jetzt aber den Source Code erhalten :-)

    Regulär böte sich dann besser an, einen Issue statt einer Mail zu erstellen:

    https://github.com/pyhys/minimalmodbus/issues

    Da der letzte Commit allerdings beinahe zwei Jahr zurückliegt...

    1. Hallo Mitleser 2.0,

      oh. Ich habe nur geschaut, wann das letzte Issue geschlossen wurde und daraus geschlossen, dass der Repository-Owner (oder zumindest ein berechtigter Contributor) noch aktiv ist.

      Rolf

      --
      sumpsi - posui - obstruxi
    2. Hello Mitleser,

      ...Ich würde Jonas Berg gerne erreichen, um den Misstand im Quellcode beseitigen zu können (wenn ich dann mal irgendwann Python kann...). Leider habe ich keine eMail von ihm.

      Dafür habe ich jetzt aber den Source Code erhalten :-)

      Regulär böte sich dann besser an, einen Issue statt einer Mail zu erstellen:

      https://github.com/pyhys/minimalmodbus/issues

      Da der letzte Commit allerdings beinahe zwei Jahr zurückliegt...

      Damit es schnell geht, würde ich selber gerne eine Funktion hinzufügen, die das kann, was ich glaube benutzen zu können.

      Hinzufügen deshalb, weil ich die Klasse nicht kaputt machen will für ältere Anwendungsfälle.

      Im von mir verlinkten Source-Code ist das die Funktion/Methode, die auf Zeile 721 beginnt. Die würde ich, wenn das so einfach möglich ist, nochmals als access_register() mit frei eingebbarem Function-Code einfügen.

      Was ich dabei aber alles beachten müsste, weiß ich als Python-Noob noch nicht. Muss ich da was neu zusammenbauen und compilieren?

      Wie bekomme ich nachher die geänderte Version in mein Python?
      Ich habe die andere ja mit pip3 aus dem Repository hinzugefügt...

      Glück Auf
      Tom vom Berg

      --
      Es gibt soviel Sonne, nutzen wir sie.
      www.Solar-Harz.de
      S☼nnige Grüße aus dem Oberharz
      1. Wie bekomme ich nachher die geänderte Version in mein Python? Ich habe die andere ja mit pip3 aus dem Repository hinzugefügt...

        Ich betrachte beide Fragen mal als eine und gehe davon aus, dass Autor nicht (positiv) auf Deine Änderungswünsche reagiert:

        Du hast einen Webserver und kannst ein eigenes Verzeichnis auf diesem anlegen und PIP bekannt machen:

        https://packaging.python.org/en/latest/guides/hosting-your-own-index/

        Grüße aus dem Süden Kroatiens…