Skript arbeitet nur bei geöffneter PuTTY-Session

  • Hallo,

    Ich habe ein kleines skript, dass bei Betätigung der Türklingel einen Rundruf an die Fritzbox machen soll.

    Leider funktionert das skript nur so lange wie ich auf meinem Computer eine PuTTY-Session zum Raspberry geöffnet habe. Sobald ich die Session schließe, startet dass Skript bei Betätigung des Tasters nicht mehr.
    Ich hab das skript auch in die rc.local oder als crontab eingetragen, sodass es nach einem Neustart startet. Leider funktionert auch dieser Weg nicht.

    Versuche dann "noch mal" zu starten, bekomme ich den Fehler.

    Code
    ./trigger: line 4: echo: write error: Device or resource busy
  • Wie genau führst du das Script aus?

    Wie sieht dein Eintrag in /etc/rc.local aus?

    Das script muss im Hintergrund weiterlaufen

    Starte das Script entweder in screen oder mit nohup am Anfang der Befehlszeile

  • Erstellt habe ich das Skript (mit dem bekannten Inhalt) über den "Befehl":

    Code
    sudo nano trigger


    Manuell ausführen tue ich es mit:

    Code
    sudo ./trigger


    In der /etc/rc.local probierte ich es for dem exit(0) mit:

    Code
    /home/pi/trigger &


    In crontab -e habe ich mal wahlweise eins von beiden eingetragen:

    Code
    @reboot /home/pi/trigger


    oder

    Code
    @reboot screen -dmS Tuerklingel  /home/pi/trigger

    Selbstredend habe ich die Varianten nacheinander und nicht gleichzeitig getestet.
    Scheinbar wird das Skript in irgendeinerweise auch vom "Autostart" aufgerufen.
    Denn wenn ich es dann manuell starten möchte ich bekomme ich bereits genannte Fehlermeldung:

    Code
    ./trigger: line 4: echo: write error: Device or resource busy
  • Nun, wo befindet sich denn die Binary sipcmd ? Am besten den vollständigen Pfad zu dieser Datei im Script verwenden. Denn das Script trigger befindet sich anscheint in /home/pi/ aber da du die Datei über /etc/rc.local gestartet hast ist der Ausführende Benutzer root, nicht pi. Also würde ./sipcmd bzw cd ./sipcmd-master sich auf /root/ beziehen, oder sogar / also dem Wurzelverzeichnis des Linux Systems, aber nicht auf /home/pi/..

    Änder das Script also mal so ab:


    PS: "sleep 0.1" ist keine halbe Sekunde sondern 0.1 Sekunden also 100ms
    PPS: Vermutlich wäre es auch besser und performanter Python und Interrupt zu verwenden damit kein "sleep" verhindert dass vllt jüst in dem Moment der veränderte Status des GPIO's nicht erkannt wird

  • Danke! Problem gelöst! Fehler waren die fehlenden absoluten Pfade.
    Zu PPS: Der sleep stellt in so fern kein Problem da, als dass das Relais so träge ist, dass es einmal ausgelöst mindestens eben diese Zeit geschlossen bleibt.
    Ein perfomantere Lösung hört sich allerdings immer gut an. Ich habe noch nie mit Python gearbeitet. Gibt es für diese Problemstellung ein Skript?

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!