JossAlf Posté(e) le 8 mai 2014 Signaler Posté(e) le 8 mai 2014 Je vous propose un petit tutoriel pour créer un bouton qui diffusera un message (que vous taperez) sur vos squeezebox. Pour cela il vous faut une ou plusieurs squeezebox et un NAS avec Logitech media Serveur installé dessus. En suite vous créez un module virtuel avec un bouton qui contient le code suivant : --Taper ici la phrase à diffuser -- ATTENTION les accents sont mal lus par google -- Utiliser l'infinitif pour prononcer "diffusé" il faut taper "diffuser" local notification = "Message traduit par google et diffuser sur squeezebox" -- réglage du niveau sonore local NiveauSo = 60 -- On remplace les espaces par des %20 local notification = string.gsub((notification)," ", "%%20"); --fibaro:debug(notification) -- Adresse IP du Logitech Media Server local ipadd = "192.168.0.46" -- le port du serveur local portno = 9090 -- L'adresse MAC de la squeeze local player = "00:xx:xx:xx:xx:00 " local playername = "SqueezeBox " -- Allumage de la squeezebox local cmnd = "Power 1 " --Fabrication de la ligne qui sera envoyée au serveur squeeze local stringtosend = player .. cmnd .. string.char(10) -- ouverture du socket tcpSocket = Net.FTcpSocket(ipadd, portno) --réglage du timeout de 2 secondes tcpSocket:setReadTimeout(2*1000) -- envoi de la commande bytes, errorCode = tcpSocket:write(stringtosend) -- On règle le volume sonore ici 60 local cmnd = "mixer volume " .. NiveauSo .. " " --Fabrication de la ligne qui sera envoyée au serveur squeeze local stringtosend = player .. cmnd .. string.char(10) -- ouverture du socket tcpSocket = Net.FTcpSocket(ipadd, portno) --réglage du timeout de 2 secondes tcpSocket:setReadTimeout(2*1000) -- envoi de la commande bytes, errorCode = tcpSocket:write(stringtosend) -- On envoi le message local cmnd = "playlist play http://translate.google.com/translate_tts?tl=FR&ie=UTF-8&q=" .. notification; --Fabrication de la ligne qui sera envoyée au serveur squeeze local stringtosend = player .. cmnd .. string.char(10) -- ouverture du socket tcpSocket = Net.FTcpSocket(ipadd, portno) --réglage du timeout de 2 secondes tcpSocket:setReadTimeout(2*1000) -- envoi de la commande bytes, errorCode = tcpSocket:write(stringtosend) -- OFF des squeezeBoxs après 10 secondes fibaro:sleep(10*1000) local cmnd = "power 0 " --Fabrication de la ligne qui sera envoyée au serveur squeeze local stringtosend = player .. cmnd .. string.char(10) -- ouverture du socket tcpSocket = Net.FTcpSocket(ipadd, portno) --réglage du timeout de 2 secondes tcpSocket:setReadTimeout(2*1000) -- envoi de la commande bytes, errorCode = tcpSocket:write(stringtosend) Voilà . PS : On pourrait se passer d'allumer la squeezebox avent de diffuser le message, mais cela nous permet de régler le niveau sonore. Ainsi vous pouvez choisir de pousser à fond pour dire "A table !!!" ou avoir un niveau plus faible pour annoncer que "Toutes les portes sont bien fermées" à minuit quand vous cliquez sur le bouton dodo... Je vous conseille une amélioration du code ici (Emission Tts Simplifiée Sur Squeezebox). Ce nouveau code permet de simplifier les appels depuis un bouton en insérant seulement 5 lignes pour diffuser un message sur 1 ou plusieurs squeezebox.
JossAlf Posté(e) le 8 mai 2014 Auteur Signaler Posté(e) le 8 mai 2014 (modifié) Allé, pendant que j'y suis voici le code qui permet de checker mes portes le soir quand je déclenche la scène "dodo" [MAJ du code] Il passe de 204 ligne à 126... -- Adresse IP du Logitech Media Server local ipadd = "192.168.0.46" -- le port du serveur local portno = 9090 -- L'adresse MAC de la squeeze local player = "xx:xx:xx:xx:xx:xx " local playername = "SqueezeBox " -- réglage du niveau sonore local NiveauSo = 25 local notification = "" local NombrePorte = 0 -- 32 Garage if tonumber(fibaro:getValue(32, "value")) > 0 then NombrePorte = NombrePorte + 1 if NombrePorte > 1 then notification = notification.." et du garage ." else notification = notification.." du garage ." end fibaro:call(4, "sendPush", "Garage ouvert") fibaro:call(15, "sendPush", "Garage ouvert") end -- 34 Chambre bas if tonumber(fibaro:getValue(34, "value")) > 0 then NombrePorte = NombrePorte + 1 if NombrePorte > 1 then notification = notification.." et de la chambre du bas ." else notification = notification.." de la chambre du bas ." end fibaro:call(4, "sendPush", "Chambre du bas ouverte") fibaro:call(15, "sendPush", "Chambre du bas ouverte") end -- 38 Entrée principale if tonumber(fibaro:getValue(38, "value")) > 0 then NombrePorte = NombrePorte + 1 if NombrePorte > 1 then notification = notification.." et de lentrer ." else notification = notification.." de lentrer ." end fibaro:call(4, "sendPush", "Entrée principale ouverte") fibaro:call(15, "sendPush", "Entrée principale ouverte") end -- 39 cuisine du bas if tonumber(fibaro:getValue(39, "value")) > 0 then NombrePorte = NombrePorte + 1 if NombrePorte > 1 then notification = notification.." et de la cuisine du bas ." else notification = notification.." de la cuisine du bas ." end fibaro:call(4, "sendPush", "Cuisine du bas ouverte") fibaro:call(15, "sendPush", "Cuisine du bas ouverte") end -- 45 portail if tonumber(fibaro:getValue(45, "value")) > 0 then NombrePorte = NombrePorte + 1 if NombrePorte > 1 then notification = notification.." et du portail ." else notification = notification.." du portail ." end fibaro:call(4, "sendPush", "Portail ouvert") fibaro:call(15, "sendPush", "Portail ouvert") end -- Si il n'y a pas de porte ouverte : if NombrePorte == 0 then notification = "Toutes les portes sont fermée." end -- Si il n'y a qu'un porte ouverte : if NombrePorte == 1 then notification = "Attention a la porte "..notification.." elle me semble ouverte ." end -- Si on a plusieurs portes ouvertes : if NombrePorte > 1 then notification = "Attention il y a "..NombrePorte.." porte ouverte . Celle "..notification end -- Allumage de la squeezebox local cmnd = "Power 1 " local stringtosend = player .. cmnd .. string.char(10) tcpSocket = Net.FTcpSocket(ipadd, portno) tcpSocket:setReadTimeout(2*1000) bytes, errorCode = tcpSocket:write(stringtosend) -- On règle le volume sonore ici 25 local cmnd = "mixer volume " .. NiveauSo .. " " local stringtosend = player .. cmnd .. string.char(10) tcpSocket = Net.FTcpSocket(ipadd, portno) tcpSocket:setReadTimeout(2*1000) bytes, errorCode = tcpSocket:write(stringtosend) -- On envoie le message local notification = string.gsub((notification)," ", "%%20"); fibaro:debug(notification) local cmnd = "playlist play http://translate.google.com/translate_tts?tl=FR&ie=UTF-8&q=" .. notification; local stringtosend = player .. cmnd .. string.char(10) tcpSocket = Net.FTcpSocket(ipadd, portno) tcpSocket:setReadTimeout(2*1000) bytes, errorCode = tcpSocket:write(stringtosend) -- OFF des squeezeBoxs après 10 secondes fibaro:sleep(10*1000) local cmnd = "power 0 " local stringtosend = player .. cmnd .. string.char(10) tcpSocket = Net.FTcpSocket(ipadd, portno) tcpSocket:setReadTimeout(2*1000) bytes, errorCode = tcpSocket:write(stringtosend) Modifié le 14 mai 2014 par JossAlf
Rem's Posté(e) le 8 mai 2014 Signaler Posté(e) le 8 mai 2014 N'ayant pas de squeezbox, est il possible de diffuser directement sur un PC ou un MAC ..... ? Merci pour vos réponses
JossAlf Posté(e) le 8 mai 2014 Auteur Signaler Posté(e) le 8 mai 2014 En utilisant AirPlay (sur Mac) ça doit être possible de balancer vers une borne airport ou freebox mais ça doit être coton.
JossAlf Posté(e) le 8 mai 2014 Auteur Signaler Posté(e) le 8 mai 2014 Ché po suis sous Mac Il y a peut être un émulateur squeezebox sous PC ? Si non ça existe sous raspberry ( j'en ai un). C'est super facile, il y même un tuto de Cédric Locqueneux sur Maison et Domotique : http://maison-et-domotique.com/books/diy-votre-squeezebox-pour-40e/
cedriclocqueneux Posté(e) le 9 mai 2014 Signaler Posté(e) le 9 mai 2014 Merci pour le partage ! Je dois justement finir la mise en place définitive de mes squeezebox, ca va m'être bien utile
JossAlf Posté(e) le 9 mai 2014 Auteur Signaler Posté(e) le 9 mai 2014 J'ai une autre petite astuce avec Alon Dictaphone sur iPhone qui me permet d'enregistrer un message vocal et de l'envoyer sur le NAS pour le diffuser sur les Squeezes. Si ça intéresse quelqu'un je peux faire un petit tutot. Envoyé de mon iPhone àl'aide de Tapatalk
JossAlf Posté(e) le 9 mai 2014 Auteur Signaler Posté(e) le 9 mai 2014 Cette nuit je me disais que ce serait top d'envoyer un sms qui serait diffusé directement sur les squeeze... Envoyé de mon iPhone àl'aide de Tapatalk
Coolride Posté(e) le 9 mai 2014 Signaler Posté(e) le 9 mai 2014 Hello Avant tout, Un tout grand merci pour ces partages, on ne le dit pas assez souvent je vais essayer de faire la même chose avec mon NAS xpenology ( Merci a cédric locqueneux pour son fabuleux article à propos de DSM 5 sur un N54L ) A bientôt. Coolride.
razowski Posté(e) le 9 mai 2014 Signaler Posté(e) le 9 mai 2014 Je profite du topic pour vous partager une news sur laquelle je suis tombée hier: possibilité de downgrader une Logitech UE Smart Radio et obtenir donc une Squeezebox standard qui peut donc s'interfacer sur le serveur LMS. Jusqu'ici Logitech avait arrêté la Squeezebox et la nouvelle gamme ne s'interfaçait plus sur le serveur LMS... Du coup, plus de problème pour obtenir une Squeezebox et fini les enchères pour du vieux matériel au prix du neuf ;-) http://www.ericboisseau.com/squeezebox-meilleur-poste-radio-numerique-radios-internet-fichiers-musicaux-streamings-web/
JossAlf Posté(e) le 9 mai 2014 Auteur Signaler Posté(e) le 9 mai 2014 Oui Raz ! Bien vu j'avais oublié d'en parler...
JossAlf Posté(e) le 9 mai 2014 Auteur Signaler Posté(e) le 9 mai 2014 Pour info je viens de mettre le code complet (message 2) qui vérifie les portes et qui fabrique le message pour le diffuser en TTS sur 1 squeezebox.
oufman Posté(e) le 29 mai 2014 Signaler Posté(e) le 29 mai 2014 Salut JossAlf, c'est vraiment top comme astuce merci bien. J'ai une question, serait-il possible d'envisager de remplacer le texte dicté, par une variable prédéfinie ? Histoire de pouvoir créer des scènes mais avec un seul bouton ? Comme ça je peux créer une variable avec plusieurs texte défini, 1 bouton virtuel pour chaque squeezebox et dans mes scènes j'ai plus qu'à choisir la variable à lancer Tu penses que c'est jouable ? Merci encore je m'éclate comme un fou avec cette fonction.
JossAlf Posté(e) le 29 mai 2014 Auteur Signaler Posté(e) le 29 mai 2014 Vas voir ce sujet : http://www.domotique-fibaro.fr/index.php/topic/1185-emission-simplifiée-sur-squeezebox/?hl=squeeze J'ai fait un petit MV qui va te permettre de faire ce que tu veux en créant autant de boutons que tu veux avec 5 lignes pour chaque bouton !
PITP2 Posté(e) le 27 juin 2014 Signaler Posté(e) le 27 juin 2014 Bonjour, j'ai ce message d'erreur lorsque je lance le plugin [ERROR] 19:00:40: line 35: attempt to index global 'Net' (a nil value) la ligne 35 correspond à ceci tcpSocket = Net.FTcpSocket(ipadd, portno) Avez vous une idée de problème ?
JossAlf Posté(e) le 27 juin 2014 Auteur Signaler Posté(e) le 27 juin 2014 Tu n'aurais pas placer le code dans une scène ? Heu je cherche... Tu as bien adapté ton code dans les ligne du début ? -- Adresse IP du Logitech Media Server local ipadd = "192.168.0.46" -- le port du serveur local portno = 9090 -- L'adresse MAC de la squeeze local player = "00:xx:xx:xx:xx:00 " local playername = "SqueezeBox "
JossAlf Posté(e) le 27 juin 2014 Auteur Signaler Posté(e) le 27 juin 2014 Au passage, je te conseille de te servir du code du sujet suivant qui est une amélioration de celui proposé ici et qui est plus souple au niveau des appels depuis d'autre modules virtuels : http://www.domotique-fibaro.fr/index.php/topic/1185-emission-tts-simplifiée-sur-squeezebox/
PITP2 Posté(e) le 28 juin 2014 Signaler Posté(e) le 28 juin 2014 alors j'ai créé le module virtuel avec le nouveau code que tu as indiqué. J'ai toujours le même message. Par contre concernant l'ID du module virtuel comment le trouves tu ? autant je le vois dans les devices "nomraux" autant je n'arrive pas à le voir dans le module virtuel. [ERROR] 11:10:08: line 13: attempt to index global 'json' (a nil value) la ligne 13 correspond à celle ci fibaro:setGlobal("SqueezeNom" , json.encode(ListeSqueeze)) Je pense que je ne maitrise pas bien les différences entre Module Virtuel Scene ID des boutons et que je ne comprends pas non plus la ligne fibaro:call(123, "pressButton", "1"); Ps => Pour le problème initiale avec l'ancien code je l'ai résolu j'avais créé une scene au lieu d'un device virtuel avec bouton.
JossAlf Posté(e) le 28 juin 2014 Auteur Signaler Posté(e) le 28 juin 2014 Passe sur le sujet qui traite du nouveau code (j'y vais). C'est plus logique
Messages recommandés