Script laeft nur wenn in command line gestartet

  • Hallo,

    ich starte ein script auf der command line pi@raspberrypi:~/th $ /home/pi/th/ausvonalarm.py

    Dann lege ich einen Schalter um der GPIO 24 /Pin18 schaltet. Das script macht genau das was es soll, subprocess.call("/home/pi/th/aus") script "aus" macht das was es soll.


    Wenn ich aber den Schalter umlege und das script ausvonalarm.py ist nicht gestartet, passiert nichts.

    Egal ob in /etc/rc.local /usr/bin/python3 /home/pi/th/ausvonalarm.py & eingetragen ist, oder ob ich das script mit systemd starte.


    pi@raspberrypi:~/th $ sudo systemctl status ausvonalarm.service

    ● ausvonalarm.service - ausvonalarm Service

    Loaded: loaded (/lib/systemd/system/ausvonalarm.service; enabled)

    Active: active (running) since Fri 2019-04-19 11:40:38 CEST; 53s ago

    Main PID: 981 (python3)

    CGroup: /system.slice/ausvonalarm.service

    └─981 /usr/bin/python3 /home/pi/th/ausvonalarm.py


    Sieht eigentlich alles gut aus, nur warum start das script nicht selbstaendig


    Im script ausvonalarm.py habe ich mit while True: probiert, geht auch nicht, import signal pause und am Ende des scripts pause() sollte ja das script am laufen halten nach Doku gpiozero.


    when_pressed oder when_released sollte doch den Flankenwechsel des Schalters erkennen??


    Bin froh um jede Hilfe.

    Danke und Gruss

    gwaag

    • Official Post

    Was steht im Skript /home/pi/th/aus ? Hast Du dort auch absolute Pfade verwendet?


    //Edit

    Was soll passieren, wenn Du in beiden callbacks das selbe Skript aufrufst, bzw. woran willst Du erkennen, das Dein Skript nicht funktioniert? An print("Aus") oder print("Ein")?

  • Hallo,


    heir das script aus.


    Also wenn der Schalter von 0 auf 1 oder von 1 auf 0 wechselt, soll script aus erfolgen.

    Ich sehe dass das script nicht funktioniert an den Lampen, die sollten aus schalten wenn Schalter in die eine oder andere Richtung gelgt wird. Ein /Aus habe ich nur zur Kontrolle gemacht, ob von 1 auf 0 oder von 0 nach 1 geschaltet wurde.

    Wenn das script in der comando line gestart wurde und ich den Schalter umlege schaltet das script aus die Lampen aus.

    Dann schalte ich die Lampen mit der Fernsteuerung wieder ein und bei erneutem wechsel des Schalters sollen sie durch script aus wieder aus gehen.

    Also das scrip macht genau das was es soll, nur eben nicht wenn es nicht von der command line aus vor her gestartet wurde.

    Wo liegt der Fehler, dass das script nicht selber auf den Flankenwechsel wartet und dann subprocess.call macht.

    gruss

    gwaag



  • Wenn script von command line aus gestartet ist und ich den Schalter umlege kommt zuerst eine Abfolge des codes von "aus" und dann

    printet es Ein oder Aus.

    Wenn es nicht gestartet ist sehe ich ja auch nichts.

    journalctl schau ich mir an.

    gruss

    gwaag

  • Started ausvonalarm Service.

    Versuch mal diese service unit, z. B. 30 Sekunden nach dem Booten deines PI, mit einer timer unit zu starten.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • So?? Immer noch gleiches Prolem.


    gruss

    gwaag


    [Unit]

    Description=ausvonalarm Service

    After=multi-user.target


    [Service]

    ExecStartPre=/bin/sleep 30

    Type=idle

    ExecStart=/usr/bin/python3 /home/pi/th/ausvonalarm.py



    [Install]

    WantedBy=multi-user.target

  • So??

    Nein, nicht so. Siehe z. B. https://wiki.ubuntuusers.de/systemd/Timer_Units/


    und die richtige manpage (man systemd.timer).

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Aller Anfang ist schwer....... denke so ist es richtig

    &

    Code
    sudo systemctl enable name_des_timers.timer
    sudo systemctl start name_des_timers.timer



    [Unit]

    Description=Timer ausvonalarm


    [Timer]

    OnBootSec=1min

    Unit=ausvonalarm.service


    [Install]

    WantedBy=multi-user.target


    Nach einem reboot startet und stopt script aus nun im 5 sec. Tackt . Was ist denn jetzt los??

    gruss

    gwaag

    Edited 2 times, last by gwaag ().

  • Nach einem reboot startet und stopt script aus nun im 5 sec. Tackt . Was ist denn jetzt los??

    Wie sind die Ausgaben von:

    Code
    systemctl is-enabled ausvonalarm.service
    systemctl status ausvonalarm.service
    systemctl is-active ausvonalarm.service

    ?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • 1 enabled

    2 activ running ( gruen)

    3 active


    Ich habe jetzt wieder while True:

    sleep(0.01)

    eingebaut, kann es sein dass mein Raspi B rev. 2 zu langsam ist und die Flanken nicht sieht??


    Wenn ich es so mache geht das script, so kann ich es aber nicht brauchen, so kommt aus zigmal por sec.

    Es darf pro Schalter Wechel nur einmal kommen.




    gruss

    Gwaag

    Edited once, last by gwaag ().

  • 1 enabled

    2 activ running ( gruen)

    3 active

    Wenn Du eine timer unit benutzt, muss die service unit nicht enabled sein. D. h.:

    Code
    sudo systemctl daemon-reload
    sudo systemctl disable ausvonalarm.service

    und rebooten. Poste auch die Ausgabe von:

    Code
    systemctl cat ausvonalarm.service


    EDIT:


    Hast Du evtl. auch einen Eintrag in der /etc/rc.local (oder gleichwertig)?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • # /lib/systemd/system/ausvonalarm.service

    [Unit]

    Description=ausvonalarm Service

    After=multi-user.target


    [Service]

    Type=idle

    ExecStart=/usr/bin/python3 /home/pi/th/ausvonalarm.py



    [Install]

    WantedBy=multi-user.target


    Habe den service jetzt abgestellt. Nein in rc.local habe ich das rausgenommen.

    Habe nun das script vom ersten post wieder geladen, von command line aus gestartet laeuft es einwandfrei anderst nicht.

    Das Tackten hat aber aufgehoert.

    gruss

    gwaag

    Edited 3 times, last by gwaag ().

  • Moin, das gleiche Problem hatte ich mit meiner Türklingel, die über's Heimnetz/Fritzbox alle Telefone klingeln lässt. Nach dem Boot-Vorgang und vor dem Verbinden mit dem Internet wurde mein Skript für die Türklingel gestartet, doch weil es eine Internetverbindung benötigt, ist es jedes Mal abgebrochen.

    Erst habe ich es mit einer Funktion innerhalb des Skripts versucht, die das Programm so lange pausiert, bis eine Verbindung besteht, was allerdings nicht erfolgreich war (so im Nachhinein weiß ich, dass ich da auch eher halbherzig rangegangen bin).


    Dann habe ich mich weiter mit systemctl auseinandergesetzt und habe mir folgenden Service gebastelt:




    Erst wenn eine aktive Internetverbindung besteht, wird meine Türklingel gestartet. Getestet habe ich es anfangs mit einem kurzen Klingeln*, um sicher zu gehen, dass systemctl einwandfrei funktioniert.



    *In meinem Code habe ich vor pause() einen kurzen Klingel-Befehl eingefügt. Du könntest anfangs ebenfalls ein kleines Licht-Blitzen einfügen, um sicher zu gehen, dass das Programm jetzt wirklich läuft und auch funktioniert.

    Kelvin

  • Danke fuer deinen input.

    Ich sehe sofort ob das script funktioniert oder nicht, geht das Licht aus funktioniert es, sonst nicht.

    Leider funktioniert es immer noch nicht ohne das script zuerst manuell zu starten.

    gruss

    gwaag

  • Erst wenn eine aktive Internetverbindung besteht, wird ...*, um sicher zu gehen, dass systemctl einwandfrei funktioniert.

    Genau das soll (beim TE) die timer unit (start der service unit 1 Minute nach dem booten des PI) berücksichtigen.

    Oder meinst Du, dass sein PI 1 Minute nach dem booten noch immer keine Internetverbindung hat bzw. die erforderlichen Ressourcen für sein Script, zu diesem Zeitpunkt immer noch nicht zur Verfügung stehen?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • ..., von command line aus gestartet laeuft es einwandfrei anderst nicht.

    Dann ist die service unit evtl. nicht vollständig bzw. es fehlt etwas, das beim Start via Kommandozeile, zur Verfügung steht.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

  • Lass mal systemctl aktiviert, starte den Pi neu und rufe dann wieder den Status ab. Mal sehen was für eine Fehlermeldung ausgegeben wird

    Kelvin

  • Also ich muss ja nicht auf eine Internetverbindung warten, das habe ich nie geschrieben.

    Die scripte brauchen kein Internet.

    Ich denke Leute die mit gpiozero erfahrung haben, koennten hier einen Beitrag leisten.

    gruss

    gwaag