Page 1 sur 1

Probleme script pour liste de dates

Publié : 30 sept. 2018, 21:59
par Starnight
Bonjour tout le monde.

Voilà plusieurs heures que je m'arrache les cheveux avec ce script. Je l'ai tiré d'un site mais il ne semble pas adapté parfaitement à notre LUA.
Je voudrais en fait entrer une liste de date et que le mon switch s'enclenche ou non en fonction de cette liste de date.
J'ai donc trouvé le script ci dessous mais il ne fonctionne pas.... Où se trouve mon erreur ?
Merci par avance

Code : Tout sélectionner

weekend=uservariables["weekend"]
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
secondes = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
t3 = os.date("%H:%M")
date1 = os.date ("%x")
difference = os.difftime(t1, t2)

---switchs :
local SCE='Seche Serviette SDB Etage'
local SCRDC='Seche Serviette SDB RDC'
local ZoneVacances='Zone C'
local Absent='Vacances'



commandArray = {}

-- Retourne true si le jour courant est un jour chômé (passé à la maison)
-- Le calcul effectif n'est fait qu'une fois par jour (ou si la Vera reboot)
josdJourChomeToday="NULL" -- Variable globale (date du dernier calcul) pour ne pas recalculer le résultat à chaque appel
josdJourChomeReturn=false -- Variable globale (résulat du dernier calcul) pour ne pas recalculer le résultat à chaque appel

function josdJourChome()
    local today=os.date("%Y-%m-%d")
    if(today~=josdJourChomeToday) then -- Faut-il refaire le calcul ?
    josdJourChomeToday=today
    josdJourChomeReturn=(josdJourEnfants())
  end
  return josdJourChomeReturn
end

function josdJourEnfants()
    local date1 = os.date ("%x")
  local enfants=false
   if     (date1>="10/05/18" or date1<="10/06/18") then enfants=true
    elseif     (date1>="10/19/18" or date1<="10/25/18") then enfants=true 
     elseif     (date1>="11/02/18" or date1<="11/03/18") then enfants=true 
     elseif     (date1>="11/16/18" or date1<="11/17/18") then enfants=true 
     elseif     (date1>="11/30/18" or date1<="11/01/18") then enfants=true 
         elseif date1=="09/30/18" then enfants=true
  end
  return enfants
end


if josdJourChomeReturn == 'true' then
    print ("cool ca marche !!!") --cette etape me sert à voir si mon script fonctionne mais elle ne passe pas...
    
end
--Ce qui suit fonctionne
  if t3 == '17:10' and otherdevices[SCE] == 'Off' and  otherdevices[ZoneVacances]=='Off' and weekend == 'non' and otherdevices[Absent] == 'Off' then
  
   print("Mise en route Seche Serviette RDC pour 1H30")
   commandArray[SCE] = 'On FOR 60'
   
elseif
    t3 == '21:30' and otherdevices[SCRDC] == 'Off' and otherdevices[Absent] == 'Off' then
  
   print("Mise en route Seche Serviette RDC pour 1H00")
   commandArray[SCRDC] = 'On FOR 60'
   
end

  return commandArray
Je vous precise que j'ai créé les deux variables josdJourChomeToday et josdJourChomeReturn au cas ou mais ca ne change rien

Re: Probleme script pour liste de dates

Publié : 30 sept. 2018, 22:43
par papoo
c'est un script initialement créé pour la vera
il y a une adaptation pour domoticz ici

Re: Probleme script pour liste de dates

Publié : 01 oct. 2018, 19:52
par lmet
Bonsoir,

Code : Tout sélectionner

if josdJourChomeReturn == 'true' then
    print ("cool ca marche !!!") --cette etape me sert à voir si mon script fonctionne mais elle ne passe pas...
 end
true/false sont des booléens pas des chaines essayes :

Code : Tout sélectionner

if josdJourChomeReturn == true then

Re: Probleme script pour liste de dates

Publié : 01 oct. 2018, 23:01
par Starnight
Merci pour vos réponses.
Je me suis inspiré du script donné en deuxième réponse.
Les prints ne passent pas du tout. Pas même ceux du script d'origine.
Pourtant ma variable est bien incrémenté de l'information false. Probleme c'est que quand j'entre une date qui devrait être true elle est quand meme false...
Voici le script :

Code : Tout sélectionner

weekend=uservariables["weekend"]

t3 = os.date("%H:%M")
date1 = os.date ("%x")

---switchs :
local SCE='Seche Serviette SDB Etage'
local SCRDC='Seche Serviette SDB RDC'
local ZoneVacances='Zone C'
local Absent='Vacances'



commandArray = {}

-- Retourne true si le jour courant est un jour chômé (passé à la maison)
-- Le calcul effectif n'est fait qu'une fois par jour (ou si la Vera reboot)
EnfantsToday=0 -- Variable globale (date du dernier calcul) pour ne pas recalculer le résultat à chaque appel
EnfantsTab={} -- Variable globale (résulat du dernier calcul) pour ne pas recalculer le résultat à chaque appel


function joesdJourEnfants()
    local today=os.date("%m-%d")
    local date1 = os.date ("%x")
    if(date1~=EnfantsToday) then
    EnfantsToday=date1
   EnfantsTab["10/05/18"] =true
   EnfantsTab["10/06/18"] =true
   EnfantsTab["10/19/18"] =true
   EnfantsTab["10/25/18"] =true 
   EnfantsTab["11/02/18"] =true
   EnfantsTab["11/03/18"] =true 
   EnfantsTab["11/16/18"] =true
   EnfantsTab["11/17/18"] =true 
   EnfantsTab["11/30/18"] =true
   EnfantsTab["11/01/18"] =true 
   EnfantsTab["10/01/18"] =true
  end
  return EnfantsTab[today]
end
print(joesdJourEnfants())
je=(joesdJourEnfants())
 print (je)
if joesdJourEnfants() == true
then
commandArray['Variable:je'] = 'true'
else
commandArray['Variable:je'] = 'false'

end 




  if t3 == '17:10' and otherdevices[SCE] == 'Off' and  otherdevices[ZoneVacances]=='Off' and weekend == 'non' and otherdevices[Absent] == 'Off' then
  
   print("Mise en route Seche Serviette RDC pour 1H30")
   commandArray[SCE] = 'On FOR 60'
   
elseif
    t3 == '21:30' and otherdevices[SCRDC] == 'Off' and otherdevices[Absent] == 'Off' then
  
   print("Mise en route Seche Serviette RDC pour 1H00")
   commandArray[SCRDC] = 'On FOR 60'
   
end



  return commandArray

Re: Probleme script pour liste de dates

Publié : 01 oct. 2018, 23:23
par Starnight
J'apporte ma réponse que j'ai trouvé en postant le message et en le relisant. Il fallait que je mette today au meme format que date1. Du coup maintenant ca fonctionne (sauf les prints qui eux ne passent toujours pas mais bon c'est pas trop grave ca.)

Voila le code pour ceux qui voudraient s'en inspirer :

Code : Tout sélectionner

weekend=uservariables["weekend"]

t3 = os.date("%H:%M")
date1 = os.date ("%x")

---switchs :
local SCE='Seche Serviette SDB Etage'
local SCRDC='Seche Serviette SDB RDC'
local ZoneVacances='Zone C'
local Absent='Vacances'



commandArray = {}

-- Retourne true si les enfants ne sont pas la
-- Le calcul effectif n'est fait qu'une fois par jour (ou si la Vera reboot)
EnfantsToday=0 -- Variable globale (date du dernier calcul) pour ne pas recalculer le résultat à chaque appel
EnfantsTab={} -- Variable globale (résulat du dernier calcul) pour ne pas recalculer le résultat à chaque appel


function joesdJourEnfants()
    local today=os.date("%x")
    local date1 = os.date ("%x")
    if(date1~=EnfantsToday) then
    EnfantsToday=date1
    -- dates absence enfants --
   EnfantsTab["10/12/18"] =true
   EnfantsTab["10/13/18"] =true
   EnfantsTab["10/26/18"] =true
   EnfantsTab["10/27/18"] =true 
   EnfantsTab["10/28/18"] =true
   EnfantsTab["10/29/18"] =true 
   EnfantsTab["10/30/18"] =true
   EnfantsTab["10/31/18"] =true
   EnfantsTab["11/01/18"] =true
   EnfantsTab["11/09/18"] =true
   EnfantsTab["11/10/18"] =true
   EnfantsTab["11/23/18"] =true
   EnfantsTab["11/24/18"] =true
   EnfantsTab["12/07/18"] =true
   EnfantsTab["12/08/18"] =true
   EnfantsTab["12/21/18"] =true
   EnfantsTab["12/22/18"] =true
   EnfantsTab["12/30/18"] =true
   EnfantsTab["12/31/18"] =true
   EnfantsTab["01/01/19"] =true
   EnfantsTab["01/02/19"] =true
   EnfantsTab["01/03/19"] =true
   EnfantsTab["02/04/19"] =true
   EnfantsTab["02/05/19"] =true
  end
  return EnfantsTab[today]
end

--print(joesdJourEnfants())
--je=(joesdJourEnfants())
 --print (je)
 
if joesdJourEnfants() == true
then
commandArray['Variable:je'] = 'true'
else
commandArray['Variable:je'] = 'false'

end 




  if t3 == '17:10' and otherdevices[SCE] == 'Off' and otherdevices[Absent] == 'Off' and je == 'false' then
  
   print("Mise en route Seche Serviette RDC pour 1H30")
   commandArray[SCE] = 'On FOR 60'
   
elseif
    t3 == '21:30' and otherdevices[SCRDC] == 'Off' and otherdevices[Absent] == 'Off' then
  
   print("Mise en route Seche Serviette RDC pour 1H00")
   commandArray[SCRDC] = 'On FOR 60'
   
end



  return commandArray

Re: Probleme script pour liste de dates

Publié : 30 oct. 2018, 22:31
par Starnight
Petite question supplémentaire : Pensez vous qu'il serait possible que le script récupère les dates sous cette forme dans un fichier texte par exemple ?

Re: Probleme script pour liste de dates

Publié : 13 nov. 2018, 17:37
par landaisbenj
Tout est possible en lua. (ou presque). Tu peux lire un fichier externe donc tu dois pouvoir faire ce que tu veux.

D'ailleurs tu peux surement aussi lire une entrée d'un agenda..

Re: Probleme script pour liste de dates

Publié : 14 nov. 2018, 10:39
par Starnight
Cool merci. Si quelqu'un a un lien ou un debut de script ca m'interesse. Merci d'avance

Re: Probleme script pour liste de dates

Publié : 14 nov. 2018, 11:12
par landaisbenj
Compliqué car c'est precis ce que tu demande.

Il faut que tu cible la librairie IO de lua: https://www.lua.org/pil/21.html

Regarde du coté des commande io.open, io.popen, io.read, loadfile, et dofile