[Python] Bose Soundtouch Multiroom depuis domoticz
Publié : 03 oct. 2017, 10:21
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.
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.
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])
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.