[Python][TUTO] Bose Soundtouch Multiroom depuis domoticz

Vous avez crée 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.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
lreymond
Messages : 18
Enregistré le : 25 nov. 2016, 20:06

Re: [Python] Bose Soundtouch Multiroom depuis domoticz

Message par lreymond » 20 nov. 2017, 22:41

Salut,
Je connais la fonctionnalité que je souhaite sans savoir comment le mettre en oeuvre. Je souhaite lancer en multiroom la radio programmée sur la preselection 1 de mes sountouch via un bouton on/off domoticz.
Est ce que ton script permettrai de le faire? si oui ou le placer? dans Events, dans un répertoire du raspberry?
Après j'imagine qu'il doit être nécessaire de définir des "variables" et réaliser du paramétrage dans domoticz.
Comme tu peux t'en rendre compte, je ne suis pas au bout de mes peines. En effet un tuto serait parfait, sans vouloir abuser de ton temps :oops:
Louis

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.


ayziaa
Messages : 25
Enregistré le : 29 janv. 2017, 17:16

Re: [Python] Bose Soundtouch Multiroom depuis domoticz

Message par ayziaa » 20 nov. 2017, 23:16

Tuto Multiroom bose soundtouch

Pour commencer installer la librairy libsoundtouch:

Code : Tout sélectionner

pip install libsoundtouch
ensuite naviguer vers le dossier domoticz/scripts/python

Code : Tout sélectionner

cd domoticz/scripts/python
Faire un nouveau script

Code : Tout sélectionner

sudo nano bose.py
Faire un copier coller du script ci dessous:

Code : Tout sélectionner


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

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

devices = discover_devices(timeout=5)

n_enceintes = len(devices)

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: #changer "Ma chambre" par le nom existant de l'enceinte bose
                #print ("enceinte Ma chambre:" + name_enceinte1)
                enceinte_ma_chambre = enceinte_1        # changer enceinte_salon par le nom de la variable que vous voulez
        if "Salon" in name_enceinte1: #changer "Salon" par le nom existant de l'enceinte bose
                #print ("enceinte salon:" + name_enceinte1)
                enceinte_salon = enceinte_1 # changer enceinte_salon par le nom de la variable que vous voulez
        if "Ma chambre" in name_enceinte2: #changer "Ma chambre" par le nom existant de l'enceinte bose
                #print ("enceinte Ma chambre:" + name_enceinte2)
                enceinte_ma_chambre = enceinte_2 # changer enceinte_salon par le nom de la variable que vous voulez
        if "Salon" in name_enceinte2: #changer "Salon" par le nom existant de l'enceinte bose
                "print ("enceinte salon:" + name_enceinte2)
                enceinte_salon = enceinte_2 # changer enceinte_salon par le nom de la variable que vous voulez

for device in devices:
    print(device.config.name + " - " + device.config.type)

if n_enceintes == 2:
        enceinte_salon.create_zone([enceinte_ma_chambre])

enceinte_salon.set_volume(50)  #ici on selectionne le volume 50
volume enceinte_ma_chambre.set_volume(50) #ici on selectionne le volume 50

enceinte_salon.presets() #ici on récupere les presets de l'enceinte salon
enceinte_salon.select_preset(presets[0]) # ici on selectionne le preset 1 --> 6 presets de 0 à 5



Changez les noms de variable à votre souhait et changer le noms des enceintes par le noms déjà définie sur l'enceinte
il se peut qu'en faisant le copier coller la mise en forme soit mauvaise, dans ce cas la il faudra la refaire pour qu'elle soit comme celle-ci (c'est important en python de respecter les bloques)

une fois fait sauvegarder en fesant CTRL + o
et CTRL + x pour quitter

ensuite un petit:

Code : Tout sélectionner

sudo chmod +x bose.py
pour autoriser l’exécution du script.

Dans domoticz, faire un dummy button (chercher sur le net si vous savez pas)

Editer le bouton et ajouter dans action on:

Code : Tout sélectionner

script:///home/pi/domoticz/scripts/python/bose.py
et voilà y'a plus qu'a cliquer ou faire un planning sur le bouton.
Modifié en dernier par ayziaa le 21 nov. 2017, 20:40, modifié 2 fois.

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

Re: [Python][TUTO] Bose Soundtouch Multiroom depuis domoticz

Message par Chrominator » 21 nov. 2017, 20:22

Super ton tuto, j'ai décidé de me lancer. :D

Bon, je ne connais pas Python mais j'ai dû mettre un peu mes doigts dans la cambouis, le dernier script ne fonctionne pas très bien. :(
Du coup comme j'ai 3 enceintes Bose, je suis reparti du premier.
Ça marche bien, à part quelques détails.

Dans ton script, comme tu as mis des accents y compris en commentaires, il faudrait une ligne 2 qui soit

Code : Tout sélectionner

# -*- coding: utf-8 -*-
En tout cas sans ça ça passe pas sur mon système (Python 2.7).

Tu n'as pas dû t'en rendre compte, mais ta ligne 7 dans le script ci-dessus est incorrecte ; l'import doit être ligne suivante, après Type.

Et puis tu as raison, l'indentation du programme sert de délimiteur aux if et cie.... Première fois que je vois ça dans un langage.
Du coup je joins le tarball que j'ai fait sur mon pi, comme ça pas de souci avec l'indentation.

Ah au fait, je ne m'en suis pas sorti avec le device.presets().
Ça me renvoie une erreur à chaque fois, même si je m'assure que tous les presets sont définis (y a une issue là dessus dans Git).
Traceback (most recent call last):
File "./bose.py", line 127, in <module>
presets = enceinte_bureau.presets()
File "/home/pi/.local/lib/python2.7/site-packages/libsoundtouch/device.py", line 473, in presets
self.refresh_presets()
File "/home/pi/.local/lib/python2.7/site-packages/libsoundtouch/device.py", line 256, in refresh_presets
dom = minidom.parseString(response.text)
File "/usr/lib/python2.7/xml/dom/minidom.py", line 1928, in parseString
return expatbuilder.parseString(string)
File "/usr/lib/python2.7/xml/dom/expatbuilder.py", line 940, in parseString
return builder.parseString(string)
File "/usr/lib/python2.7/xml/dom/expatbuilder.py", line 223, in parseString
parser.Parse(string, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 410-411: ordinal not in range(128)
J'avais potassé la doc Bose il y a quelques temps et j'avais essayé de lister le contenu de mes presets.
Pas moyen (timeout), j'en avais déduit que Bose avait bloqué le truc. A voir.

Ah et dernier truc, j'arrive pas à le lancer grâce au bouton Domoticz :
Error: Error executing script command (/home/pi/domoticz/scripts/python/bose.py). returned: 256
bose.tgz
(1.19 Kio) Téléchargé 58 fois
Modifié en dernier par Chrominator le 21 nov. 2017, 20:41, modifié 1 fois.

ayziaa
Messages : 25
Enregistré le : 29 janv. 2017, 17:16

Re: [Python][TUTO] Bose Soundtouch Multiroom depuis domoticz

Message par ayziaa » 21 nov. 2017, 20:33

Super ton tuto, j'ai décidé de me lancer. :D
Merci pour le retour

Dans ton script, comme tu as mis des accents y compris en commentaires, il faudrait une ligne 2 qui soit

Code : Tout sélectionner

# -*- coding: utf-8 -*-
En tout cas sans ça ça passe pas sur mon système (Python 2.7).

Tu n'as pas dû t'en rendre compte, mais ta ligne 7 dans le script ci-dessus est incorrecte ; l'import doit être ligne suivante, après Type.

Et puis tu as raison, l'indentation du programme sert de délimiteur aux if et cie.... Première fois que je vois ça dans un langage.
Du coup je joins le tarball que j'ai fait sur mon pi, comme ça pas de souci avec l'indentation.
+1000
Le script à été réécrit hier soir vite fait, jamais testé, donc tout ce que tu dit est juste. j'ai pas tout ces commentaires dans mon PI :lol: :lol:
Le but était ici d'aider à comprendre ceux qui aurait moins de compétences.

Ah au fait, je ne m'en suis pas sorti avec le device.presets().
Ça me renvoie une erreur à chaque fois, même si je m'assure que tous les presets sont définis (y a une issue là dessus dans Git).
J'avais potassé la doc Bose il y a quelques temps et j'avais essayé de lister le contenu de mes presets.
Pas moyen (timeout), j'en avais déduit que Bose avait bloqué le truc. A voir.
Les presets fonctionnent, mais j'ai eu le même problème, la ligne:

Code : Tout sélectionner

UnicodeEncodeError: 'ascii' codec can't encode characters in position 410-411: ordinal not in range(128)
m'a mis sur la piste, j'ai chercher dans les noms des presets et la présence d'accents dans l'un d'entre eux provoque cette erreur. Après avoir changer le nom du preset sans l'accent et vérifier tout les autres plus de problèmes.

Finalement tout est une histoire d'accents. :lol:

Ah et dernier truc, j'arrive pas à le lancer grâce au bouton Domoticz :

Error: Error executing script command (/home/pi/domoticz/scripts/python/bose.py). returned: 256
J'ai souvent ce type d'erreur dans mon log domoticz mais ça marche quand même. Tu as bien autorisé l'execution avec

Code : Tout sélectionner

sudo chmod +x
et tu as bien mis 3 slash devant l'adresse du script dans le bouton:

Code : Tout sélectionner

script:///home/pi/domoticz/scripts/python/bose.py
?

Génial que tu es partagé ton script bien propre, merci pour ta contribution!

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 : 289
Enregistré le : 19 déc. 2015, 07:29

Re: [Python][TUTO] Bose Soundtouch Multiroom depuis domoticz

Message par Chrominator » 21 nov. 2017, 22:18

Chrominator a écrit : Ah et dernier truc, j'arrive pas à le lancer grâce au bouton Domoticz :

Error: Error executing script command (/home/pi/domoticz/scripts/python/bose.py). returned: 256
ayziaa a écrit :J'ai souvent ce type d'erreur dans mon log domoticz mais ça marche quand même. Tu as bien autorisé l'execution avec

Code : Tout sélectionner

sudo chmod +x
et tu as bien mis 3 slash devant l'adresse du script dans le bouton:

Code : Tout sélectionner

script:///home/pi/domoticz/scripts/python/bose.py
?

Génial que tu es partagé ton script bien propre, merci pour ta contribution!
Oui et oui, c'est un exécutable et j'ai bien 3 slash après les deux point de script.
Mais chez moi le script ne fonctionne pas par Domoticz, seulement en ligne de commande dans le terminal.

Code : Tout sélectionner

script:///home/pi/domoticz/scripts/python/bose.py
Modifié en dernier par Chrominator le 21 nov. 2017, 22:23, modifié 1 fois.

ayziaa
Messages : 25
Enregistré le : 29 janv. 2017, 17:16

Re: [Python][TUTO] Bose Soundtouch Multiroom depuis domoticz

Message par ayziaa » 21 nov. 2017, 22:22

Essaye un chmod 777. Je crois que j'avais fait les deux. Mais je suis pas un spécialiste de linux.

Sinon essaye de reboot ton pi.

lreymond
Messages : 18
Enregistré le : 25 nov. 2016, 20:06

Re: [Python][TUTO] Bose Soundtouch Multiroom depuis domoticz

Message par lreymond » 21 nov. 2017, 22:33

Bonsoir,

Merci pour vos partages, j'apprends beaucoup :)

Comme Chrominator, j'ai l'erreur suivante lors que je clique sur le bonton on de domoticz:

Code : Tout sélectionner

Error executing script command (/home/pi/domoticz/scripts/python/bose.py). returned: 256 
J'ai pourtant fait :

Code : Tout sélectionner

sudo chmod +x bose.py
et j'ai mis les 3 slashs à:

Code : Tout sélectionner

script:///home/pi/domoticz/scripts/python/bose.py
A suivre...

Louis

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

Re: [Python][TUTO] Bose Soundtouch Multiroom depuis domoticz

Message par Chrominator » 21 nov. 2017, 22:35

Pareil, erreur 256.
Ca me rassure d'ailleurs, je n'aurais pas compris qu'accorder les droits en écriture au groupe Other pour ce script lui ait permis de fonctionner.

T'inquiète je vais finir par trouver, déjà ton indication sur les accents dans les presets m'a fait progresser d'une ligne ; comme j'avais OUÏ FM, ça plantait.
Bon je suis pas au bout, je continue... :-)

ayziaa
Messages : 25
Enregistré le : 29 janv. 2017, 17:16

Re: [Python][TUTO] Bose Soundtouch Multiroom depuis domoticz

Message par ayziaa » 21 nov. 2017, 22:37

Je me répète, faire un

Code : Tout sélectionner

sudo chmod 777 bose.py
Rebooter le raspberry ou le système linux sur lequel tourne votre domoticz.

Mais j'ai exactement la même erreur sauf que les scripts fonctionnent depuis domoticz.

lreymond
Messages : 18
Enregistré le : 25 nov. 2016, 20:06

Re: [Python][TUTO] Bose Soundtouch Multiroom depuis domoticz

Message par lreymond » 21 nov. 2017, 23:07

pour moi le résultat est le meme avec

Code : Tout sélectionner

sudo chmod 777 bose.py
et le reboot du pi

je me pose la question si mon problème ne viendrai pas de l'installation de la librairy libsoundtouch, il semblerai que j'ai une erreur à l'installation

Code : Tout sélectionner

pi@raspberrypi:~ $ pip install libsoundtouch
Downloading/unpacking libsoundtouch
  Downloading libsoundtouch-0.7.2-py2.py3-none-any.whl
Downloading/unpacking websocket-client>=0.40.0 (from libsoundtouch)
  Downloading websocket_client-0.44.0-py2.py3-none-any.whl (199kB): 199kB downloaded
Downloading/unpacking zeroconf>=0.19.1 (from libsoundtouch)
  Downloading zeroconf-0.19.1-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): requests>=2,<3 in /usr/lib/python2.7/dist-packages (from libsoundtouch)
Downloading/unpacking enum-compat>=0.0.2 (from libsoundtouch)
  Downloading enum-compat-0.0.2.tar.gz
  Running setup.py (path:/tmp/pip-build-XwOVFB/enum-compat/setup.py) egg_info for package enum-compat
    
Requirement already satisfied (use --upgrade to upgrade): six in /usr/lib/python2.7/dist-packages (from websocket-client>=0.40.0->libsoundtouch)
Downloading/unpacking netifaces!=0.10.5 (from zeroconf>=0.19.1->libsoundtouch)
  Downloading netifaces-0.10.6.tar.gz
  Running setup.py (path:/tmp/pip-build-XwOVFB/netifaces/setup.py) egg_info for package netifaces
    
Downloading/unpacking enum34 (from enum-compat>=0.0.2->libsoundtouch)
  Downloading enum34-1.1.6-py2-none-any.whl
Installing collected packages: libsoundtouch, websocket-client, zeroconf, enum-compat, netifaces, enum34
Cleaning up...
Exception:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 295, in run
    requirement_set.install(install_options, global_options, root=options.root_path)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1436, in install
    requirement.install(install_options, global_options, *args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 672, in install
    self.move_wheel_files(self.source_dir, root=root)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 902, in move_wheel_files
    pycompile=self.pycompile,
  File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 214, in move_wheel_files
    clobber(source, lib_dir, True)
  File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 204, in clobber
    os.makedirs(destdir)
  File "/usr/lib/python2.7/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/libsoundtouch-0.7.2.dist-info'

Storing debug log for failure in /home/pi/.pip/pip.log

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