Ich habe hier eine ähnliche Idee und Lösung, wollte aber mal kurz checken, ob es hier nicht was Nobleres gibt. Falls nicht könnte der Code ja noch für den einen oder anderen hilfreich sein..
Anforderung: Ich möchte über 2 KNX Taster zwei verschiedene Playlisten vie Squeezebox laden und abspielen. Dabei soll sowohl beim Start als auch beim Ausschalten langsam gefadet werden. Wechsle ich während des Fadens die Playliste, soll normal weiter gefadet werden, jetzt aber eben mit der anderen Musik. Sollte ich während des Fadeout auf die Idee kommen, ich möchte doch noch weiter hören, soll das auch ohne Komplikation funktionieren.
Die Lösung sieht nun bei mir so aus:
Beide KNX Taster triggern "leere" Squeezeboxitems, die dem Triggern einer Logik dienen. Die entsprechende Playliste wird geladen und dann wird ein separates "Fade"-Item auf den gewünschten Lautstärkewert gesetzt, was wiederum eine eigene Fade-Logik und damit einen eigenen Thread aufruft. Diese sieht nun wie folgt aus:
Code:
logger.info(trigger)
vol = sh.Squeezebox.Volume()
stepping = 2
time = 25000
vol_playlist1 = 70
vol_playlist2 = 55
goal = trigger['value']
logger.debug("Erhaltener Wert: "+str(goal))
if goal > 0:
logger.debug("Run Fade In")
vol += stepping
sh.Squeezebox.Volume(vol)
if (vol + stepping) > goal:
logger.debug("Ende Fade In. Stop")
sh.Squeezebox.Volume(goal)
# alle Dinge, die passieren sollen, sobald fertig gefadet ist.
exit()
else:
next_time = sh.now() + dateutil.relativedelta.relativedelta(microseconds=time)
sh.scheduler.change('vol_fade', next=next_time, value=goal)
if goal == 0:
logger.debug("Run Fade Out")
vol -= stepping
sh.Squeezebox.Volume(vol)
if (vol - stepping) <= goal:
logger.debug("Ende Fade Out. Status aus")
sh.Squeezebox_KG.Power(0)
logger.debug("Squeezebox aus.")
# alle Dinge, die passieren sollen, sobald fertig gefadet ist.
exit()
else:
next_time = sh.now() + dateutil.relativedelta.relativedelta(microseconds=time)
sh.scheduler.change('vol_fade', next=next_time, value=goal)




Einen Kommentar schreiben: