Aller au contenu
Krikroff

Fibaro Hc2 Vd Sonos Remote: Télécommande Pour Diffuseur Sonos

Recommended Posts

@Krikroff, toujours aussi efficace !

Je viens de constater que la répétition du TTS a disparu avec la dernière version... et que l'utilisation d'un cache est dans les cartons !

Bravo JC !

NB : après 3 mois d'abandon complet de mon installation Fibaro (mais qui fonctionne bien, n'ayant pas de V4 à  se mettre sous la dent ;) ), difficile de replonger dans le code et de retrouver ses automatismes.

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut !  B)

 

Oui, ça faisait longtemps qu'on n'avait pas croisé un de tes messages sur le fofo!

 

 

Moi, j'ai pas encore mis à  jour le plugin...je préfère attendre la prochaine version qui devrait bientôt arriver  :rolleyes:  :rolleyes:  Hein J-c ?

Partager ce message


Lien à poster
Partager sur d’autres sites

@i-magin, :60: bien heureux de te retrouver de nouveau parmi nous ...

 

@Moicphil, oui cela devrait bientôt arriver ;) , j'ai bien avancé hier soir mais car il y a un MAIS ! Mon intégration confirme mes soupçons sur le buffer que Sonos utilise avant la diffusion d'un flux de type 'radio', je pense donc à  un autre type d'intégration je vais faire un test ce soir :), sinon tout est fonctionnel sauf qu'il y a toujours les 3 / 4 secondes d' attente avant la diffusion du message...

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici un extrait du debug pour une demande d'un message TTS en version alternative à  l'utilisation du mode radio mp3. Ici est activé la création du TSS si non trouvé dans le cache "serveur" -> enregistrement du fichier -> retour d'un objet json contenant le nom du fichier, le chemin, la durée.

[DEBUG] 10:57:08: TTS V2 data found, please wait...
[DEBUG] 10:57:08: tts message: La température extérieure actuelle est de 22,4 °C.
[DEBUG] 10:57:08: tts message len: 53
[DEBUG] 10:57:08: tts duration set to: 15 seconds
[DEBUG] 10:57:08: speakers group 1 IP: 192.168.1.80 [room: Pièce à  vivre][coordinator: true]
[DEBUG] 10:57:08: speakers group 1 volume: 10
[DEBUG] 10:57:08: use external service to create tts message
[DEBUG] 10:57:08: svc provider: google
[DEBUG] 10:57:08: svc language: fr
[DEBUG] 10:57:08: svc host: 192.168.1.250
[DEBUG] 10:57:08: svc port: 81
[DEBUG] 10:57:08: svc root uri: /handlers/tts.ashx
[DEBUG] 10:57:08: svc security key: 0123456789
[DEBUG] 10:57:08: svc cache: true
[DEBUG] 10:57:08: Request external TTS service, try to create tts response and return meta object.
[DEBUG] 10:57:10: success: true
[DEBUG] 10:57:10: fileName: La température extérieure actuelle est de 22,4 °C..mp3
[DEBUG] 10:57:10: filePath: \\HOME-SERVER\Musique\tts\
[DEBUG] 10:57:10: duration: 00:00:05

je suis actuellement sur une piste pour améliorer les performances à  savoir intégrer un cache des liens des fichiers aussi au niveau du module et ainsi éviter l'appel au serveur à  partir de la seconde demande, avantage: du temps de gagné, inconvénient: il faut détecter si le message n'est pas diffusé pouvant signifié qu'il n'est plus présent dans le cache "serveur" et alors refaire la demande au serveur et remise à  jour du cache :rolleyes: le tout sans que le système tourne en boucle  ;) ... Bref il faut vraiment aimer se prendre la tête :lol:

 

Tous les avis, commentaires et suggestions sont les bienvenus :15:

Partager ce message


Lien à poster
Partager sur d’autres sites

Quelques remarques en VRAC pour alimenter le débat :

 

1)     Quand on lance l’exécution d'un message TTS, on sait "à  priori" si le message est déjà  diffusé ou pas.

 

Ex : «Courrier dans la boite aux lettres» vs «Il fait 38 degrés aujourd’hui à  12:30»

 

Dans le premier cas, on peut supposer que le message étant « figé » ou « statique », il soit à  priori déjà  diffusé.

 

Dans mon cas, j’utilise ton ancien script pour lancer la lecture des messages (~30) stockés sur mon NAS.

 playFile("//"..IP_NAS.."/web/Sonos/audio/fr/TTS-MSG"..Num_Message..".mp3", Volume_Message);  -- et tous les fichiers s’appellent TTS-MSGxx.mp3

Pas de latence et cela semble facile à  utiliser sans code LUA (avec GEA) car j’ai un Virtual device pour le TTS et la commande, en passant par une variable globale est donc assez simple :

{"Global", "SONOS_Num_Message", "8"}     -- Numéro de Message  sélectionné (ici le n°8)
{"VirtualDevice", id["SONOS"], 1}        -- appuie bouton du VD pour lecture TTS 

En plus, pour vérifier que le TTS code bien, ce n’est pas rare d’adapter le message avec une orthographe plus phonétique …donc tous les messages statiques existent forcément.

 

 

2)    Si on traite les messages « statiques » de la sorte, dans le cas, d’un message « dynamique », là , cela devient plus simple car tu n’as pas à  vérifier que le message existe car il n’existera jamais et je ne pense pas qu’il faille stocker un million de messages tous différents.

 Donc, tu peux directement lancer le TTS et même plus, ne pas créer de fichier car ils seront tous pour la plupart différents et/ou uniques.

 

Ex : «Il fait 38,1 degrés aujourd’hui à  12:30»

Ex : «Il fait -3 degrés aujourd’hui à  06:32»

Ex : «Il fait 30 degrés aujourd’hui à  12:29»

 

3)    Pour finir, il va falloir traiter la création des fichiers « statiques » et le stockage sur le NAS.

Ce point est important, car j’ai l’impression que tu voudrais le faire « automatiquement » mais comme ce sont des messages « connus » rien n’empêche de le faire en avance !!

 

Pour la création des messages, j’utilise le script en PHP http://www.planete-domotique.com/blog/2013/06/10/une-classe-php-pour-piloter-ses-sonos-avec-leedomus/

 

Je n’utilise pas ce script complètement mais comme ce script crée des fichiers (mp3) … je crée, les messages « statiques » dont j’ai besoin, je les renomme et les stocke sur le NAS.

 

Conclusion : Pour lancer une lecture, on pourrait imaginer,

-       soit de 2 commandes différentes (PlayFile, Play_TTS) pour les messages statiques et pour le messages dynamiques, avec des paramètres différents

-       soit une commande unique mais un peu plus complexe à  utiliser.

 

Pour finir, je ne suis pas un spécialiste de PHP, mais la class pour le SONOS me semble pas mal…et semble un peu faire ce que tu veux faire.

 

 

Voilà , voilà  ... ;) 

Partager ce message


Lien à poster
Partager sur d’autres sites

@JM13, merci beaucoup pour ta participation au débat et je prends bonne note de toutes tes remarques intéressantes et constructives ;).

 

 

1)     Quand on lance l’exécution d'un message TTS, on sait "à  priori" si le message est déjà  diffusé ou pas.

 

Pas si évident que cela "à  priori" :P

 

Pour les messages de type "dynamiques" en fait je réponds à  la demande de Shad à  savoir la possibilité d'utiliser un "cache serveur" avec le module SONOS.

 

Pour moi, qui peut le plus peut le moins donc un message dynamique au premier passage devient un message "statique" aux passages suivants :60: (pour créer à  l'avance un message il suffit simplement de lancer une fois le message, qui n'existant pas sur l' espace de stockage sera ainsi créé puis sauvegardé).

 

J'ai aussi envisagé la possibilité de définir à  l'avance des "streams", par exemple j'ai divers fichiers; son de sonnette, alarme incendie etc que je souhaite faire jouer à  la demande sur mon système SONOS ;)

 

Pour le php, oui la classe est bien faite et je laisse faire les experts php car je n'aime pas. Tout mes développements tournent en C# / C++ -_-. L'objectif ici n'est pas de fournir une solution clé en main mais bien de vous donner la possibilité d'utiliser vos passerelles avec ce module...

 

Mais bon tout ceci c'est bien pour le plaisir d' utiliser un maximum le HC2 car je fais déjà  tout cela et bien plus depuis longtemps sur ma passerelle home-made ;) et le HC2 manque encore de souplesse pour arriver à  un résultat totalement satisfaisant mais cela n'engage que moi :15:

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est vrai ...qui peut le plus ....peut le plus  ;)

 

En fait, j'ai une trentaine de messages (statiques) et le coefficient WAF de mon installation domotique descend à  chaque diffusion. C'est pour cela que je suis plus orienté vers la simplicité !!!

 

 

Pour le PHP, ma remarque était en effet que même s'il y a encore des bugs(je n'ai encore pas tout testé) le script marche et la rapidité est indiscutable (pas de lantence). Le nom des fichiers générés (pour le cache) utilise le MD5 qui est pour moi une très bonne idée (à  un regarder par un expert comme toi ;) )

 

A suivre....

Partager ce message


Lien à poster
Partager sur d’autres sites

Je cherche aussi la simplicité :P , mais simple pour l'utilisateur est souvent synonyme de prise de tête pour l'achi et/ou le développeur :D. A la maison le coef. WAF c'est comme une épée de Damoclès au dessus de ma tête, ça rigole pas, ça marche ou ça casse :lol:.

 

Ce que tu me dis sur l'utilisation de la classe php confirme mon avis sur la maturité actuelle du HC2 pour le contrôle de périphérique comme SONOS, par exemple il est impossible d'utiliser la souscription uPnP avec le HC2, bref...

 

Pour le nom de fichier par empreinte md5 du message et bien... c'est la première chose que j'ai mis en place B) (c'était sur mon dev initial donc pas trop de travail) mais ne l'utilise pas pendant la phase de test, plus simple pour retrouver ses petits...

 

:)

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut JM13, 

j'ai également créé des samples que j'ai stockés sur mon nas, j'utilise la fonction playfile , comme citée plus haut.

En revanche, je n'ai pas de reprise de la musique sur Sonos.

C'est pareil pour toi ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour Rem's,

 

Non, il n'y a pas de reprise de la musique avec la méthode playFile (du script posté ici) mais uniquement avec le vd SONOS Remote après lecture d'un TTS.

 

Je vais mettre tout cela au propre avec la prochaine version 0.0.9 qui devrait vous permettre entre autres choses de mettre en lecture des samples stockés sur un NAS par exemple, de jouer un TTS (dynamique) avec ou sans gestion du cache (serveur externe), avec ou sans reprise de la musique, etc. Accessible depuis vos scènes et vd.

 

Je me pose sur le code je pense ce week-end :)

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

J-c, j'ai un petit soucis à  la lecture radio.( 0.08 )

La commande "stop" ne passe pas .

 

Le status passe bien en "stop", mais la commande n'est pas passée, la radio diffuse toujours.

 

Obliger de stopper en "debug" puis relancer en cliquant sur la disquette

[DEBUG] 10:49:09: -------------------------------------------------------------------------
[DEBUG] 10:49:09: -- HC2 Toolkit Framework version 1.0.5
[DEBUG] 10:49:09: -- Current interpreter version is Lua 5.1
[DEBUG] 10:49:09: -- Total memory in use by Lua: 316.81 Kbytes
[DEBUG] 10:49:09: -------------------------------------------------------------------------
[DEBUG] 10:49:09: Toolkit.Debug loaded in memory...
[DEBUG] 10:49:09: Benchmark [Toolkit.Debug lib]: elapsed time: 0.000 cpu secs
[DEBUG] 10:49:09: Toolkit.Collections.Queue loaded in memory...
[DEBUG] 10:49:09: Benchmark [Toolkit.Collections.Queue lib]: elapsed time: 0.000 cpu secs
[DEBUG] 10:49:09: Toolkit.Net loaded in memory...
[DEBUG] 10:49:09: Benchmark [Toolkit.Net lib]: elapsed time: 0.000 cpu secs
[DEBUG] 10:49:09: Toolkit.Xml loaded in memory...
[DEBUG] 10:49:09: Benchmark [Toolkit.Xml lib]: elapsed time: 0.000 cpu secs
[DEBUG] 10:49:09: -------------------------------------------------------------------------
[DEBUG] 10:49:09: -- SONOS Player Remote Plugin version 0.0.8
[DEBUG] 10:49:09: -------------------------------------------------------------------------
[DEBUG] 10:49:09: SONOS Player Remote Plugin V 0.0.8 loaded in memory...
[DEBUG] 10:49:09: Benchmark [SONOS Player Remote Plugin V 0.0.8 lib]: elapsed time: 0.000 cpu secs
[ERROR] 11:18:39: line 1653: attempt to index local 'clock' (a number value)

je l'utilise avec une scène :

--[[
%% properties
221 value
%% globals
--]]

 
local startSource = fibaro:getSourceTrigger();
local mss = 221; -- l'ID motion sensor
local light = 225; -- l'ID lumiere
local sonos = 285; -- l'ID sonos sdb
 
if (startSource['type']=='property') then
  if (tonumber(fibaro:getValue(mss, "value")) > 0) then
    fibaro:call(light, "turnOn");
    fibaro:debug("lampe on")
    fibaro:sleep(45*1000); -- delai de 45 sec
    if (tonumber(fibaro:getValue(mss, "value")) > 0) then
      fibaro:call(sonos, "pressButton", "23");--selection virage radio
      fibaro:call(sonos, "pressButton", "7");--radio on
    end
  else
    if (tonumber(fibaro:getValue(mss, "value")) == 0) then
      fibaro:call(light, "turnOff");
      fibaro:debug("lampe off")
      fibaro:call(sonos, "pressButton", "9");--radio pause
      fibaro:debug("radio off")
    end
  end
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Peux-tu essayer en activant le debug ? cf. fin du code du mainloop passer isTraceEnabled = true.

Tk.isTraceEnabled = true;

Sinon, je remarque que tu fais un "play" (fibaro:call(sonos, "pressButton", "7");) après la sélection de la radio, logiquement le "play" est automatique.

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne savais pas que le play était automatique après une sélection de radio...

 

J'ai donc supprimé la ligne "play" qui faisait doublon...

 

Maintenant ça fonctionne, étonnant car j'utilisait cette même scène ( donc avec doublon ) avec la version 0.0.7 sans pb particuliers.

Partager ce message


Lien à poster
Partager sur d’autres sites

oui c'est étrange, je vais jeter un œil dessus ce soir ;). Bon ça fonctionne ouf...

Partager ce message


Lien à poster
Partager sur d’autres sites

Petite mise àjour du sonos pour ce passé du bridge pour ceux que sa intéresse.

Perso j'ai mieux laisser mon wifi tranquille :D

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai fait la mise àjour, mais mon Sonos est connecté en Ethernet, donc ça ne change rien :D

Partager ce message


Lien à poster
Partager sur d’autres sites

Je suis dans le programme bêta SONOS, ils préparent cela depuis des mois et bon franchement ça ne casse pas des briques :D ... et puis pareil je préfère laisser tranquille mon Wifi avec tous les objets connectés dans la maison :D

Partager ce message


Lien à poster
Partager sur d’autres sites

 @Krikroff, sais-tu si Sonos prévoit de retoucher l'appli Sonos Controler pour IOS et Androà¯d car ce n'est vraiment pas réussi. Je préfère celle du PC (ancienne).

Partager ce message


Lien à poster
Partager sur d’autres sites

@Did, si tu parles de la nouvelle version disponible depuis quelques mois / semaines je ne pense pas que SONOS retouche en profondeur, personnellement je préfère de beaucoup la nouvelle app iOS :). Pour la version Desktop PC je suis depuis le début sur la nouvelle donc je ne suis pas déçus ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

 J'aimais bien l'ensemble des pièces à  gauche et leurs états. Le volume de la nouvelle version positionné dans l'angle en bas à  droite n'est pas pratique en paysage sur tablette: Volume à  fond si le pouce dépasse sur l'écran.

Partager ce message


Lien à poster
Partager sur d’autres sites

Perso je n'ai jamais connu l'ancienne version, car j'ai mon Sonos depuis 2 mois seulement.

Mais cette version me convient.

Et puis une seule pièce àgérer (pour le moment...)

Partager ce message


Lien à poster
Partager sur d’autres sites

Impossible de paramétrer l' IP dans le plugin SONOS dans la bêta :(

Partager ce message


Lien à poster
Partager sur d’autres sites

Arrête de persister avec FIBARO ... sors nous ta BOIboite : ton VD pour SONOS est bien plus abouti que le plug-in de la soit disant V4. je ne sais pas combien tu prends, mais envoies leurs ta facture ... je te la valide  :60:  :)

Partager ce message


Lien à poster
Partager sur d’autres sites

J'essaie quand même de faire la part des choses, après tout le HC2 gère quand même ma maison en grande partie depuis fin 2012 mais merci pour les encouragements et puis les plugins seront ouverts aux développeurs alors

Envoyé de mon iPhone àl'aide de Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut JM13, 

j'ai également créé des samples que j'ai stockés sur mon nas, j'utilise la fonction playfile , comme citée plus haut.

En revanche, je n'ai pas de reprise de la musique sur Sonos.

C'est pareil pour toi ?

 

Comme le dit Krikoff ...c'est une version très simple de TTS ...donc pas de reprise de radio ou autre. Mais ça correspond à  mon besoin pour l'instant ...en attenant la V4 ! Et à  voir les échanges sur les versions Alpha et "gros béta"   :) il y a de la marge.

 

Par contre, j'ai une question...comment génères-tu tes fichiers mp3 ?

 

Comme j'ai fait un VD pour le TTS j'ai mis l'icone : "Ici la voix"  :)

 

La Voix

Partager ce message


Lien à poster
Partager sur d’autres sites

×