Cron-Job auf Raspi mit Ausnahmeregel
TS
- hardware
- python
- raspberry
0 MudGuard0 Rolf B0 Mitleser 2.0
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
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.
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.
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
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
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
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
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
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
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
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
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
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
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
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
...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...
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
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
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…