Piloter la Soundtouch 500 Bose avec Domoticz

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
Répondre
Tchill73
Messages : 7
Enregistré le : 12 févr. 2020, 23:06

Piloter la Soundtouch 500 Bose avec Domoticz

Message par Tchill73 » 13 févr. 2020, 21:06

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 :lol:

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Chrominator
Messages : 446
Enregistré le : 19 déc. 2015, 07:29

Re: Piloter la Soundtouch 500 Bose avec Domoticz

Message par Chrominator » 15 févr. 2020, 14:05

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
Screenshot_2020-02-15 Domoticz.png (21.18 Kio) Vu 197 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&param=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:])

Tchill73
Messages : 7
Enregistré le : 12 févr. 2020, 23:06

Re: Piloter la Soundtouch 500 Bose avec Domoticz

Message par Tchill73 » 18 févr. 2020, 22:30

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&param=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.

Tchill73
Messages : 7
Enregistré le : 12 févr. 2020, 23:06

Re: Piloter la Soundtouch 500 Bose avec Domoticz

Message par Tchill73 » 18 févr. 2020, 22:31

J'ai aussi suivi ce tuto pour un autre model mais rien.

https://www.domoticz.com/forum/viewtopi ... 64&t=22348
:oops: :oops: :oops: :oops:

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Chrominator
Messages : 446
Enregistré le : 19 déc. 2015, 07:29

Re: Piloter la Soundtouch 500 Bose avec Domoticz

Message par Chrominator » 19 févr. 2020, 00:06

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.

Tchill73
Messages : 7
Enregistré le : 12 févr. 2020, 23:06

Re: Piloter la Soundtouch 500 Bose avec Domoticz

Message par Tchill73 » 19 févr. 2020, 20:35

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

Code : Tout sélectionner

#!/usr/bin/python3
# -*- coding: utf-8 -*-


ou de

Code : Tout sélectionner

#!/bin/sh
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. :oops:

Chrominator
Messages : 446
Enregistré le : 19 déc. 2015, 07:29

Re: Piloter la Soundtouch 500 Bose avec Domoticz

Message par Chrominator » 19 févr. 2020, 21:23

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.
https://www.lesnumeriques.com/enceinte-home-cinema/bose-soundbar-500-p45689/test.html a écrit : ..., la Soundbar 500 ne peut donc pas être associée au sein d'une même installation multiroom avec des enceintes de l'ancienne gamme SoundTouch de Bose.
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é.

Tchill73
Messages : 7
Enregistré le : 12 févr. 2020, 23:06

Re: Piloter la Soundtouch 500 Bose avec Domoticz

Message par Tchill73 » 19 févr. 2020, 22:13

bon en tout cas merci ;) Top

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre