[Python] Bose Soundtouch Multiroom depuis domoticz

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
ayziaa
Messages : 25
Inscription : 29 janv. 2017, 17:16

[Python] Bose Soundtouch Multiroom depuis domoticz

Message par ayziaa »

Tuto page 2


Bonjour à tous,

Voici un librairie en python trouver sur le net permettant de commander des enceintes Bose Soundtouch depuis Domoticz mais également de les associées en maître et esclave pour créer un vrai multiroom.

Cette librairie très complète est basée sur l'api officiel de bose et permet donc:

- Multiroom
- Commande des presets (boutons sur l'enceinte)
- Commande de volume
- Mettre des musiques de sources différentes ( spotifty, url)
- Commandes : pause, play stop, passer une chansons...
- Mise en route des enceintes

la librairie:
https://github.com/CharlesBlonde/libsoundtouch

Ayant trouver aucun exemple ni tuto sur le net et n'y connaissant rien en pyhton j'ai bien galéré, je souhaitais donc partager un script que j'ai réalisé qui m'a permis de faire pas mal de choses. Je m'excuse par avance de la qualité de la programmation qui est vraiment pas très belle , de plus ce script s'applique à des situation particulière (avec 2 ou 3 enceintes uniquement) mais tout peut être modifier pour réaliser ce que vous souhaitez.

Code : Tout sélectionner

#!/usr/bin/python


import libsoundtouch

from libsoundtouch import discover_devices
from libsoundtouch import soundtouch_device
from libsoundtouch.utils import Source, Type

from libsoundtouch.device import NoSlavesException, NoExistingZoneException, \
    Preset, Config, SoundTouchDevice, SoundtouchInvalidUrlException






#Cherche les enceintes et les met dans la list devices
devices = discover_devices(timeout=5)

#On affiche le noms des enceintes et leurs type
for device in devices:
    print(device.config.name + " - " + device.config.type)


#On récupére le nombre d'enceinte détéctées
n_enceintes = len(devices)




#si il y a que 2 enceintes 
if n_enceintes == 2:
	enceinte_1, enceinte_2 = devices
	print n_enceintes
	name_enceinte1 = enceinte_1.config.name
	name_enceinte2 = enceinte_2.config.name
	if "Ma chambre" in  name_enceinte1: 
		print ("enceinte Ma chambre:" + name_enceinte1)  
		enceinte_ma_chambre = enceinte_1
		
	if "Salon" in  name_enceinte1:
                print ("enceinte salon:" + name_enceinte1)
		enceinte_salon = enceinte_1

	if "Cuisine" in  name_enceinte1:
                print ("enceinte Cuisine:" + name_enceinte1)
		enceinte_cuisine = enceinte_1
	
	if "Ma chambre" in  name_enceinte2:
                print ("enceinte Ma chambre:" + name_enceinte2)
                enceinte_ma_chambre = enceinte_2

        if "Salon" in  name_enceinte2:
                print ("enceinte salon:" + name_enceinte2)
                enceinte_salon = enceinte_2

        if "Cuisine" in  name_enceinte2:
                print ("enceinte Cuisine:" + name_enceinte2)
                enceinte_cuisine = enceinte_2


#Si il ya 3 enceintes
if n_enceintes == 3:
	enceinte_1, enceinte_2, enceinte_3 = devices
	print n_enceintes
	name_enceinte1 = enceinte_1.config.name
        name_enceinte2 = enceinte_2.config.name
	name_enceinte3 = enceinte_3.config.name 
        if "Ma chambre" in  name_enceinte1:
                print ("enceinte Ma chambre:" + name_enceinte1)
                enceinte_ma_chambre = enceinte_1

        if "Salon" in  name_enceinte1:
                print ("enceinte salon:" + name_enceinte1)
                enceinte_salon = enceinte_1

        if "Cuisine" in  name_enceinte1:
                print ("enceinte Cuisine:" + name_enceinte1)
                enceinte_cuisine = enceinte_1

        if "Ma chambre" in  name_enceinte2:
                print ("enceinte Ma chambre:" + name_enceinte2)
                enceinte_ma_chambre = enceinte_2

        if "Salon" in  name_enceinte2:
                print ("enceinte salon:" + name_enceinte2)
                enceinte_salon = enceinte_2

        if "Cuisine" in  name_enceinte2:
                print ("enceinte Cuisine:" + name_enceinte2)
                enceinte_cuisine = enceinte_2

	   if "Ma chambre" in  name_enceinte3:
                print ("enceinte Ma chambre:" + name_enceinte3)
                enceinte_ma_chambre = enceinte_3

        if "Salon" in  name_enceinte3:
                print ("enceinte salon:" + name_enceinte3)
                enceinte_salon = enceinte_3

        if "Cuisine" in  name_enceinte3:
                print ("enceinte Cuisine:" + name_enceinte3)
                enceinte_cuisine = enceinte_3



#creation du multiroom ici l'enceinte du salon est maitre
enceinte_salon.create_zone([enceinte_cuisine, enceinte_ma_chambre])

#on récupere les préselections de l'enceinte du salon
presets = enceinte_salon.presets()

#On selection la Prés. 1 sur enceinte salon
enceinte_salon.select_preset(presets[0])
Après avoir utilisé la commande définissant une enceinte comme maître et les autres comme esclave elles sont liées jusqu’à qu'elles soient éteintes.
Cette fonction permet de faire du Multiroom à travers les présélections ou commandes envoyées par le scripts (URL, spotify...) mais aussi, vous pourrez envoyer sur l'enceinte définie comme maître du contenu en airplay (si elle est compatible air play) qui sera donc diffusé de manière synchronisée sur toutes les enceintes.
Dernière modification par ayziaa le 20 nov. 2017, 23:23, modifié 1 fois.
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: [Python] Bose Soundtouch Multiroom depuis domoticz

Message par Chrominator »

Très intéressant, justement je viens de noter quelques objectifs autour de ton thème dans ma todo list ! :D

Je vais regarder ce que tu as fait dès que possible, j'ai hâte.
Merci.
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
ayziaa
Messages : 25
Inscription : 29 janv. 2017, 17:16

Re: [Python] Bose Soundtouch Multiroom depuis domoticz

Message par ayziaa »

Très content que ça puisse intéresser. J'ai pas commenté les bloques if car en pyhton j'ai pas l’habitude et il me sembles que les bloques doivent resté bloque,je vais essayer de commenter quelques lignes ci-dessous pour ceux qui comme moi ne connaîtrait rien au Python.

Code : Tout sélectionner

#si il y a que 2 enceintes
if n_enceintes == 2:	 
   enceinte_1, enceinte_2 = devices    	#'Unpacking' de la liste d'enceinte en deux variable
   print n_enceintes
   name_enceinte1 = enceinte_1.config.name	 #récupération du nom de l'enceinte qu'on met en variable
   name_enceinte2 = enceinte_2.config.name	 #même chose
   if "Ma chambre" in  name_enceinte1:  	#On cherche la string "Ma chambre dans la variable name_enceinte1
      print ("enceinte Ma chambre:" + name_enceinte1)  
      enceinte_ma_chambre = enceinte_1 #l'enceinte_1 devient enceinte_ma chambre pour pouvoir donner plus facilement l'atribu maître/esclave
      								#et on recommence
   if "Salon" in  name_enceinte1:
                print ("enceinte salon:" + name_enceinte1)
      enceinte_salon = enceinte_1

   if "Cuisine" in  name_enceinte1:
                print ("enceinte Cuisine:" + name_enceinte1)
      enceinte_cuisine = enceinte_1
   
   if "Ma chambre" in  name_enceinte2:
                print ("enceinte Ma chambre:" + name_enceinte2)
                enceinte_ma_chambre = enceinte_2

        if "Salon" in  name_enceinte2:
                print ("enceinte salon:" + name_enceinte2)
                enceinte_salon = enceinte_2

        if "Cuisine" in  name_enceinte2:
                print ("enceinte Cuisine:" + name_enceinte2)
                enceinte_cuisine = enceinte_2

ayziaa
Messages : 25
Inscription : 29 janv. 2017, 17:16

Re: [Python] Bose Soundtouch Multiroom depuis domoticz

Message par ayziaa »

La commande des presets ne fonctionne pas si un ou plusieurs presets ont des accents et peut être aussi des caractères spéciaux.
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

Re: [Python] Bose Soundtouch Multiroom depuis domoticz

Message par Phebus06 »

Bonjour, tu as quoi comme Bose sound touch ? et sont elles toutes compatibles ?
ayziaa
Messages : 25
Inscription : 29 janv. 2017, 17:16

Re: [Python] Bose Soundtouch Multiroom depuis domoticz

Message par ayziaa »

A partir du moment ou c'est des Soundtouch c'est compatible. Par contre toutes les Bose ne sont pas Soundtouch.

Regarde là: https://www.soundtouch.com/
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

Re: [Python] Bose Soundtouch Multiroom depuis domoticz

Message par Phebus06 »

Ah oui, merci :D
lreymond
Messages : 18
Inscription : 25 nov. 2016, 20:06

Re: [Python] Bose Soundtouch Multiroom depuis domoticz

Message par lreymond »

Bonjour Ayziaa,
Le sujet m’intéresse ayant 2 soundtouch et domoticz sur raspberry pi3.
Je souhaiterai pouvoir lancer un radio sur les 2 enceintes en multiroom a partir de domoticz et ensuite planifier le lancement à un heure donnée.
Il semblerait que ton script permette de la faire, par contre, il me manque des compétences pour le mettre en oeuvre.
Pourrais-tu m'orienter vers les étapes à réaliser? :roll:
Louis
ayziaa
Messages : 25
Inscription : 29 janv. 2017, 17:16

Re: [Python] Bose Soundtouch Multiroom depuis domoticz

Message par ayziaa »

Oui on peut tout à fait faire ça. Il faudrait que tu me dise quelles sont tes compétences pour que je puisse t'aider.
ayziaa
Messages : 25
Inscription : 29 janv. 2017, 17:16

Re: [Python] Bose Soundtouch Multiroom depuis domoticz

Message par ayziaa »

Peut etre qu'il faudrait que je fasse un tuto
Répondre