Page 1 sur 2

script sans erreur mais sans fonction

Publié : 03 févr. 2017, 11:46
par seblang
Bonjour,
je suis partie sur un script trouvé sur ce site mais voila, il n'y a pas d'erreur dans les logs mais le script ne marche pas!

merci de vos conseils :

Code : Tout sélectionner

--[[   
auteur : stephdes
version : 1.0
MAJ : 12/12/2016
Principe :
Si mon "réveil" est activé, tous les matins à 7H une annonce avec température, météo, fête du jour... est diffusée sur un HP bluetooth de ma pièce de vie"
]]--

commandArray = {}

local timeNow= os.date("*t")
local curl='C:\\curl\\9\\bin\\curl.exe' --METTRE ICI LE CHEMIN DE VOTRE CURL

-- #############  REMISE A ZERO DE LA VARIABLE "BONJOUR" ENTRE 6H et 7H (la variable doit être de type chaîne) #################

if (timeNow.hour >=5 and timeNow.hour <6) then
   commandArray['Variable:bonjour'] = tostring (0)
end

-- #############  CONDITIONS NECESSAIRES A L'EXECUTION DU SCRIPT  #################

if devicechanged['annoncematin'] == "On" and 
otherdevices['agenda google'] == 'On' and
    uservariables["bonjour"] == '0'
then
   local sentence="Bonjour ! Nous sommes le "..(os.date("%A")).." "..(os.date("%d")).." ".. os.date("%B").."."

local d = {
      ["Monday"] = " Lundi ",
      ["Tuesday"] = " Mardi ",
      ["Wednesday"] = " Mercredi ",
      ["Thursday"] = " Jeudi ",
      ["Friday"] = " Vendredi ",    
      ["Saturday"] = " Samedi ",
      ["Sunday"] = " Dimanche ",
      
      ["01"] = " premier ",
      ["02"] = " deux ",
      ["03"] = " trois ",
      ["04"] = " quatre ",
      ["05"] = " cinq ",    
      ["06"] = " six ",
      ["07"] = " sept ",
      ["08"] = " huit ",    
      ["09"] = " neuf ",

      ["January"] = " Janvier ",
      ["February"] = " Février ",
      ["March"] = " Mars ",    
      ["April"] = " Avril ",
      ["May"] = " Mai ",
      ["June"] = " Juin ",
      ["July"] = " Juillet ",
      ["August"] = " Août ",
      ["September"] = " Septembre ",
      ["October"] = " Octobre ",
      ["November"] = " Novembre ",
      ["December"] = " Décembre "   }
      
      for k, v in pairs (d) do
          sentence = string.gsub(sentence, k, v)
        end

-- #############  TEMPERATURE ET METEO  #################   

   json = (loadfile "C:\\cURL\\9\\bin\\JSON.lua")() --METTRE ICI LE CHEMIN DU JSON
   local city = "flagey-rigney"
   local wuAPIkey = "XXXXXXXXXXX"
   local file=assert(io.popen(curl.. 'http://api.wunderground.com/api/'..wuAPIkey..'/forecast/lang:FR/q/France/'..city..'.json'))   
   local raw = file:read('*all')
   file:close()   
   local jsonForecast = json:decode(raw)   
 --prevision = jsonForecast.forecast.txt_forecast.forecastday[1].fcttext_metric  -- Prévision complète
   prevision=jsonForecast.forecast.simpleforecast.forecastday[1].conditions  -- Prévision rapide

 local t = {
      ["ºC"] = "degré",

      [" ENE "] = " Est Nord Est ",
      [" NNE "] = " Nord Nord Est ",
      [" NE "] = " Nord Est ",
      [" N "] = " Nord ",    
      [" NNO "] = " Nord Nord Ouest ",
      [" NO "] = " Nord Ouest ",

      [" SSE "] = " Sud Sud Est ",
      [" SE "] = " Sud Est ",
      [" S "] = " Sud ",    
      [" SSO "] = " Sud Sud Ouest ",
      [" SO "] = " Sud Ouest ",
      
      [" O "] = " Ouest ",
      [" E "] = " Est ",
      
      ["km/h"] = " kilomètre heure"   }
      
      for k, v in pairs (t) do
          prevision = string.gsub(prevision, k, v)
      end

sentence=sentence.."Le temps de la journée sera "..prevision

-- #############  AJOUT RISQUE DE GIVRE  ################# 

 if (otherdevices_svalues['alerte givre'])=='Risque de givre' then
      sentence=sentence.." Il y a peut etre du givre, soyez prudent." 
   elseif (otherdevices_svalues['Risque de givre'])=='Présence de givre !' then
      sentence=sentence.." Attention il y a du givre, soyez très prudent!"
   end


-- #############  AJOUT JOUR DES POUBELLES #################
   month=tonumber(os.date("%m"))
   day=tonumber(os.date("%d"))

-- TRash day : Mardi poubelle jaune (impair) / mardi poubelle verte (pair) 

   numOfWeek=tonumber(os.date("%V"))
   numOfDay=os.date("%w")

   if (numOfDay == '2')  then -- mardi

   if (numOfWeek % 2 ==0)  then
      sentence=sentence.."La poubelle verte est rammassé aujourd'hui."  --pair
   else 
      sentence=sentence.."La poubelle jaune est rammassé aujourd'hui."  --impair
   end
end
-- #############  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
-- #############  ENCODAGE DU TTS  ################# 

sentence = url_encode(sentence)


-- #############  SORTIE DU TEXTE  ################# 

--print (sentence)
commandArray['OpenURL']="192.168.1.16:8888/?tts="..sentence..""


-- #############  PASSAGE DE LA VARIABLE BONJOUR A 1 POUR N'AVOIR LE MESSAGE QU'UNE SEULE FOIS PAR JOUR  ################# 

commandArray['Variable:bonjour'] = tostring (1)
end
return commandArray
seb

Re: script sans erreur mais sans fonction

Publié : 03 févr. 2017, 15:40
par vil1driver
Salut,

LOL, "ne fonctionne pas" n'aide en rien à comprendre..

Le début du script parle d'enceintes Bluetooth et toi non, perso juste cela me fait arrêter de chercher à t'aider..

Re: script sans erreur mais sans fonction

Publié : 03 févr. 2017, 17:07
par seblang
Bonjour Vil1driver et merci pour cette première réponse :-)

la commande "192.168.1.16:8888/?tts="..sentence.."" doit envoyer le texte a mon serveur sarah qui diffuse celui-ci sur une enceinte bluetooth.

quand je dis cela ne marche pas, c'est que le script n'envoie rien ! les logs ne signalent pas d'erreurs mais il n'y a pas d'annonce. Je ne sais pas si le texte est concaténé dans la variable sentence ou non.

voila un peu plus d'explications
seb

Re: script sans erreur mais sans fonction

Publié : 03 févr. 2017, 17:57
par vil1driver
As tu testé l'url dans ton navigateur pour écarter u problème du côté de sarah ?

Si tu veux savoir ce que contient sentence (décommente)

Code : Tout sélectionner

print(sentence) 
Ta variable 'bonjour' est bien à 0 lorsque tu test ?

Re: script sans erreur mais sans fonction

Publié : 04 févr. 2017, 08:57
par seblang
merci de m'aider

alors la commande 192.168.1.16:8888/?tts=xxxxx marche bien
ma variable bonjour est bien a zero et mes devises a "on"

j'ai décommenté print (sentence) et effectivement au déclenchement du script il n'affiche rien..... il doit donc y avoir une erreur avant mais j'ai cherché l'aide du tuto lua (http://wxlua.developpez.com/tutoriels/l ... plet/#L2-c) mais je n'arrive pas a comprendre ou cela déconne

tu as une idée peut être ?

Re: script sans erreur mais sans fonction

Publié : 04 févr. 2017, 11:04
par deennoo
Je viens d'essayer il fonctionne sur un rpi apres quelques modif.

Avant tout, ton domoticz est sur rpi ou windows ?

Pour les tests enleves les premieres conditions d'execution :
Variable
Heure
Le calendrier google

Et creer un virtuel qui s'appel annonce matin

Pour la meteo : regarde sur le blog, il y a un exemple de parsing json, c'est different de celui du script.

Regarde aussi ce que te donne le resultat de l'api wunderground

Ajout un print (prevision)

Une fois que cela fonctionne, rajoute les conditions une par une et test les.

Re: script sans erreur mais sans fonction

Publié : 04 févr. 2017, 20:29
par seblang
hello deennoo

oui je suis sur domoticz windows;

je suis partie du script trouve ici (https://www.domoticz.com/forum/viewtopic.php?t=10923) et repris ici viewtopic.php?t=3359.
le dernier fonctionne sous windows, c'est principalement les chemin curl et lua.json qui change.

alors pour répondre, le lien http://api.wunderground.com/api/'..wuAP ... ty..'.json fonctionne quand je mets la clef et le lieu.
en revanche j'ai une erreur dans les logs :

Error: EventSystem: in alert matin3: [string "--[[ ..."]:30: unexpected symbol near char(194)

la ligne 30 est celle qui comporte

Code : Tout sélectionner

prevision=jsonForecast.forecast.txt_forecast.forecastday[1].fcttext_metric 
c'est çà le parsing json ?

dsl je suis pas doué en lua

Re: script sans erreur mais sans fonction

Publié : 05 févr. 2017, 21:23
par seblang
hello deennoo

j'ai fait des essais toute la journée mais tjr sans résultat :-(

Tu me disais dans ton message "regarde sur le blog, il y a un exemple de parsing json, c'est different de celui du script."
peux tu me donner le lien stp

merci

Re: script sans erreur mais sans fonction

Publié : 07 févr. 2017, 11:04
par deennoo
voici mon script qui fonctinne mais sous linux, pas de windows

j'ai créer un dummy on/off que j'ai appeller annonce vocal

note les -- qui commente les conditions de calendrier et de uservariable

Code : Tout sélectionner

--[[   
auteur : stephdes
version : 1.0
MAJ : 12/12/2016
Principe :
Si mon "réveil" est activé, tous les matins à 7H une annonce avec température, météo, fête du jour... est diffusée sur un HP bluetooth de ma pièce de vie"
]]--

commandArray = {}

local timeNow= os.date("*t")
local curl='/usr/bin/curl' --METTRE ICI LE CHEMIN DE VOTRE CURL

-- #############  REMISE A ZERO DE LA VARIABLE "BONJOUR" ENTRE 6H et 7H (la variable doit être de type chaîne) #################

--if (timeNow.hour >=12 and timeNow.hour <20) then
   --commandArray['Variable:bonjour'] = tostring (0)
--end

-- #############  CONDITIONS NECESSAIRES A L'EXECUTION DU SCRIPT  #################

if devicechanged['annoncematin']  
--otherdevices['Gcalendrier'] == 'On' and
 --   uservariables['bonjour'] == '0'
then
   local sentence="Bonjour ! Nous sommes le "..(os.date("%A")).." "..(os.date("%d")).." ".. os.date("%B")..""

local d = {
      ["Monday"] = " Lundi ",
      ["Tuesday"] = " Mardi ",
      ["Wednesday"] = " Mercredi ",
      ["Thursday"] = " Jeudi ",
      ["Friday"] = " Vendredi ",    
      ["Saturday"] = " Samedi ",
      ["Sunday"] = " Dimanche ",
      
      ["01"] = " premier ",
      ["02"] = " deux ",
      ["03"] = " trois ",
      ["04"] = " quatre ",
      ["05"] = " cinq ",    
      ["06"] = " six ",
      ["07"] = " sept ",
      ["08"] = " huit ",    
      ["09"] = " neuf ",

      ["January"] = " Janvier ",
      ["February"] = " Février ",
      ["March"] = " Mars ",    
      ["April"] = " Avril ",
      ["May"] = " Mai ",
      ["June"] = " Juin ",
      ["July"] = " Juillet ",
      ["August"] = " Août ",
      ["September"] = " Septembre ",
      ["October"] = " Octobre ",
      ["November"] = " Novembre ",
      ["December"] = " Décembre "   }
      
      for k, v in pairs (d) do
          sentence = string.gsub(sentence, k, v)
        end

-- #############  TEMPERATURE ET METEO  #################   

   json = (loadfile "l'emplacement de ton fichier JSON.lua")() --METTRE ICI LE CHEMIN DU JSON.lua
   local city = "taville"
   local wuAPIkey = "toncode api"
   local config=assert(io.popen('/usr/bin/curl http://api.wunderground.com/api/'..wuAPIkey..'/forecast/lang:FR/q/France/'..city..'.json'))  --attention ici le chemin de curl est adapté a linux 
   local blocjson = config:read('*all')
   config:close()
   --print (blocjson) --enlever les -- pour voir afficher ce que renvoie lapi wunderground dans les log de domoticz
   local jsonValeur = json:decode(blocjson)
   --prevision = jsonValeur.forecast.txt_forecast.forecastday.period[0].fcttext_metric  -- Prévision complète pas essayé
   prevision = jsonValeur.forecast.simpleforecast.forecastday[1].conditions  -- Prévision rapide 
   --print (prevision) -- enleve les -- afin de voir ce que donne le parsing des conditions de simpleforcastday 1er pave

 local t = {
      ["ºC"] = "degré",

      [" ENE "] = " Est Nord Est ",
      [" NNE "] = " Nord Nord Est ",
      [" NE "] = " Nord Est ",
      [" N "] = " Nord ",    
      [" NNO "] = " Nord Nord Ouest ",
      [" NO "] = " Nord Ouest ",

      [" SSE "] = " Sud Sud Est ",
      [" SE "] = " Sud Est ",
      [" S "] = " Sud ",    
      [" SSO "] = " Sud Sud Ouest ",
      [" SO "] = " Sud Ouest ",
      
      [" O "] = " Ouest ",
      [" E "] = " Est ",
      
      ["km/h"] = " kilomètre heure"   }
      
      for k, v in pairs (t) do
          prevision = string.gsub(prevision, k, v)
      end

sentence=sentence.."Le temps de la journée sera "..prevision

-- #############  AJOUT RISQUE DE GIVRE  ################# 

 if (otherdevices_svalues['Givre'])=='Risque de givre' then
      sentence=sentence.." Il y a peut etre du givre, soyez prudent." 
   elseif (otherdevices_svalues['Risque de givre'])=='Présence de givre !' then
      sentence=sentence.." Attention il y a du givre, soyez très prudent!"
   end 


-- #############  AJOUT JOUR DES POUBELLES #################
   month=tonumber(os.date("%m"))
   day=tonumber(os.date("%d"))

-- TRash day : Mardi poubelle jaune (impair) / mardi poubelle verte (pair) 

   numOfWeek=tonumber(os.date("%V"))
   numOfDay=os.date("%w")

   if (numOfDay == '1')  then 
         sentence=sentence.."La poubelle verte est rammassé demain."  
   elseif (numOfDay == '3')  then
      sentence=sentence.."La poubelle jaune est rammassé demain."  
   end

-- #############  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
-- #############  ENCODAGE DU TTS  ################# 

sentence = url_encode(sentence)


-- #############  SORTIE DU TEXTE  ################# 

--print (sentence) --eneleve les -- pour voir ce qui est envoyé a sarah
commandArray['OpenURL']="ip de ta sarah:8888/?tts="..sentence..""


-- #############  PASSAGE DE LA VARIABLE BONJOUR A 1 POUR N'AVOIR LE MESSAGE QU'UNE SEULE FOIS PAR JOUR  ################# 

commandArray['Variable:bonjour'] = tostring (1)
end
return commandArray

Re: script sans erreur mais sans fonction

Publié : 08 févr. 2017, 12:34
par seblang
bonjour et merci pour l'aide

ça marche presque mais j'ai encore l'erreur :

[string "--[[ ..."]:119: bad argument #1 to 'date' (invalid conversion specifier '%V')

si je supprime le passage "poubelle" j'ai bien une annonce vocale.

encore merci
seb