Skript für Bewegungserkennung funktioniert nicht

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Du kannst das probieren, ich persoenlich halte das aber fuer irrelevant. Obendrauf sollte man eigentlich so wenig wie moeglich mit Superuser-Rechten tun - wenn die GPIOs das also nicht brauchen, sondern nur deine Backlight-Kontrolle, dann ist das schon ok das auch darauf zu beschraenken.

    Ein kurzer Zwischenversuch koennte aber so aussehen, dass du

    - die sudos aus den os.system-calls entfernst
    - dafuer das Python-Skript mit sudo startest.

    Das sollte mindestens mal so funktionieren wie vorher - also, bis zum ersten mal. Ob's danach weiter tut werden wir dann sehen.

  • Hi,

    ich habe es nun zum Laufen bekommen, so scheint es mir.
    Ich habe mit

    Code
    f = open("/sys/class/backlight/rpi_backlight/bl_power","w")
    f.write('1')
    f.close()


    den Dateischreib-Kram angepasst und lasse das Python Skrip mit sudo starten. Das scheint soweit gut zu klappen, wird sich nun mal im Langzeit Test zeigen was ich noch verbessern kann.
    Und es läuft auch länger als 60sek ;)
    Vielen vielen vielen Dank für eure Hilfe!!!!!!

    Einmal editiert, zuletzt von Sirel (25. Juni 2016 um 13:55)

  • Sehr seltsam, dass das einen Unterschied macht - aber wenn's funktioniert, dann ist ja gut.

    Statt das zwei mal hinzuschreiben mit der Datei wuerde ich das so machen:

    Code
    def switch_backlight(on_or_off):
           with open("/sys/class/backlight/rpi_backlight/bl_power","w") as outf:
                     outf.write('1' if on_or_off or '0')
    
    
    switch_backlight(True)
    switch_backlight(False)
    # bzw gleich in den monitor_*-Funktionen
    switch_backlight(monitor_status)
  • Erm. Das war ein Fehler, da hatte ich noch etwas anderes ausprobiert & dann ueberlegt das doch nicht vorzuschlagen. Ich hab's entfernt.

  • Ich möchte nur noch mal anmerken das es eine schlechte Idee ist die while ungebremst rotieren zu lassen... Aber nunja, 17 Beiträge später: ich verkneif mir weitere kommentare

  • Siehe Beitrag#7 und vergleiche den entsprechenden Part mit deinem. Durch die von Dir verwendete Einrückung wird der sleep nur dann ausgeführt wenn die "if" Bedingung zutrifft und monitor_aus() ausgeführt wird. Wenn die "if" aber nicht zutrifft rotiert die while unheimlich schnell und verursacht 100% CPU Last, was wiederum dazu führt das auch das Script selbst und der Interrupt ausgebremst wird - teufelskreislauf.
    Auch das was letztlich dazu führte dass das Script nun zu funktionieren scheint, hatte ich in Beitrag#10 aufgezeigt, was aber vermutlich dank eines gewissen Users unter ging...

  • meigrafd: spar dir dein rumgeätze. Ich habe ja den groben Fehler begangen etwas zu benutzen, dass ich nicht erklärt habe. Laut dir eine üble Sünde. Eine Erklärung *warum* du kein sudo in os.system, sondern auf Skript-Ebene haben willst, und welche Auswirkung auf das Problem das hat, habe ich noch nicht gesehen. Also, so geht das ja - laut dir - gar nicht. Ich bin gespannt woran das liegt. Ganz im Ernst. Ich kann's mir nicht erklären, warum das einen Unterschied macht.

  • Etwas via "os.system" oder "subprocess" auszuführen ist i.d.R. langsamer als es nativ umzusetzen - stimmst du damit überein?

    Es wäre möglich, dass das zusätzlich "sudo" im "os.system" an dem Phänomen, welches es hier zu geben scheint, Schuld ist. Führt man das Script direkt mit sudo einmalig aus ist die Situation eine andere als ständige sudo Aufrufe innerhalb des Scripts.
    Ggf. kann man auch vollständig auf sudo verzichten sofern die Dateirechte entsprechend gesetzt sind, das kann ich jetzt grad nicht ausprobieren.


    Ich fand nur deine Antwort zu meiner "zweifelhaftem lock" Aussage ziemlich frosch und unpassend. Ob oder was eine Sünde ist möchte ich 2 Tage später nicht weiter ausdiskutieren, muss irgendwann auch mal gut sein. Damit ist keinem geholfen. Gemeinsam an Problemen arbeiten, nicht Gegeneinander konkurieren.

  • Hi noch einmal,

    der ursprüngliche Plan sah ja so aus, dass ich nachts via 433mhz Sender dann auch eine Lampe schalte.
    Dazu führe ich den folgenden Befehl aus:

    Code
    /home/pi/raspberry-remote/send 11000 1 1

    In Python hatte ich das so gemacht:

    Code
    os.system('/home/pi/raspberry-remote/send 11000 1 1')

    Allerdings ist dann wieder das gleiche Phänomen vorhanden wie schon vorher, also irgendwie wird das "os.system" scheinbar nicht so gerne gemocht.

    Wisst ihr auch eine Alternative dazu vielleicht?


    Danke & viele Grüße

  • Eine brauchbare Alternative zu der sehr weit verbreiteten send.cpp Variante ist für Python das "pi_switch" Module: https://github.com/lexruee/pi-switch-python

  • Notwendig ist das keinesfalls. Ein Python Script über ein Python Script mithilfe von subprocess/os.system auszuführen ist eine Todsünde :fies:

    Andere Python Scripts importiert man wie Module und kann dann die Funktionen/Klassen des anderen Scripts ausführen - sofern es entsprechend geschrieben ist.

Jetzt mitmachen!

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