Hallo Zusammen,
ich bin gerade beim Zusammenbau eines kleinen Überwachungsservers auf Raspi-Basis. Ein Pin soll überwacht werden und beim Anlegen eines Signals ein Programm gestartet werden. Es stellt sich mir dabei die Frage -
Was ist die bessere Vorgehensweise bei einem Abfrageintervall zwischen 0,5 - 5 Sekunden:
1.) einen Cron-Job anlegen, der in der gewünschten Frequenz ein Abfrage-Skript startet, oder
2.) über systemd ein Skript starten, das in einer Endlosschleife mit der gewünschten Frequenz die Abfrage durchführt ?
Anm: der Raspi hat ansonsten keine weiteren Aufgaben, außer bei positiver Abfrage das Programm noch auszuführen.
Mein erster Gedanke war der Cron-Job, denn Cron ist ja eigentlich für sich wiederholende Aufgaben da, aber ob das auch für einen Job gilt, der jede Sekunde stattfindet?
Viele Grüße und Danke für Eure Meinung
Cronjob oder Skript mit Schleife?
Re: Cronjob oder Skript mit Schleife?
Eigentlich ist beides Mist.
Die bessere Methode ist, einen eigenen Service zu schreiben, der ständig läuft und auf die Pin-Interrupts reagiert. Damit entfällt das Polling der Pins, das ohnehin fehlerhaft ist, weil du Ereignisse zwischen zwei Abfrageintervallen nciht mitbekommst.Ausserdem ist es extrem weniger CPU-belastend.
Die bessere Methode ist, einen eigenen Service zu schreiben, der ständig läuft und auf die Pin-Interrupts reagiert. Damit entfällt das Polling der Pins, das ohnehin fehlerhaft ist, weil du Ereignisse zwischen zwei Abfrageintervallen nciht mitbekommst.Ausserdem ist es extrem weniger CPU-belastend.
Re: Cronjob oder Skript mit Schleife?
Ja, da bin ich ganz bei Dir, eine Dauerschleife nur zum Abfragen eines Signals ist natürlich Mist...
Es scheint allerdings so, dass eine vernünftige Callback-Funktion nur für Python mit der RPi.GPIO-Bibliothek zur Verfügung steht. Da ist wohl nix mit BASH als Startskript. Dann müsste die gesamte Logik unter Python im alarm.service-Skript stehen, oder?
Die Signallänge ist übrigens unkritisch, es ist ein Warnsignal. Wenn es ansteht, dann für mehrere Sekunden/Minuten - wenn es abfällt, dann für Tage/Wochen/Monate.
Vielen Dank!
Es scheint allerdings so, dass eine vernünftige Callback-Funktion nur für Python mit der RPi.GPIO-Bibliothek zur Verfügung steht. Da ist wohl nix mit BASH als Startskript. Dann müsste die gesamte Logik unter Python im alarm.service-Skript stehen, oder?
Die Signallänge ist übrigens unkritisch, es ist ein Warnsignal. Wenn es ansteht, dann für mehrere Sekunden/Minuten - wenn es abfällt, dann für Tage/Wochen/Monate.
Vielen Dank!
Re: Cronjob oder Skript mit Schleife?
Kennst du WiringPi? Das ist eine C-Bibliothek.k2 hat geschrieben:21.06.2021 14:56:19Es scheint allerdings so, dass eine vernünftige Callback-Funktion nur für Python mit der RPi.GPIO-Bibliothek zur Verfügung steht.
Viel habe ich damit bisher zwar auch nicht gemacht, aber einen Pin abfragen sollte damit eigentlich jeder hinbekommen, zumal es dafür genug Beispiele im Internet gibt.
Re: Cronjob oder Skript mit Schleife?
Na, das war mal wieder Bullshit, das .service-Skript ist ja das Unit-Skript, das das Skript/Programm aufruft...k2 hat geschrieben:21.06.2021 14:56:19Dann müsste die gesamte Logik unter Python im alarm.service-Skript stehen, oder?
Shame on me!
![Facepalm :facepalm:](./images/smilies/icon_ochmann.gif)
Re: Cronjob oder Skript mit Schleife?
Ja, kenne ich, ist aber deprecated, der Autor ist echt sauer: http://wiringpi.com/wiringpi-deprecated/
Eine andere Möglichkeit die Flankenwechsel-Interrupts auszuwerten habe ich nicht gefunden. Dann wird es wohl eine State Machine in Python werden, die für einen Zustandswechsel einen Flankenwechsel abwartet.
Muss ich mich eben in Python einarbeiten, bis jetzt habe ich nur mit Arduino und dessen C++ gearbeitet.