Page 1 sur 1
Piloter la Soundtouch 500 Bose avec Domoticz
Publié : 13 févr. 2020, 21:06
par Tchill73
Bonjour à tous,
Je cherche à piloter (mettre on/off, changer les preset, volume, source) ma soudtouch 500 (barre de son).
Je viens d'installer la librairie:
https://github.com/CharlesBlonde/libsoundtouch
J'ai fixé l'IP de la soundtouch avec la box avec le port 8060
J'ai essayer quelques scripts mais rien ne marche.
Est-ce que quelqu'un pourrai m'indiquer la marche à suivre avec le bon script ?
et les commandes test sur PI et sur l'interrupteur dimer domoticz
Merci par avance, je viens de passer une semaine à faire des tests je perds espoir de prendre la main sur la barre de son.
Je vais bien prendre la barre de fer

Re: Piloter la Soundtouch 500 Bose avec Domoticz
Publié : 15 févr. 2020, 14:05
par Chrominator
Tu pourras peut-être t'inspirer de celui-là.
Je m'en sers tous les matins pour me réveiller avec la radio depuis plus de 2 ans.
J'ai un interrupteur dans DZ avec un planning.

- Screenshot_2020-02-15 Domoticz.png (21.18 Kio) Consulté 5500 fois
exec.sh c'est simplement ça dans domoticz/scripts
Code : Tout sélectionner
#!/bin/sh
/home/pi/domoticz/scripts/$1 $2 $3 $4 $5 $6 $7 $8 $9> /dev/null 2>&1 &
Le script pour piloter les soundtouch :
Code : Tout sélectionner
#!/usr/bin/python3
# -*- coding: utf-8 -*-
'''-------------------------------------------------------------------------------------------------
Script permettant de créer une zone multiroom Bose avec toutes les enceintes
Auteur : Chrominator
Version 0.1
Changes :
2017-11-26 : Version initiale
Principe : Récupère les paramètres enceinte maîtresse, volume du son, présélection
et crée une zone multiroom avec toutes les enceintes trouvées.
les paramètres sont --volume <volume_level> -master <master_device> -preset <# preset> -s <switch on or off>
Le switch on crée la zone multiroom, off la supprime et éteint les enceintes.
exemples : bose_all.py --master bureau --volume 10 --preset 6 -s on
bose_all.py -s off
-------------------------------------------------------------------------------------------------'''
import sys, getopt
import os
import urllib
import requests
import libsoundtouch # https://github.com/CharlesBlonde/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
from urllib.request import urlopen
URL_DOMOTICZ = 'http://127.0.0.1:8080/json.htm?type='
def DomoticzData(cmd, get=False):
url = URL_DOMOTICZ + cmd
result = requests.get(url)
def SendMessage(msg, colour="SaddleBrown", bg="LemonChiffon"):
data = urllib.parse.quote('<COLOR="' + colour + '" style="BACKGROUND-COLOR: ' + bg + '">' + os.path.basename(__file__) + ' : ' + msg + '</font>')
cmd = "command¶m=addlogmessage&message=" + data
DomoticzData(cmd)
print(os.path.basename(__file__) + ' : ' + msg)
def main(argv):
volume = '' # Niveau de volume initial pour la création du groupe multiroom, de 1 à 100.
masterdev = '' # Nom de l'enceinte qui commandera le groupe multiroom.
master = ''
chaine = '' # Preset à sélectionner pour le multiroom : de 1 à 6, correspondent aux boutons de la télécommande.
switch = '' # Spécifie si on crée le multiroom ou si on le supprime : ON ou OFF.
try:
opts, args = getopt.getopt(argv,"hv:m:p:s:",["volume=","master=","preset=","switch="])
except getopt.GetoptError:
SendMessage (os.path.basename(__file__) + ' -v <volume_level> -m <master_device> -p <preset> -s <switch on or off>')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
SendMessage (os.path.basename(__file__) + ' -v <volume_level> -m <master_device> -p <preset> -s <switch on or off>')
sys.exit()
elif opt in ("-v", "--volume"):
volume = arg
elif opt in ("-p", "--preset"):
chaine = arg
elif opt in ("-s", "--switch"):
switch = arg
elif opt in ("-m", "--master"):
masterdev = arg
if switch.upper() not in ("ON", "OFF"):
SendMessage('--switch : Le switch doit être ON ou OFF')
sys.exit(2)
devices = discover_devices(timeout=5)
for device in devices:
SendMessage ("Enceinte " + device.config.name + " mise hors fonction.")
device.power_off()
if switch.upper() != "ON":
SendMessage ("Arrêt du multiroom.")
sys.exit(2)
if masterdev == '':
SendMessage ('Aucune enceinte maître définie : Arrêt du programme')
sys.exit(2)
if chaine == '':
chaine = '0'
SendMessage ('Présélection sélectionnée par défaut')
elif not chaine.isnumeric():
SendMessage ('Présélection ' + chaine + ' invalide. Valeurs autorisées de 1 à 6')
sys.exit(2)
elif int(chaine) not in range(1, 7):
SendMessage ('Préselection ' + chaine + ' invalide. Valeurs autorisées de 1 à 6')
sys.exit(2)
if volume == '':
volume = '20'
SendMessage ('Volume sélectionné par défaut.')
elif not volume.isnumeric():
SendMessage ('Le volume doit être compris entre 1 et 100.')
sys.exit(2)
elif int(volume) not in range(1, 101):
SendMessage ('Le volume doit être compris entre 1 et 100.')
sys.exit(2)
SendMessage ('Preset is set to ' + chaine)
SendMessage ('Volume is set to ' + volume)
SendMessage ('Master device is set to ' + masterdev)
#Noms des enceintes et types
for device in devices:
if device.config.name.upper() == masterdev.upper():
device.create_zone(devices)
master = device
device.set_volume(int(volume))
SendMessage ('Device trouvé: ' + device.config.name + " - " + device.config.type + " - volume forcé à " + str(device.volume().actual))
if master == '':
SendMessage ("L'enceinte " + masterdev + " n'existe pas. Arrêt du programme.")
else:
# Nombre d'enceintes en multiroom
SendMessage ('Multiroom activé sur ' + str(len(devices)) + ' enceintes.')
#ici on récupere les presets
presets = master.presets()
index = int(chaine)-1
SendMessage ('Préselection n°' + chaine + ' choisie : ' + presets[index].name + ' ' + presets[index].source)
master.select_preset(presets[index]) # 6 presets de 0 à 5
if __name__ == "__main__":
main(sys.argv[1:])
Re: Piloter la Soundtouch 500 Bose avec Domoticz
Publié : 18 févr. 2020, 22:30
par Tchill73
Bonsoir,
Merci pour ta réponse,

. J'ai essayé à plusieurs reprises reprises mais je n'obtiens pas de résultat.
J'ai crée ce code dans le dossier dossier domoticz/scripts/
sudo nano exec.sh
Code : Tout sélectionner
#!/bin/sh
/home/pi/domoticz/scripts/$1 $2 $3 $4 $5 $6 $7 $8 $9> /dev/null 2>&1 &
puis sudo nano bose.py
en mettant l'IP domoticz dans le script
Code : Tout sélectionner
#!/usr/bin/python3
# -*- coding: utf-8 -*-
'''-------------------------------------------------------------------------------------------------
Script permettant de créer une zone multiroom Bose avec toutes les enceintes
Auteur : Chrominator
Version 0.1
Changes :
2017-11-26 : Version initiale
Principe : Récupère les paramètres enceinte maîtresse, volume du son, présélection
et crée une zone multiroom avec toutes les enceintes trouvées.
les paramètres sont --volume <volume_level> -master <master_device> -preset <# preset> -s <switch on or off>
Le switch on crée la zone multiroom, off la supprime et éteint les enceintes.
exemples : bose_all.py --master bureau --volume 10 --preset 6 -s on
bose_all.py -s off
-------------------------------------------------------------------------------------------------'''
import sys, getopt
import os
import urllib
import requests
import libsoundtouch # https://github.com/CharlesBlonde/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
from urllib.request import urlopen
URL_DOMOTICZ = 'http://[b][b]127.0.0.1:8080[/b][/b]/json.htm?type='
def DomoticzData(cmd, get=False):
url = URL_DOMOTICZ + cmd
result = requests.get(url)
def SendMessage(msg, colour="SaddleBrown", bg="LemonChiffon"):
data = urllib.parse.quote('<COLOR="' + colour + '" style="BACKGROUND-COLOR: ' + bg + '">' + os.path.basename(__file__) + ' : ' + msg + '</font>')
cmd = "command¶m=addlogmessage&message=" + data
DomoticzData(cmd)
print(os.path.basename(__file__) + ' : ' + msg)
def main(argv):
volume = '' # Niveau de volume initial pour la création du groupe multiroom, de 1 à 100.
masterdev = '' # Nom de l'enceinte qui commandera le groupe multiroom.
master = ''
chaine = '' # Preset à sélectionner pour le multiroom : de 1 à 6, correspondent aux boutons de la télécommande.
switch = '' # Spécifie si on crée le multiroom ou si on le supprime : ON ou OFF.
try:
opts, args = getopt.getopt(argv,"hv:m:p:s:",["volume=","master=","preset=","switch="])
except getopt.GetoptError:
SendMessage (os.path.basename(__file__) + ' -v <volume_level> -m <master_device> -p <preset> -s <switch on or off>')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
SendMessage (os.path.basename(__file__) + ' -v <volume_level> -m <master_device> -p <preset> -s <switch on or off>')
sys.exit()
elif opt in ("-v", "--volume"):
volume = arg
elif opt in ("-p", "--preset"):
chaine = arg
elif opt in ("-s", "--switch"):
switch = arg
elif opt in ("-m", "--master"):
masterdev = arg
if switch.upper() not in ("ON", "OFF"):
SendMessage('--switch : Le switch doit être ON ou OFF')
sys.exit(2)
devices = discover_devices(timeout=5)
for device in devices:
SendMessage ("Enceinte " + device.config.name + " mise hors fonction.")
device.power_off()
if switch.upper() != "ON":
SendMessage ("Arrêt du multiroom.")
sys.exit(2)
if masterdev == '':
SendMessage ('Aucune enceinte maître définie : Arrêt du programme')
sys.exit(2)
if chaine == '':
chaine = '0'
SendMessage ('Présélection sélectionnée par défaut')
elif not chaine.isnumeric():
SendMessage ('Présélection ' + chaine + ' invalide. Valeurs autorisées de 1 à 6')
sys.exit(2)
elif int(chaine) not in range(1, 7):
SendMessage ('Préselection ' + chaine + ' invalide. Valeurs autorisées de 1 à 6')
sys.exit(2)
if volume == '':
volume = '20'
SendMessage ('Volume sélectionné par défaut.')
elif not volume.isnumeric():
SendMessage ('Le volume doit être compris entre 1 et 100.')
sys.exit(2)
elif int(volume) not in range(1, 101):
SendMessage ('Le volume doit être compris entre 1 et 100.')
sys.exit(2)
SendMessage ('Preset is set to ' + chaine)
SendMessage ('Volume is set to ' + volume)
SendMessage ('Master device is set to ' + masterdev)
#Noms des enceintes et types
for device in devices:
if device.config.name.upper() == masterdev.upper():
device.create_zone(devices)
master = device
device.set_volume(int(volume))
SendMessage ('Device trouvé: ' + device.config.name + " - " + device.config.type + " - volume forcé à " + str(device.volume().actual))
if master == '':
SendMessage ("L'enceinte " + masterdev + " n'existe pas. Arrêt du programme.")
else:
# Nombre d'enceintes en multiroom
SendMessage ('Multiroom activé sur ' + str(len(devices)) + ' enceintes.')
#ici on récupere les presets
presets = master.presets()
index = int(chaine)-1
SendMessage ('Préselection n°' + chaine + ' choisie : ' + presets[index].name + ' ' + presets[index].source)
master.select_preset(presets[index]) # 6 presets de 0 à 5
if __name__ == "__main__":
main(sys.argv[1:])
et j'ai crée l'interrupteur mais ça ne marche pas.
Re: Piloter la Soundtouch 500 Bose avec Domoticz
Publié : 18 févr. 2020, 22:31
par Tchill73
Re: Piloter la Soundtouch 500 Bose avec Domoticz
Publié : 19 févr. 2020, 00:06
par Chrominator
Le script python bien évidemment va dans ~/domoticz/scripts/python.
Faut pas utiliser sudo quand on en a pas besoin.
As-tu pris en compte les paramètres nécessaire à l'exécution du script ?
ils sont en commentaires, lire le début du script peut servir.
Re: Piloter la Soundtouch 500 Bose avec Domoticz
Publié : 19 févr. 2020, 20:35
par Tchill73
Merci de ton aide, je perdais espoir.
J'ai mise le scripte dans le répertoire python.
~/domoticz/scripts/python.
En ce qui concerne les commandes pour l'exécution du script.
J'ai bien lu le script mais je début avec Linux donc cela ma parle pas trop.
Il s'agit de
ou de
je n'ai pas inscris de ligne de commande dans le Raspberry. C'est là que ça doit bloquer.
De plus, je n'ai pas trouver ou indiquer l'IP de la soundtouch dans le script.

Re: Piloter la Soundtouch 500 Bose avec Domoticz
Publié : 19 févr. 2020, 21:23
par Chrominator
J'ai donné ce script pour que tu puisses t'en inspirer.
La bibliothèque que tu as trouvé est écrite en Python, mon script aussi.
Évidemment si Python t'es étranger, ça va être compliqué.
Je viens d'en lire un peu plus sur ton produit, je pense qu'il n'est pas compatible avec la bibliothèque que tu as trouvé, faite pour le multiroom.
C'est même écrit en toutes lettres sur le site développeur de Bose :
https://developer.bose.com/content/new-api-new-product-line a écrit :Also, for the sake of clarity: the SoundTouch API will only work with SoundTouch products, and the Smart Home API will only work with our new smart speakers and soundbars - in other words, the new products will not be compatible with the SoundTouch API and SoundTouch products will not be controllable by the Smart Home API.
Désolé, il faudrait demander à Bose de publier la documentation relative aux API pour Bose Home Soundtouch, ce qui ne semble pas exister à date.
Piloter ta barre de son avec autre chose que les app Android ou IOS n'est pas prévu pour l'instant.
Désolé.
Re: Piloter la Soundtouch 500 Bose avec Domoticz
Publié : 19 févr. 2020, 22:13
par Tchill73
bon en tout cas merci

Top