Aller au contenu

Messages recommandés

Posté(e)
 

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.

Posté(e) (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é par JossAlf
Posté(e)

N'ayant pas de squeezbox, est il possible de diffuser directement sur un PC ou un MAC ..... ?

Merci pour vos réponses

Posté(e)

En utilisant AirPlay (sur Mac) ça doit être possible de balancer vers une borne airport ou freebox mais ça doit être coton.

Posté(e)

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

Posté(e)

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

Posté(e)

Hello 

 

Avant tout, Un tout grand merci pour ces partages, on ne le dit pas assez souvent  :P

 

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.

Posté(e)

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/

Posté(e)

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.

  • 3 semaines après...
Posté(e)

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. :)

  • 4 semaines après...
Posté(e)

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 ?

Posté(e)
 

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 " 
Posté(e)

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.

×
×
  • Créer...