Liebe Leute,
seit einer Weile nutze ich meinen pi 3b als always-on Bluetooth-Lautsprecher. Auf dem gleichen pi läuft zusätzlich auch ein squeezelite player, der leider jedesmal abstürzt, wenn ich eine Audioquelle an den pi über bluetooth anschließe. Ich habe jetzt ein passendes python script auf github gefunden, das den squeezelite player neu startet, wenn bluetooth getrennt wird, nur gibt es dabei ein Problem: Das script bezieht sich auf den pi als Bluetooth-Audioquelle während es bei mir ja darum geht, den pi als Bluetooth-Empfänger anzusteuern. Ich brauche jetzt Hilfe dabei, das script so anzupassen, dass es den bluetooth-Verbindungsstatus des pi überwacht und squeezelite neu startet wenn bluetooth getrennt wird und anhält, wenn sich eine Audioquelle mit dem pi über blouetooth verbindet. Das script sieht so aus:
#!/usr/bin/python3 -u
from __future__ import absolute_import, print_function, unicode_literals
from gi.repository import GObject as gobject
import dbus
import dbus.mainloop.glib
import os
dbg = False
def debug(*args):
if dbg == True:
print(*args)
def connected():
print("Connected")
os.system("sudo systemctl stop squeezelite.service")
def disconnected():
print("Disconnected")
os.system("sudo systemctl restart squeezelite.service")
def catchall_handler(name, attr, *args, **kwargs):
"""Catch all handler.
Catch and debug information about all singals.
"""
debug('---- Caught signal ----')
debug('name:', name)
debug('kwargs:', len(kwargs))
for key,val in kwargs.items():
debug("* {} = {}".format(key, val))
debug("\n")
debug('Arguments:')
for arg in args:
debug('* %s ' % (str(arg)))
debug("\n")
if name != "org.bluez.MediaControl1" :
return
debug("attr[Connected]=",attr["Connected"])
if attr["Connected"] == 0 :
disconnected()
if attr["Connected"] == 1 :
connected()
if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
bus.add_signal_receiver(catchall_handler, bus_name="org.bluez", interface_keyword='dbus_interface', member_keyword='member', path_keyword='path')
mainloop = gobject.MainLoop()
mainloop.run()
Display More
Hat jemand eine Idee, was ich ändern muss, damit es funktioniert?