Script für Bewegungmelder und mpd

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Leute,

    ich hatte im Thread "Wie sage ich es in Python" zu meinem Problem gepostet und dort auch verschiedene Lösungsansätze angeboten bekommen. Nachdem ich nun viele Tage gelesen und probiert habe aber einfach nicht zu einer Lösung komme, bitte ich noch einmal um Eure Hilfe. Mein Grundproblem liegt sicher darin, dass ich keine Ahnung von Python habe. Ich schaffe es zwar ein Wenig das Prinzip in den Scripten nachzuvollziehen, aber auch nur bedingt. Hatte gehofft, dass ich mir mit ein paar Scripten selber was zusammen basteln kann, das hat aber nicht funktioniert.

    Ich möchte eigentlich etwas ganz einfachen. Einen Bewegungsmelder an den Pi und wenn er eine Bewegung erkennt, soll er über mpg123 oder mpd vorgegebene Musik abspielen. Hatte das Script dann soweit


    Nun hat er bei jeder Bewegung das Lied abgespielt. Da sich dann aber mehrere Instanzen überlagern, ist das keine Lösung.

    Meine Anfrage im o.g. Thread brachte folgende Lösungsansätze:

    1. Im Python programmieren, dass er vor dem Start des Abspielprogrammes checkt, ob das Programm schon läuft?
    Bootsmann hatte folgenden Tipp:

    Code
    def check_if_mp3_running(channel):
       if #prozess auslesen:
           pass
       else:
           play_mp3()
           
    
    
    def play_mp3():
    subprocess....

    aber da komme ich nicht weiter. Ich weiß nicht, wie ich ihm sagen soll, dass er dem mpg123 prozess oder mpd prozess auslesen soll.

    2. Ansteuern über den mpd
    habe das hier gefunden aber es ist viel komplexer und ich bekomme es nicht auf meine Bedürfnisse angepasst.

    3. das einfache Script hier (danke Bootsmann) das funktioniert auch mit der Meldung der Bewegung. Wenn ich aber versuche mit os.system statt print zu arbeiten funktioniert es nicht.

    Stehe gerade ganz schön auf dem Schlauch. Meine Suchen zu Prozess IDs erkennen oder Scripten von Bewegungmeldern bringen mich auch nicht richtig weiter. Es wäre super, wenn Ihr mir Hilfestellungen geben könntet.

    Gruß
    Hakupapa

  • Hallo,

    Zitat

    aber da komme ich nicht weiter. Ich weiß nicht, wie ich ihm sagen soll, dass er dem mpg123 prozess oder mpd prozess auslesen soll.


    Wenn die `subprocess.Popen(...)` benutzt, dann bekommst du als Rückgabewert einen Instanz von Popen. Die wiederum hat ein Attribut `pid`, welches die Prozess-ID des Prozesses enthält.

    Hört sich vielleicht komisch an, ist aber ganz einfach. Einfach mal mit einem lang laufenden Prozess (wie dem Abspielen eines MP3 Files) ausprobieren.

    Eleganz ist IMHO auch auch MPD mit den passenden Python-Bindungs. In dem einen von dir genannten Link ist das ja ganz gut gezeigt. Was verstehst du da denn nicht bzw. was bekommst du nicht angepasst? Wenn du Code (egal, wie falsch der ist) zeigst, ist helfen wesentlich einfacher.

    Gruß, noisefloor

    Einmal editiert, zuletzt von noisefloor (19. Dezember 2016 um 20:29)

  • Hallo noisefloor,

    vielen Dank für den Ansatz mit Popen. Da war ich bei der Recherche zu Prozessaktivitäten auch schon mal drauf gestoßen. Mein Versuch dazu sieht wie folgt aus:

    Bin mir sicher, dass man gut erkennt, dass ich nicht wirklich weiß, was ich da tue. Aber Du hast ja gesagt, egal wie schlecht er ist. ;)

    Und hier ist mein Versuch zu Variante 2:

    Einmal editiert, zuletzt von Hakupapa (20. Dezember 2016 um 08:37)

  • Hallo,

    beide Ansätze sind so n.i.O. Du musst `mpg123` über `subprocess.Popen(...)`starten, `os.system(...)` brauchst du gar nicht (zumal es gegenüber `subprocess`veraltet ist).

    Wenn du dnan sowas wie `p=subprocess.Popen(['mpg123', '/home/pi/Music/taichi/beatingheart.mp3'])`das Prog startest, solltest du mit `p.pid` prüfen, ob der Prozess noch läuft. Am besten mal in interaktiven Python-Terminal testen.

    Wie du den Prozess dann stoppst kannst du in der Doku nachlesen: https://docs.python.org/3/library/subprocess.html

    Gruß, noisefloor

  • Hallo Noisefloor,

    danke für Deine Hilfe und Geduld! Ich hab leider das Gefühl, dass ich nur im Trüben fische und an meine Grenzen stoße. Ich sollte mich wohl erstmal mit grundlegenden Programmierkenntnissen beschäftigen, bevor ich am Code rumspiele.

    Sag mal gibt es nicht eine Plattform o.ä., wo man sich solche Dienstleistungen einkaufen kann?
    Gruß
    Hakupapa

Jetzt mitmachen!

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