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 :D

Tu sais que le wiki existe hein...

Code : Tout sélectionner

commandArray['OpenURL']='ton url'

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&param=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&param=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).