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
import RPi.GPIO as GPIO
import time
SENSOR_PIN = 4
GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PIN, GPIO.IN)
def mein_callback(channel):
# Hier kann alternativ eine Anwendung/Befehl etc. gestartet werden.
import os
os.system('mpg123 /home/pi/Music/taichi/beatingheart.mp3 -q &')
try:
GPIO.add_event_detect(SENSOR_PIN , GPIO.RISING, callback=mein_callback)
while True:
time.sleep(100)
except KeyboardInterrupt:
print "Beende..."
GPIO.cleanup()
Alles anzeigen
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:
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