Page 1 sur 3
Script requête vocale
Publié : 07 juil. 2015, 18:30
par mich423
Bonsoir,
J' utilise un script blocky comme ci-dessous:
If exterieur temp = 30
Do Open URL
HTTP://192.168.1.206/speak.php?text=il fait 30 degrés à l'extérieur
La requête vocale est gérée par un autre Raspberry PI que celui sur lequel tourne Domoticz.
Le script fonctionne et la phrase "il fait 30 degrés à l'extérieur" est audible, mais je voudrais que l'URL ne soit appelée qu'une seule fois par palier (je voudrais créer autant de scripts que de températures entre 30 et 45 degrés avec un écart de 1 degré ), actuellement, à chaque fois que Domoticz récupère la température, l'URL est rappelée.
Une idée ?
Re: Script requête vocale
Publié : 07 juil. 2015, 18:44
par vil1driver
Idée

laisser tomber blockly pour lua.
Re: Script requête vocale
Publié : 07 juil. 2015, 18:56
par mich423
Merci,
Mais je ne sais pas comment appeler une url avec LUA.
Re: Script requête vocale
Publié : 07 juil. 2015, 20:03
par vil1driver
S'il n'y a que ça
Tu sais que le wiki existe hein...
Re: Script requête vocale
Publié : 07 juil. 2015, 20:54
par mich423
Merci,
Je n'y avais pas pensé, la chaleur !!!
Re: Script requête vocale
Publié : 07 juil. 2015, 22:42
par vil1driver
par petits bouts on ne va pas s'en sortir...
essai ce script
Code : Tout sélectionner
-- script_time_vocal.lua
--
-- Ce script permet d'annoncer la température une seule fois par pas de 1°C entre 30°C et 45°C
--
--------------------------------
------ Tableau à éditer ------
--------------------------------
local ip = '192.168.1.10:8080' -- user:pass@ip:port de domoticz
local sonde = 'exterieur temp' -- nom de la sonde de température
--------------------------------
-- Fin du tableau à éditer --
--------------------------------
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
commandArray = {}
-- relève de la température
local temp = tonumber(string.sub(otherdevices_svalues[sonde],1,4))
-- création variable de mémorisation si manquante
if(uservariables['Vocal_temp'] == nil) then
commandArray['OpenURL']=ip..'/json.htm?type=command¶m=saveuservariable&vname=Vocal_temp&vtype=2&vvalue=00'
-- teste si la température est à l'un des paliers voulus
elseif (temp == 30 or
temp == 31 or
temp == 32 or
temp == 33 or
temp == 34 or
temp == 35 or
temp == 36 or
temp == 37 or
temp == 38 or
temp == 39 or
temp == 40 or
temp == 41 or
temp == 42 or
temp == 43 or
temp == 44 or
temp == 45) then
-- si la température ne corresponds pas à la mémorisation, on l'annonce
if (temp ~= tonumber(uservariables['Vocal_temp'])) then
commandArray['OpenURL']='HTTP://192.168.1.206/speak.php?text=url_encode(il fait '..temp..' degrés à l\'extérieur)'
end
-- puis on mémorise la température
commandArray['Variable:Vocal_temp']=tostring(temp)
end
return commandArray
Re: Script requête vocale
Publié : 08 juil. 2015, 19:58
par mich423
Merci,
Je suis en déplacement. Je teste cela dès samedi.
Re: Script requête vocale
Publié : 12 juil. 2015, 14:02
par mich423
Bonjour,
Je viens de tester le script, il fonctionne, mais parfois, le requête vocale est répétée plusieurs fois à la suite, c'est un peu aléatoire. Une idée ?
Re: Script requête vocale
Publié : 12 juil. 2015, 16:00
par vil1driver
petite modif:
script_device_vocal.lua
Code : Tout sélectionner
-- script_device_vocal.lua
--
-- Ce script permet d'annoncer la température une seule fois par pas de 1°C entre 30°C et 45°C
--
--------------------------------
------ Tableau à éditer ------
--------------------------------
local ip = '192.168.1.10:8080' -- user:pass@ip:port de domoticz
local sonde = 'exterieur temp' -- nom de la sonde de température
--------------------------------
-- Fin du tableau à éditer --
--------------------------------
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
commandArray = {}
-- à chaque relève de température
if devicechanged[sonde] then
-- relève de la température
local temp = tonumber(string.sub(otherdevices_svalues[sonde],1,4))
-- création variable de mémorisation si manquante
if(uservariables['Vocal_temp'] == nil) then
commandArray['OpenURL']=ip..'/json.htm?type=command¶m=saveuservariable&vname=Vocal_temp&vtype=2&vvalue=00'
-- teste si la température est à l'un des paliers voulus
elseif (temp == 30 or
temp == 31 or
temp == 32 or
temp == 33 or
temp == 34 or
temp == 35 or
temp == 36 or
temp == 37 or
temp == 38 or
temp == 39 or
temp == 40 or
temp == 41 or
temp == 42 or
temp == 43 or
temp == 44 or
temp == 45) then
-- si la température ne corresponds pas à la mémorisation, on l'annonce
if (temp ~= tonumber(uservariables['Vocal_temp'])) then
commandArray['OpenURL']='HTTP://192.168.1.206/speak.php?text=url_encode(il fait '..temp..' degrés à l\'extérieur)'
-- puis on mémorise la température
commandArray['Variable:Vocal_temp']=tostring(temp)
end
end
end
return commandArray
Re: Script requête vocale
Publié : 13 juil. 2015, 11:28
par mich423
Bonjour,
J'ai testé avec la modif, cela fonctionne bien mieux, mais encore parfois, la requête vocale renvoyée deux fois avec une pause (j'imagine que c'est le temps d'inscrire la température afin d'éviter ensuite la répétition), c'est toujours aléatoire et pas systématique (je remonte l'info de 6 devices différents).