[Speak-Sonos] Nouveau module

#1

Hello,

Vous vouliez faire parler votre enceinte Sonos, c’est maintenant faisable !
https://youtu.be/9OVzqIDeRRQ

En attendant que je fasse la documentation propre pour le store, et que @pierre-gilles le valide, vous pouvez déjà tester mon nouveau module.

Pour ceux qui veulent l’installer et me faire des retours :

  • Mettre à jour le module Sonos avec les nouvelles fonctionnalités :
    gladys-sonos

  • Dans l’onglet Modules/Avancé, renseigner les 4 champs comme cela et cliquer sur installer :
    speak-sonos / 0.1.0 / https://github.com/Florian56/gladys-speak-sonos / speak-sonos

  • Rebooter Gladys

  • Créer un partage réseau pour le répertoire des mp3 afin que la Sonos puisse les lire (Cf. lien).
    Voici ma config en exemple :

    [TTSFiles]
    comment = Partage Samba sur Raspberry Pi
    path = /home/pi/gladys/cache/sound
    writable = yes
    guest ok = yes
    guest only = yes
    create mode = 0777
    directory mode = 0777
    share modes = yes
  • Créer 2 paramètres :
    -> SPEAK-SONOS_PATH_MP3 : //GLADYS/TTSFiles/
    -> SPEAK-SONOS_DEFAULT_DEVICE : 2
    Le premier est le lien réseau créé précédemment avec Samba.
    Le 2nd est l’id du device Sonos par défaut sur lequel Gladys doit parler lorsque l’on passe par les notifications.

  • Dans les notifications, sélectionner “Speak (Google Voice) for Sonos” et mettez y un id.

Pour l’utilisation, vous pouvez utiliser 3 façons différentes (En appelant les méthodes du module directement, ou bien créer une notification dont Gladys se charge de l’émettre où bon lui semble).

gladys.modules[‘speak-sonos’].notify({text : ‘t’es un beau goss !’}, {id : 1, language : ‘fr’});

gladys.modules[‘speak-sonos’].say({text : ‘t’es un beau goss !’, language : ‘fr’, device : 2});

gladys.notification.create({
user: 1,
title: ‘Ceci est un test’,
text: ‘t’es un beau goss !’,
icon: ‘fa fa-home’,
iconColor: ‘bg-light-blue’,
priority: 0
});

Je vois déjà des améliorations à apporter :

  • Possibilité d’envoyer de très gros textes à lire (Il faut alors découper le texte et récupérer plusieurs mp3).
  • Quand un mp3 TTS est en cours, on ne peut pas pour le moment lancer tout de suite un nouveau message…
  • Annoncer le message avec un volume voulu (Pas trop fort), et reprendre la playlist avec le même volume qu’avant message (Donc à bloc :smile:)
3 Likes
Speak & VoiceRSS via Sonos
Probleme sonos voice
#2

Excellent !!

J’ai pas de Sonos pour tester, mais bravo !

1 Like
#3

J’ai testé de récupérer une grande phrase (> 100 caractères), je récupère donc plusieurs mp3, mais à la lecture c’est vraiment haché entre les différents mp3. J’ai splitter sur les signes de ponctuations, ça ne choque pas trop dans ce cas. Par contre il n’y a pas forcément de ponctuation, alors je splitte entre 2 mots, et là la phrase est vraiment coupée c’est dommage …

#4

Bonjour,

Quand je test un script, j’ai cette erreur: Error in script : SyntaxError: Invalid or unexpected token

Une idée ?

Merci

#5

Il faut donner plus de détails.
Merci de copier/coller le contenu du script ici

#6

Hello @Fl0r_an !

Je n’ai pas eu de news sur le dernier message que j’ai mis sur la PR de Gladys-Sonos ici => https://github.com/GladysProject/gladys-sonos/pull/1

J’aimerais pouvoir la merger, au vu du message que j’ai vu l’autre jour sur le forum :slight_smile:

#7

Salut @Fl0r_an :slight_smile:
Ce sujet est il encore d’actualité ?

Car quand je lance un test j’ai une erreur :

2018-07-22-19:20:21 0|gladys | Error: Cannot parse DIDTL result
2018-07-22-19:20:21 0|gladys | at /home/pi/gladys/api/hooks/sonos/node_modules/sonos/lib/sonos.js:1187:25
2018-07-22-19:20:21 0|gladys | at Parser. (/home/pi/gladys/api/hooks/sonos/node_modules/xml2js/lib/parser.js:303:18)
2018-07-22-19:20:21 0|gladys | at emitOne (events.js:116:13)
2018-07-22-19:20:21 0|gladys | at Parser.emit (events.js:211:7)
2018-07-22-19:20:21 0|gladys | at SAXParser.onclosetag (/home/pi/gladys/api/hooks/sonos/node_modules/xml2js/lib/parser.js:261:26)
2018-07-22-19:20:21 0|gladys | at emit (/home/pi/gladys/api/hooks/sonos/node_modules/sax/lib/sax.js:624:35)
2018-07-22-19:20:21 0|gladys | at emitNode (/home/pi/gladys/api/hooks/sonos/node_modules/sax/lib/sax.js:629:5)
2018-07-22-19:20:21 0|gladys | at closeTag (/home/pi/gladys/api/hooks/sonos/node_modules/sax/lib/sax.js:889:7)
2018-07-22-19:20:21 0|gladys | at SAXParser.write (/home/pi/gladys/api/hooks/sonos/node_modules/sax/lib/sax.js:1436:13)
2018-07-22-19:20:21 0|gladys | at Parser.exports.Parser.Parser.parseString (/home/pi/gladys/api/hooks/sonos/node_modules/xml2js/lib/parser.js:322:31)
2018-07-22-19:20:21 0|gladys | at Parser.parseString (/home/pi/gladys/api/hooks/sonos/node_modules/xml2js/lib/parser.js:5:59)
2018-07-22-19:20:21 0|gladys | at /home/pi/gladys/api/hooks/sonos/node_modules/sonos/lib/sonos.js:1179:34
2018-07-22-19:20:21 0|gladys | at /home/pi/gladys/api/hooks/sonos/node_modules/sonos/lib/services/Service.js:67:14
2018-07-22-19:20:21 0|gladys | at Parser. (/home/pi/gladys/api/hooks/sonos/node_modules/xml2js/lib/parser.js:303:18)
2018-07-22-19:20:21 0|gladys | at emitOne (events.js:116:13)
2018-07-22-19:20:21 0|gladys | at Parser.emit (events.js:211:7)
2018-07-22-19:20:21 0|gladys | at SAXParser.onclosetag (/home/pi/gladys/api/hooks/sonos/node_modules/xml2js/lib/parser.js:261:26)
2018-07-22-19:20:21 0|gladys | at emit (/home/pi/gladys/api/hooks/sonos/node_modules/sax/lib/sax.js:624:35)
2018-07-22-19:20:21 0|gladys | at emitNode (/home/pi/gladys/api/hooks/sonos/node_modules/sax/lib/sax.js:629:5)
2018-07-22-19:20:21 0|gladys | at closeTag (/home/pi/gladys/api/hooks/sonos/node_modules/sax/lib/sax.js:889:7)
2018-07-22-19:20:21 0|gladys | at SAXParser.write (/home/pi/gladys/api/hooks/sonos/node_modules/sax/lib/sax.js:1436:13)
2018-07-22-19:20:21 0|gladys | at Parser.exports.Parser.Parser.parseString (/home/pi/gladys/api/hooks/sonos/node_modules/xml2js/lib/parser.js:322:31)
2018-07-22-19:20:21 0|gladys | at Parser.parseString (/home/pi/gladys/api/hooks/sonos/node_modules/xml2js/lib/parser.js:5:59)
2018-07-22-19:20:21 0|gladys | at exports.parseString (/home/pi/gladys/api/hooks/sonos/node_modules/xml2js/lib/parser.js:354:19)
2018-07-22-19:20:21 0|gladys | at Request._callback (/home/pi/gladys/api/hooks/sonos/node_modules/sonos/lib/services/Service.js:54:5)
2018-07-22-19:20:21 0|gladys | at Request.self.callback (/home/pi/gladys/api/hooks/sonos/node_modules/request/request.js:185:22)
2018-07-22-19:20:21 0|gladys | at emitTwo (events.js:126:13)
2018-07-22-19:20:21 0|gladys | at Request.emit (events.js:214:7)
2018-07-22-19:20:21 0|gladys | at Request. (/home/pi/gladys/api/hooks/sonos/node_modules/request/request.js:1157:10)
2018-07-22-19:20:21 0|gladys | at emitOne (events.js:116:13)
2018-07-22-19:20:21 0|gladys | at Request.emit (events.js:211:7)
2018-07-22-19:20:21 0|gladys | at IncomingMessage. (/home/pi/gladys/api/hooks/sonos/node_modules/request/request.js:1079:12)
2018-07-22-19:20:21 0|gladys | at Object.onceWrapper (events.js:313:30)
2018-07-22-19:20:21 0|gladys | at emitNone (events.js:111:20)
2018-07-22-19:20:21 0|gladys | at IncomingMessage.emit (events.js:208:7)
2018-07-22-19:20:21 0|gladys | at endReadableNT (_stream_readable.js:1055:12)
2018-07-22-19:20:21 0|gladys | at _combinedTickCallback (internal/process/next_tick.js:138:11)
2018-07-22-19:20:21 0|gladys | at process._tickDomainCallback (internal/process/next_tick.js:218:9)

1 Like
#8

Bonjour,
Je semble avoir le même problème.
As-tu trouvé une solution ?

#9

Non j’attendais le retour de @Fl0r_an

#10

@Sebastien, @spenceur
Oui je sais ce que c’est, il y a un bug :smiley:
En fait cette erreur apparait quand la queue de lecture est vide. Si vous mettez une chanson en lecture et que vous lancez le test en même temps, ça fonctionnera.
Tout n’est pas parfait dans le module.

@pierre-gilles : Oue je n’ai pas pris le temps de regarder, je vais voir ces prochains jours j’espère.

1 Like
#11

Bonsoir Fl0r_an,

En effet, cela fonctionne mieux ainsi :wink:
Il fallait le savoir.

Merci.

#12

Cool je vais pouvoir regarder ça alors :slight_smile:
Merci

#13

Salut @Fl0r_an,

J’ai essayé avec la radio avec spotify voir si cela fonctionne ^^

#14

Bon avec la radio cela ne fonctionne pas malheureusement :confused: :

2018-08-09-22:50:49 0|gladys | Unhandled rejection Error: HTTP response code 500 for “urn:schemas-upnp-org:service:AVTransport:1#Seek”
2018-08-09-22:50:49 0|gladys | at Request._callback (/home/pi/gladys/api/hooks/sonos/node_modules/sonos/lib/sonos.js:212:23)
2018-08-09-22:50:49 0|gladys | at Request.self.callback (/home/pi/gladys/api/hooks/sonos/node_modules/request/request.js:185:22)
2018-08-09-22:50:49 0|gladys | at emitTwo (events.js:126:13)
2018-08-09-22:50:49 0|gladys | at Request.emit (events.js:214:7)
2018-08-09-22:50:49 0|gladys | at Request. (/home/pi/gladys/api/hooks/sonos/node_modules/request/request.js:1157:10)
2018-08-09-22:50:49 0|gladys | at emitOne (events.js:116:13)
2018-08-09-22:50:49 0|gladys | at Request.emit (events.js:211:7)
2018-08-09-22:50:49 0|gladys | at IncomingMessage. (/home/pi/gladys/api/hooks/sonos/node_modules/request/request.js:1079:12)
2018-08-09-22:50:49 0|gladys | at Object.onceWrapper (events.js:313:30)
2018-08-09-22:50:49 0|gladys | at emitNone (events.js:111:20)
2018-08-09-22:50:49 0|gladys | at IncomingMessage.emit (events.js:208:7)
2018-08-09-22:50:49 0|gladys | at endReadableNT (_stream_readable.js:1055:12)
2018-08-09-22:50:49 0|gladys | at _combinedTickCallback (internal/process/next_tick.js:138:11)
2018-08-09-22:50:49 0|gladys | at process._tickDomainCallback (internal/process/next_tick.js:218:9)

En revanche avec un musique simple cela fonctionne.

#15

Après avoir parlé, il me met les enceintes en mute ou volume = 0.
J’ai essayé de lire les fichiers du module mais je ne comprends pas encore assez bien ce langage. (il faut que j’apprenne).

Ce serait bien que le module détecte le réglage du volume précédent et le remette après avoir parlé.
ou au pire, laisser le SPEAK-SONOS_DEFAULT_VOLUME.

Non ?

#16

Il faut que je me penche sur la question du pourquoi cela ne marche pas quand la queue est vide.
Bizarre que ça te remette le son à 0, ça te le fait à chaque fois ? Justement c’est prévu que cela revienne au son initial

1 Like
#17

Cool j’attendrai ça avec impatience :stuck_out_tongue:

#18

Salut @Fl0r_an,
En fait (depuis la mise à jour je crois) ça ne fonctionne plus.
Sinon, il me semble bien que ça le faisait à chaque fois oui.

0|gladys   | TypeError: Cannot read property 's:Body' of undefined
0|gladys   |     at /home/pi/gladys/api/hooks/sonos/node_modules/sonos/lib/services/Service.js:57:36
0|gladys   |     at Parser.<anonymous> (/home/pi/gladys/api/hooks/sonos/node_modules/xml2js/lib/parser.js:303:18)
0|gladys   |     at emitOne (events.js:116:13)
0|gladys   |     at Parser.emit (events.js:211:7)
0|gladys   |     at SAXParser.onclosetag (/home/pi/gladys/api/hooks/sonos/node_modules/xml2js/lib/parser.js:261:26)
0|gladys   |     at emit (/home/pi/gladys/api/hooks/sonos/node_modules/sax/lib/sax.js:624:35)
0|gladys   |     at emitNode (/home/pi/gladys/api/hooks/sonos/node_modules/sax/lib/sax.js:629:5)
0|gladys   |     at closeTag (/home/pi/gladys/api/hooks/sonos/node_modules/sax/lib/sax.js:889:7)
0|gladys   |     at SAXParser.write (/home/pi/gladys/api/hooks/sonos/node_modules/sax/lib/sax.js:1436:13)
0|gladys   |     at Parser.exports.Parser.Parser.parseString (/home/pi/gladys/api/hooks/sonos/node_modules/xml2js/lib/parser.js:322:31)
0|gladys   |     at Parser.parseString (/home/pi/gladys/api/hooks/sonos/node_modules/xml2js/lib/parser.js:5:59)
0|gladys   |     at exports.parseString (/home/pi/gladys/api/hooks/sonos/node_modules/xml2js/lib/parser.js:354:19)
0|gladys   |     at Request._callback (/home/pi/gladys/api/hooks/sonos/node_modules/sonos/lib/services/Service.js:54:5)
0|gladys   |     at Request.self.callback (/home/pi/gladys/api/hooks/sonos/node_modules/request/request.js:185:22)
0|gladys   |     at emitTwo (events.js:126:13)
0|gladys   |     at Request.emit (events.js:214:7)
0|gladys   |     at Request.<anonymous> (/home/pi/gladys/api/hooks/sonos/node_modules/request/request.js:1157:10)
0|gladys   |     at emitOne (events.js:116:13)
0|gladys   |     at Request.emit (events.js:211:7)
0|gladys   |     at IncomingMessage.<anonymous> (/home/pi/gladys/api/hooks/sonos/node_modules/request/request.js:1079:12)
0|gladys   |     at Object.onceWrapper (events.js:313:30)
0|gladys   |     at emitNone (events.js:111:20)
0|gladys   |     at IncomingMessage.emit (events.js:208:7)
0|gladys   |     at endReadableNT (_stream_readable.js:1064:12)
0|gladys   |     at _combinedTickCallback (internal/process/next_tick.js:138:11)
0|gladys   |     at process._tickDomainCallback (internal/process/next_tick.js:218:9)

Et ça me fait redémarrer Gladys.
Je vais peut-être désinstaller le module et le réinstaller. Tu en penses quoi ?

#19

Oui tu peux désinstaller le module et le réinstaller.

#20

Même problème après désinstallation/réinstallation :thinking:
Voir si d’autres ont le même problème… Je vais chercher de mon côté.