Python3 Skript im Autostart

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Guten Tag zusammen,

    ich komm leider nicht weiter. Habe bereits auch schon viel im Internet gesucht und vieles getestet doch es klappt einfach nicht. Ich habe 2 Python3 Skripte die einzeln wunderbar funktionieren, aber ich bekomm diese nicht in den Autostart. Habe es jetzt über verschiedene Wege versucht. rc.local oder auch über crontab, selbst über service unit geht es nicht.

    In der rc.local steht folgendes

    Code
    ....
    /usr/bin/python3 /home/pi/luefter.py
    /usr/bin/python3 /home/pi/feuchte.py
    
    exit 0

    In der luefter.py werden im Grunde nur 3 Eingänge überwacht, die wenn ein Eingang kommt den Ausgang ansteuert,

    In der feuchte.py werden 2 DHT22 ausgelesen und wenn die Luftfeuchtigkeit zu hoch ist, wird ein Ausgang angesteuert der dann als Eingang in luefter.py fungiert.

    Habe eben schon viel gelesen und chmod +x wurde auf beide Dateien bereits ausgeführt und Verweise sonst, die feste Pfade verlangen habe ich auch keine.

    Wo steckt der Fehler? Wer kann mir da etwas helfen. Ich zerbrech mit hier einfach den Kopf und finde den Fehler nicht. :wallbash:

    Vielen Dank im Vorraus.

    • Offizieller Beitrag

    Hallo Flixsi,

    willkommen im Forum! ;)

    Woran merkst Du, dass die Skripte nicht laufen? Was hast Du vor und was erwartest Du als Ergebnis? Willst Du die Ausgaben der Skripte sehen?

    //Edit

    In der feuchte.py werden 2 DHT22 ausgelesen und wenn die Luftfeuchtigkeit zu hoch ist, wird ein Ausgang angesteuert der dann als Eingang in luefter.py fungiert.

    Btw. Dann würde ich feuchte.py vor luefter.py starten lassen.

  • Hallo Flixsi,

    herzlich Willkommen im Forum.

    Dein feuchte.py wird NIEMALS NIE NICHT gestartet...

    Beschäftige Dich mal mit dem Hintergrund-Operator "&". Dann wirst Du von selbst darauf kommen, wo dieser in Deinem Umfeld einzusetzen ist.


    Viel Erfolg!

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    2 Mal editiert, zuletzt von Andreas (14. Dezember 2019 um 17:36)

  • Hallo,

    ganz einfach, wenn das Skript laufen würde und ich würde einen Schalter betätigen, dann würde es in dem luefter.py als Eingang ausgewertet und der Ausgang angeschaltet.

    Kurz würde ich den Schalter drücken, würde der Lüfter angehen.

    Habe eine kleine Lüftersteuerung gebastelt. 2 Lichtschalter sollen manuell den Lüfter ansteuern und wenn die Feuchtigkeit zu hoch ist, dann soll ebenfalls der Lüfter automatisch angesteuert werden.

  • Hallo Flixsi,

    herzlich Willkommen im Forum.

    Beschäftige Dich mal mit dem Hintergrund-Operator "&". Dann wirst Du von selbst darauf kommen, wo dieser in Deinem Umfeld einzusetzen ist.

    Viel Erfolg!

    Andreas

    Hallo,

    sorry kleiner Copierfehler. Die rc.local hat bereits die & Operatoren.

    Code
     ....
    /usr/bin/python3 /home/pi/luefter.py &
    /usr/bin/python3 /home/pi/feuchte.py &
    
    exit 0
  • Hallo Flixsi,

    dann solltest Du mal die SetWarnings einschalten. Ich vermute, dass das eine Programm die bereits vorbereiteten GPIO des anderen Programms wieder ausschaltet. Über die deaktivierte Warnung erfährst Du darüber nichts.

    Vermutlich muss der Informationsaustausch anders als über GPIO erfolgen.

    Die Programme sollten sich über Environment-Variablen (wenn es denn funktioniert) oder über Sockets oder Interprozess-Kommunikation (IPC) mittels sog. "named pipes" bzw. FIFO kommunizieren.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (14. Dezember 2019 um 17:47)

    • Offizieller Beitrag

    Hallo Andreas!

    dann solltest Du mal die SetWarnings einschalten

    Die wird er allerdings nicht sehen, wenn die Skripte per rc.local gestartet wurden. ;)

    ganz einfach, wenn das Skript laufen würde und ich würde einen Schalter betätigen, dann würde es in dem luefter.py als Eingang ausgewertet und der Ausgang angeschaltet.

    Das sgt ja nur aus, dass die Skripte nicht funktionieren, aber nicht, dass die nicht laufen.

    Du könntest mal sehen ob die eine PID ausgeben und somit laufen:

    Code
    echo PID="$(pgrep -x $(basename luefter.py))"
    #bzw.
    echo PID="$(pgrep -x $(basename feuchte.py))"
  • Hallo,

    wenn du die Skripte als systemd Service Unit startest - was der aktuelle und richtige Weg wäre - bekommst du auf jeden Fall einen Logeintrag vom Journal von systemd, was dir hilft, den Fehler zu finden.

    Zeig' auch mal deine Unit Dateien und die Ausgabe, was passiert, wenn du die Unit von Hand startest.

    `Relais` schreibt man mit s hinten - auch, wenn's im deutschen nicht wirklich mitgesprochen wird.

    Gruß, noisefloor

  • Zitat

    Das sgt ja nur aus, dass die Skripte nicht funktionieren, aber nicht, dass die nicht laufen.

    Das kann ich nicht bestätigen, wenn ich mich über putty auf den Raspi einwähle und die skripte einzeln starte dann funktionieren sie ja. Ich habe ein weiteres Image, wo ich die luefter.py einzeln am laufen habe, aber auch nur, weil dort der Benutzer Pi automatisch angemeldet wird und durch das anmelden, das skript gestartet wird. Aber dann kann ich keine 2 skripte parallel starten.

    Die PID in die rc.local einfügen?

  • Hallo,

    wenn du die Skripte als systemd Service Unit startest - was der aktuelle und richtige Weg wäre - bekommst du auf jeden Fall einen Logeintrag vom Journal von systemd, was dir hilft, den Fehler zu finden.

    Zeig' auch mal deine Unit Dateien und die Ausgabe, was passiert, wenn du die Unit von Hand startest.

    `Relais` schreibt man mit s hinten - auch, wenn's im deutschen nicht wirklich mitgesprochen wird.

    Gruß, noisefloor

    Habe jetzt auch mal in der Unit versucht, aber es passiert nichts.

    Code
    [Unit]
    Description=Startet die Lüftersteuerung
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/python3 /home/pi/luefter.py &
    ExecStart=/usr/bin/python3 /home/pi/feuchte.py &
    
    [Install]
    WantedBy=multi-user.target

    Und laut dem Befehl sudo systemct1 is-enabled bekomm ich die Antwort enabled.

    • Offizieller Beitrag

    wenn ich mich über putty auf den Raspi einwähle und die skripte einzeln starte dann funktionieren sie ja

    Manuell und Autostart sind zwei verschiedene Sachen.

    Die PID in die rc.local einfügen?

    Nein, nach dem booten im Terminal oder Putty eingeben.

  • Entferne mal Zeile 7. Bin mir nicht sicher ob 2 x ExecStart vorkommen dürfen und in Zeile 6 bitte das & entfernen.

    Anschließend ausführen und Ausgabe posten

    Code
    systemctl daemon-reload
    systemctl start <unitname>
    systemctl status <unitname>
    journalctl -r -u <unitname>
  • Entferne mal Zeile 7. Bin mir nicht sicher ob 2 x ExecStart vorkommen dürfen und in Zeile 6 bitte das & entfernen.

    Anschließend ausführen und Ausgabe posten

    Code
    systemctl daemon-reload
    systemctl start <unitname>
    systemctl status <unitname>
    journalctl -r -u <unitname>

    Hallo,

    es hat etwas gedauert und das ganze brachte mich weiter. Also laut den Befehlen fehlen ihm die Module und deshalb kann er die Skripte nicht laden oder sehe ich das jetzt falsch?

    Dann ist natürlich jetzt die Frage, die Module sind ja installiert. Wenn ich mich als pi eingeloggt habe und dann starte, dann erkennt er sie ja, nur noch nicht bei Systemstart?

  • Wie hast du die Module installiert?

    Da musst du aufpassen, es wird unterschieden für welchen User die Module installiert sind.

    In deiner aktuellen Fassung wird das Skript als User root ausgeführt, wenn für ihm die Module nicht installiert sind ist die Fehlermeldung logisch.

    Du kannst aber auch die Skripte als User Pi starten lassen.

    Hierzug ergänze in der [Service] Sektion Python3 Skript im Autostart

    die Zeile User=pi

  • Super, habe es jetzt mit User=pi ergänzt und nun scheint es zu funktionieren. Werde es noch genauer bei gelegenheit testen. Aber es scheint jetzt echt geklappt zu haben.

    Was eine schwere Geburt.

  • Aller Anfang ist schwer - nur nicht verzagen und das Forum gibts ja auch noch ;)

    Freut mich, dass ich/wir helfen konnten.

    Wenn du nach deinem Test dann der Überzeugung bist, dass alles wie gewünscht funktioniert markiere bitte den Thread oben noch als erledigt.

  • Aller Anfang ist schwer - nur nicht verzagen und das Forum gibts ja auch noch ;)

    Freut mich, dass ich/wir helfen konnten.

    Wenn du nach deinem Test dann der Überzeugung bist, dass alles wie gewünscht funktioniert markiere bitte den Thread oben noch als erledigt.

    Hallo,

    würde es gern als erledigt markieren, doch nun steh ich vor neuen Herausforderungen.

    Der Raspi läuft und irgendwann dann nicht mehr. Habe mal geschaut was so anliegt und finde folgendes:

    Was ist denn jetzt wieder falsch?

Jetzt mitmachen!

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