Autostart für eine Lüftersteuerung will einfach nicht gelingen.

  • Hallo zusammen;)

    Ich habe ein Problem mit den Autostart meiner Lütersteuerung und hoffe das Ihr mir weiterhelfen könnt:helpnew:

    Ich habe schon viel Versucht, bin aber immer wieder gescheitert. :conf:


    Zuerst aber mal ein paar Daten zu meinem System:


    Hier einen Link wie ich meinen Lüfter verwenden wollte: https://alexbloggt.com/lueftersteuerung/

    So sieht meine Datei dann aus:

    Die Datei ist bei mir unter /home/pi zu finden und heist fan.py



    Was ich schon alles Versucht habe:


    1. Autostart über rc.local

    Kein Erfolg bei einem neustart des RPi.


    2. Andere schreibweise für Autostart über rc.local

    Kein Erfolg bei einem neustart des RPi.


    3. Autostart über Init-Scripts

    Unter /etc/init.d/ die Datei fan erstellt.

    Dann in den Ordner gewechselt cd /etc/init.d/ und
    sudo chmod 755 fan und sudo update-rc.d fan defaults ausgeführt.

    Kein Erfolg.


    4. Autostart über .desktop Dateien

    Unter ~/.config/autostart die Datei fan.desktop erstellt.

    Code
    [Desktop Entry]
    Name=Autostart-Script
    Comment=Kommentar
    Type=Application
    Exec=fan.sh
    Terminal=false

    Kein Erfolg.


    5. Cronjobs, unter /etc/crontab etwas in die Datei eintragen.

    Code
    #...
    */10 * * * * /home/pi/fan.py

    Kein Erfolg.


    Wenn ich über die Console, die Datei sudo python /home/pi/fan.py starte, dann geht mein Lüfter wie gewünscht an.


    Warum aber nicht automatisch? :wallbash: Ich bin echt ratlos!:denker: Bitte um Hilfe. Danke.:daumendreh2:

    Edited once, last by Soddi ().

  • Hallo,


    wie wäre es denn, wenn du mal den aktuellen Weg wählst und eine systemd Service Unit schreibst? Dann bekommt du ein brauchbares Logging via journald dirket mit geliefert.


    Vorher solltest du das Skript aber vielleicht erst mal lauffähig machen... `print irgendwas` erzeugt einen Fehler in Python 3 und beendet die Ausführung.


    Ansonsten:

    • os.popen ist veraltet, das steht sogar wörtlich in der Python-Doku. Der aktuelle Weg ist das subprocess Modul.
    • Die Klammern beim if-Statement sind überflüssig.
    • am Ende solltest du noch ein GPIO.cleanup() einfügen


    Gruß, noisefloor

  • So auf die Schnelle: mit der Funktion ``getCPUtemperature`` bekommst du die GPU Temperatur und nicht die CPU Temp.

    Solltest du wirklich die CPU Temperatur meinen, dann empfehle ich dir:

    Python
    def read_cpu_temp():
        with open('/sys/class/thermal/thermal_zone0/temp', 'rb') as f:
            return float(f.readline().strip()) / 1000

    Zudem empfehle ich dir noch die PEPs: https://www.python.org/dev/pep…nction-and-variable-names

  • Danke für eure Antworten.


    Entschuldigt, das ich alles auf einmal Versucht habe, aber da ich keine Ahung von dem ganzen habe,

    dachte ich, irgendetwas muss ja funktionieren, hat es aber leider nicht.:no_sad:


    Okey ich nehme dann nur eine Variante: rc.local


    Ist der Shebang in der fan.py korrekt? Ist die Datei ausführbar? Schon mal absolute Pfade in der rc.local probiert (auch zum Python-Interpreter)?

    Was ist den der Shebang? Also in meiner fan.py Datei steht in der ersten Zeile: #!/usr/bin/python

    Ja die Datei habe ich mit sudo chmod +x fan.py Ausführbar gemacht.

    Der ablolute Pfad in der rc.local Datei ist bei mir doch /home/pi/fan.py oder nicht?



    Erstmal, entscheide Dich bitte für eine Variante, so ist das Planlos.

    Danke. Okey ist gut. Ich werde es mit den Autostart rc.local versuchen.



    Falls Dein Skript tatsächlich root-Rechte braucht, mußt Du ihm die natürlich auch beim Autostart zukommen lassen.

    Okey. Wie würde das den gehen?



    wie wäre es denn, wenn du mal den aktuellen Weg wählst und eine systemd Service Unit schreibst? Dann bekommt du ein brauchbares Logging via journald dirket mit geliefert.


    Vorher solltest du das Skript aber vielleicht erst mal lauffähig machen... `print irgendwas` erzeugt einen Fehler in Python 3 und beendet die Ausführung.


    Ansonsten:

    os.popen ist veraltet, das steht sogar wörtlich in der Python-Doku. Der aktuelle Weg ist das subprocess Modul.
    Die Klammern beim if-Statement sind überflüssig.
    am Ende solltest du noch ein GPIO.cleanup() einfügen

    Okey, das kann ich auch gerne so versuchen und eine systemd Service Unit schreiben.

    Ja okey, allerdings kann ich nicht Programmieren und habe das Skript für die Lüftersteuerung nur koppiert.:daumendreh2:

    Kannst du mir da vielleicht weiterhelfen???



    So auf die Schnelle: mit der Funktion ``getCPUtemperature`` bekommst du die GPU Temperatur und nicht die CPU Temp.

    Solltest du wirklich die CPU Temperatur meinen, dann empfehle ich dir:

    Ja ich wollte die CPU Temperatur haben. Kann ich die drei Zeilen einfach so tauschen in dem Lüfter Script?



    Wenn Dein Script als user "pi" laufen kann/darf, dann kann man ein Autostart auch über die crontab realisieren.

    Hatte ich auch versucht aber klappte nicht. Ja klar kann es, es soll ja immer laufen wenn die Temperatur zu hoch ist.

  • So hier eine rc.local Datei die den Autostart vom Skript ausführen soll,

    macht Sie aber noch immer nicht::denker:


    Dann mein Skript fan.py das im Homeverzeichnis liegt (/home/pi/fan.py):


    Ich hoffe das ich das dann so richtig gemacht habe mit dem Absoluter Pfad zum Python Interpreter Linus!?:daumendreh2:

    Code
    usr/bin/python /home/pi/fan.py &
  • Moin Soddi,


    usr/bin/python /home/pi/fan.py &

    Code
    /usr/bin/python /home/pi/fan.py &

    Du solltest das so machen wie es in meinem Code steht.


    Kannst du mal in einer Konsole folgendes eingeben sudo systemctl status rc.local und das Ergebnis hier posten?


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Code
    pi@BMW316i:~ $ sudo -i
    root@BMW316i:~# sudo systemctl status rc.local
    ● rc-local.service - /etc/rc.local Compatibility
       Loaded: error (Reason: Bad message)
       Active: inactive (dead)
    
    Warning: Unit file changed on disk, 'systemctl daemon-reload' recommended.

    Hallo Bernd,

    also ich habe da ein Error bekommen. :denker:

  • Moin Soddi,


    hast du den Eintrag in der rc.local geändert, bevor du den Status abgefragt hast??


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Ja das habe ich gemacht und dann einen reboot durchgeführt.


    Was mir auch jetzt ausgefallen ist, ist das mein Taster zum Herunterfahren auch nicht mehr geht, nach all den Änderungen von heute.

    Also irgenwie steige ich nicht durch.:wallbash:


    Also nur die beiden Zeilen 21/22 sind doch in meiner rc.local Aktiv und sonst nichts, richtig?

    Hier mein Skript für den das ausschalten mittels Taster.

    Python
    #!/usr/bin/python3
    # Datei /home/pi/reboot.py
    import os, sys, time, RPi.GPIO as gpio
    gpio.setmode(gpio.BOARD)   # Pin-Nummern des P1/J8-Headers
    gpio.setup(21, gpio.IN)    # Pin 21 ist mit Reset-Button verbunden
    while 1:
      if gpio.input(21)==gpio.LOW:
        os.system("halt")
        sys.exit()
      time.sleep(0.3)
  • Moin Soddi,


    also, wenn das deine AKTUELLE rc.local ist, dann hast du die Änderung nicht gemacht!!


    # /home/pi/KY040/volume_regulator.py &
    usr/bin/python /home/pi/fan.py &
    python /home/pi/reboot.py

    VOR dem usr/bin MUSS ein / , also /usr/bin


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Sorry, war ein Fahler in meinen Beitrag, habe den editiert nochmal.:daumendreh2:


    So ist die rc.local Datei jetzt auf meinem RPi.

    /usr/bin/python /home/pi/fan.py &
    /home/pi/reboot.py


    Soll also heißen das es immer noch nicht geht bei mir;(

    Edited once, last by Soddi ().

  • Moin Soddi,


    und systemctl sagt immer noch "bad message" ??


    Mhm, dann mach mal sudo journalctl. Dann kommen viele Zeilen, aber er bleibt nach einer Seite stehen.

    dann tippe mal /rc.local ein. Es wird etwas gesucht und die gefundenen Stellen sollte farbig unterlegt sein.

    Beispiel:

    Code
    May 31 21:20:47 raspberrypi systemd[1]: Starting /etc/rc.local Compatibility...
    May 31 21:21:36 raspberrypi systemd[1]: Started /etc/rc.local Compatibility.

    Schau ob es in dem Bereich Fehlermeldungen gibt. Auch nach deinem Programmnamen.

    Du kannst weitersuchen, indem du einfach ein "/" eintippst. Gänsefüßchen weglassen.


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Servus Soddi ,

    ich würde am Anfang der /etc/rc.local mal die Zeile

    set -x 

    einfügen und die /etc/rc.local dann mal aus einem Terminal per Hand aufrufen.


    //EDIT: grad' erst gesehen ... das Starten aus einem Terminal hatte Bernd ja auch schon vorgeschlagen.


    Was tut eigentlich das script /home/pi/reboot.py ?

    Wenn es das tut, worauf der Name schliessen lässt, ist es keine clevere Idee, das in die /etc/rc.local einzubauen ...


    cu,

    -ds-

  • Moin ds,


    geile Idee!!

    Man kann die rc.local auch ohne set -x aufrufen.


    Zumindest bei mir...


    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.