Bonjour,
J'ai relié mes sonos à Domoticz via l'application node-sonos-http-api.
j'ai ensuite installé sur node-sonos-http-api la possibilité d'envoi sur voiceRSS qui permet de déclencher les notifications de Domoticz directement sur les enceintes Sonos.
De ce fait, je peux recevoir des notifications vocales sur les sonos en ajoutant à mes script une commande du type:
commandArray['OpenURL']='http://192.145.0.21:5005/salon/say/ALAR ... r/fr-fr/30'
Le message est bien diffusé sur l'enceinte du salon.
Je souhaite reprendre un ancien tuto de Domoticz qui permet de faire un rapport quotidien:
https://easydomoticz.com/forum/viewtopi ... =17&t=3359
mon problème survient lors de l'envoi du message du rapport quotidien:
mon enceinte lit "sentence" au lieu de lire la formule se rapportant à la sentence.
si je fais print sentence, j'obtiens bien le rapport complet.
Cela vient du fait que le message envoyé peut (je pense) uniquement envoyer un texte défini et ne peux donc pas "reprendre" une formule....
commandArray['OpenURL']='http://192.145.0.21:5005/salon/say/sentence/fr-fr/30'
j'ai essayé également sans résultat
commandArray['OpenURL']='http://192.145.0.21:5005/salon/say/..sentence/fr-fr/30'
commandArray['OpenURL']='http://192.145.0.21:5005/salon/say/"..s ... "/fr-fr/30'
Ci-dessous le site du créateur de la node-sonos-http-api. avec les différentes fonctions possibles.
https://jishi.github.io/node-sonos-http-api/
Je souhaite donc envoyer le rapport quotidien sur mes sonos.
Quelqu'un peut-il m'aider dans cette démarche.
J'ai crée le script ci-dessous à partir de l'ancien tuto et de mes recherches.
SI vous avez des propositions d'amélioration de mon script, je suis également preneur.
Si vous avez d'autres solutions à me proposer pour arriver à ce résultat je suis preneur également.
J'ai pensé à différents autres possibilités
exple;
-exporter le rapport dans un fichier qui est envoyé ensuite à RSS pour être restitué sur les sonos
-exporter le fichier dans l'appli SONOS dans les favoris pour qu'il soit lu via une requete FTTP. le fichier doit être alors remplacé chaque jour par le nouveau....
Je n'ai néanmoins pas réussi à mettre en place ces idées.
Merci d'avance pour votre aide car je ne trouve aucune solution.
Voici le script de notification:
commandArray = {}
local timeNow= os.date("*t")
-- ############# CONDITIONS NECESSAIRES A L'EXECUTION DU SCRIPT #################
-- activation du rapport par
if devicechanged['test'] == "On" then
-- definition de la plage horaire de diffusion
--if (timeNow.hour >7 and timeNow.hour <12) then --rajouter un end a la fin
-- ############# fonction recuperation date #############
function os.capture(cmd)
local f = assert(io.popen(cmd, 'r'))
local s = assert(f:read('*a'))
f:close()
return s
end
local dateNEW=os.capture("export LANG=\"fr_FR.UTF-8\" && date \"+%A %d %B\"")
local sentence= "Bonjour, nous sommes le "..dateNEW.. "."
-- ############# PROGRAMME D'ENCODAGE DU TEXTE POUR LE TTS #################
function url_encode(str)
if (str) then
str = string.gsub (str, "\n", "\r\n")
str = string.gsub (str, "([^%w %-%_%.%~])",
function (c) return string.format ("%%%02X", string.byte(c)) end)
str = string.gsub (str, " ", "+")
end
return str
end
-- ############# recuperation notification c un jour ferie #############
for deviceName,deviceValue in pairs(otherdevices) do
--print ( "Device:"..deviceName.." Etat: "..deviceValue) --pour voir toutes les valeures
if (deviceName=='JOUR FERIE') then
if deviceValue == "On" then
sentence=sentence.." Cest un jour ferier."
end
end
end
-- ############# recuperation des anniversaires sil yen a un #############
for deviceName,deviceValue in pairs(otherdevices) do
if (deviceName=='ANNIVERSAIRE') then
if deviceValue ~= "Aucun Anniversaire" then
local anniv=otherdevices_svalues['ANNIVERSAIRE']
sentence=sentence.." Cest lanniversaire de " ..anniv.. "."
end
end
end
-- ############# recuperation de la fete du jour #############
local fetej=otherdevices_svalues['FETE DU JOUR']
sentence=sentence.." Nous fetons les " ..fetej.."."
-- ############# fonction arrondir temperature #############
function arrondir(num, dec)
if num == 0 then
return 0
else
local mult = 10^(dec or 0)
return math.floor(num * mult + 0.5) / mult
end
end
-- ############# recuperation de la temperature exterieure #############
local tempfenetre= otherdevices_svalues['TEMPDEHORS']:match("([^;]+);([^;]+);([^;]+)")
resultat = arrondir(tostring(tempfenetre),0)
sentence=sentence.." La température extérieure est de "..resultat.. " degrés"
-- ############# recuperation de la temperature METEO #############
local tempext= otherdevices_svalues['METEO']:match("([^;]+);([^;]+);([^;]+)")
resultat2 = arrondir(tostring(tempext),0)
sentence=sentence.." meme si la maitaio annonce "..resultat2.. " degrés."
-- ############# AJOUT RISQUE DE GIVRE #################
for deviceName,deviceValue in pairs(otherdevices) do
if (deviceName=='Risque de givre') then
if deviceValue == "Risque de givre" then
sentence=sentence.." Il y a peut-etre du givre, ne pas partir tard."
elseif deviceValue == "Presence de givre" then
sentence=sentence.." Attention il y a du givre, il faut partir tot et gratter."
end
end
end
-- ############# recuperer meteo prevision genre ensoleille nuageux #############
--etat=
--sentence=sentence.."le temp sera" ..etat
-- ############# notification risque pluie superieur a 50% #############
if otherdevices['RISQUE MATIN PLUIE'] == "On" then
if otherdevices['RISQUE APRESMIDI PLUIE'] == "On" then
sentence=sentence.." Il va pleuvoir toute la journee."
elseif otherdevices['RISQUE APRESMIDI PLUIE'] == "Off" then
sentence=sentence.." Il va pleuvoir ce matin."
end
elseif otherdevices['RISQUE MATIN PLUIE'] == "Off" then
if otherdevices['RISQUE APRESMIDI PLUIE'] == "On" then
sentence=sentence.." Il va pleuvoir cet apres-midi."
end
end
-- ############# notification mardi sortir tapis avant 9h #############
for deviceName,deviceValue in pairs(otherdevices) do
if (deviceName=='JOUR SEM') then
if deviceValue == "Mardi" then
if (timeNow.hour <10) then
sentence=sentence.." Ne pas oublier de rentrer le tapis pour le mainage."
end
end
end
end
-- ############# notification WAZE de route bouchee #############
if otherdevices['WAZE-DUREE TRAJET'] >= "30" then
if otherdevices['EN REPOS'] == "Off" then
sentence=sentence.." ALERTE WAZE ca ne roule pas bien ce matin. "
end
end
-- ############# notification bonne journee #############
sentence=sentence.." Passe une bonne journee. "
-- ############# test du texte #############
print (sentence)
-- ############# ENCODAGE DU TTS #################
sentence = url_encode(sentence)
-- ############# SORTIE DU TEXTE #################
--print (sentence)
--commandArray['OpenURL']="192.145.0.21:5005/?tts="..sentence
commandArray['OpenURL']='http://192.145.0.21:5005/salon/say/sentence/fr-fr/30'
end
return commandArray
probleme notification sonos/rss node-sonos-http-api
-
pierre78@dom
- Messages : 23
- Inscription : 23 sept. 2019, 20:34
probleme notification sonos/rss node-sonos-http-api
Raspberry PI3b+
-1 clé ZIGBEE2mQTT
-HONEYWELL 4 détecteurs feu
-AQARA 4 détecteurs fuite /4 capteurs température/5 capteurs fenêtre (2 pr alarme)
-PHILIPS HUE 3 dimmer/3 MOTIONS/6 ampoules blanc/3 bandes LED RGB
-SONOFF basic / POW r2
-SONOS 4 PLAY1
-1 clé ZIGBEE2mQTT
-HONEYWELL 4 détecteurs feu
-AQARA 4 détecteurs fuite /4 capteurs température/5 capteurs fenêtre (2 pr alarme)
-PHILIPS HUE 3 dimmer/3 MOTIONS/6 ampoules blanc/3 bandes LED RGB
-SONOFF basic / POW r2
-SONOS 4 PLAY1
-
pierre78@dom
- Messages : 23
- Inscription : 23 sept. 2019, 20:34
Re: probleme notification sonos/rss node-sonos-http-api
J'ai trouvé par moi-même...
si cela peut aider quelqu'un...
Pour Sonos, l'encodage TTS n'est pas nécessaire.(toute la partie encodage peut donc être supprimé).
IL faut en revanche remplacer dans chaque phrase (sentence), chaque espace par %20.
Enfin, la fin du script sera ainsi:
-- ############# SORTIE DU TEXTE #################
-- commandArray['OpenURL']='http://IP:5005/Cuisine/say/'..sentence..'/fr-fr/40' --retirer les 2 traits en debut
-- end --retirer les 2 traits en debut
return commandArray
si cela peut aider quelqu'un...
Pour Sonos, l'encodage TTS n'est pas nécessaire.(toute la partie encodage peut donc être supprimé).
IL faut en revanche remplacer dans chaque phrase (sentence), chaque espace par %20.
Enfin, la fin du script sera ainsi:
-- ############# SORTIE DU TEXTE #################
-- commandArray['OpenURL']='http://IP:5005/Cuisine/say/'..sentence..'/fr-fr/40' --retirer les 2 traits en debut
-- end --retirer les 2 traits en debut
return commandArray
Raspberry PI3b+
-1 clé ZIGBEE2mQTT
-HONEYWELL 4 détecteurs feu
-AQARA 4 détecteurs fuite /4 capteurs température/5 capteurs fenêtre (2 pr alarme)
-PHILIPS HUE 3 dimmer/3 MOTIONS/6 ampoules blanc/3 bandes LED RGB
-SONOFF basic / POW r2
-SONOS 4 PLAY1
-1 clé ZIGBEE2mQTT
-HONEYWELL 4 détecteurs feu
-AQARA 4 détecteurs fuite /4 capteurs température/5 capteurs fenêtre (2 pr alarme)
-PHILIPS HUE 3 dimmer/3 MOTIONS/6 ampoules blanc/3 bandes LED RGB
-SONOFF basic / POW r2
-SONOS 4 PLAY1