Sortir du script si...

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
cedric2975
Messages : 15
Inscription : 16 nov. 2016, 17:31

Sortir du script si...

Message par cedric2975 »

Bonjour ou bonjoir

Je suis debutant en lua.
J'ai un script permettant de pinguer mes telephones et pour declencher des actions en fonction du resultat.

Code : Tout sélectionner

 if (ping_success_tel1 or ping_success_tel2)  and otherdevices['Presence']=='On'
    
    then
       print('Aucun changement')
    print('laissez moi sortir')
    end
     
Je souhaiterais que si cette condition est remplie, on sorte du script, car j'ai d'autre condition ensuite et je ne veux pas qu'elle soit lu
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Sortir du script si...

Message par vil1driver »

Salut,

Code : Tout sélectionner

If
Elseif
Elseif 
Elseif 
Else 
End
La première condition remplie empêche les suivantes

Sinon place quand tu veux (même plusieurs fois)

Code : Tout sélectionner

Return commandArray 
Dès que c'est lu le script est quitté
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: Sortir du script si...

Message par thier »

Tu remplaces end par else. Comme ça si tes ping sont bons tu fais ton print sinon tu fais ce qui est après else
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
cedric2975
Messages : 15
Inscription : 16 nov. 2016, 17:31

Re: Sortir du script si...

Message par cedric2975 »

thier a écrit :Tu remplaces end par else. Comme ça si tes ping sont bons tu fais ton print sinon tu fais ce qui est après else
Ok merci.
Le problème est que si j'utilise un commandArray['device'] à la suite du else, a chaque echec du ping je vais ré écrire l'état du device, donc impossible d'utiliser un devicehanged par la suite.
Bref j'ai bidouillé et fini par trouver une solution qui fonctionne
Si une fonction existait pour sortir du script complètement, elle m'aurait simplifié la vie.
cedric2975
Messages : 15
Inscription : 16 nov. 2016, 17:31

Re: Sortir du script si...

Message par cedric2975 »

le script_time

Code : Tout sélectionner

commandArray = {}




function timedifference (s)
  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)
  seconds = string.sub(s, 18, 19)
  t1 = os.time()
  t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
  difference = os.difftime (t1, t2)

  return difference

end

time = os.date("*t")


if (otherdevices['Presence']=='Off'  or (otherdevices['Presence']=='On'and timedifference(otherdevices_lastupdate['Presence']) > 120) 
 then  
   ping_success_tel1=os.execute('ping -c1 192.168.1.1')
   ping_success_tel2=os.execute('ping -c1 192.168.1.24')
 --ping_success_ipad=os.execute('ping -c1 192.168.1.93')

    if ping_success_tel1 
      then
      commandArray['Cédric']='On'
      else
      commandArray['Cédric']='Off'
    end

 
    if ping_success_tel2  
     then
     commandArray['Cat']='On'
         if otherdevices['Presence']=='Off' 
          then 
          commandArray['OpenURL'] = 'https://smsapi.free-mobile.fr/sendmsg?user=xxxxxxxxxx&pass=xxxxxxxxxxxxxx&msg=Cat est rentrée.'
         end 
      else
          commandArray['Cat']='Off'
    end
end

return commandArray
Le script_device

Code : Tout sélectionner

commandArray = {}

time = os.date("*t")
t=tonumber(otherdevices_svalues['ConsigneT'])

-- quelqu'un arrive
  if (devicechanged['Cat'] =='On' or devicechanged['Cédric']=='On' ) and otherdevices['Presence']=='Off'      -- Si tel ok et qu'iln'y avas personne ,retour, roomba à la base et augmentation de la temprérature de 3 °c
    then
        commandArray['Presence']='On'
        commandArray['RoombaDock']='On'             
        t = t + 30
        commandArray['ConsigneT']='Set Level '..t
        commandArray['Variable:consigne']=otherdevices_svalues['ConsigneT']  --synchro
  end
-- tout le monde est parti
  if  ( (((devicechanged['Cat'] =='Off' and otherdevices['Cédric']=='Off' ) and otherdevices['Presence']=='On') or 
         ((devicechanged['Cédric'] =='Off' and otherdevices['cat']=='Off' ) and otherdevices['Presence']=='On') or 
         ((devicechanged['Cat'] =='Off'and devicechanged['Cédric']=='Off' ) and otherdevices['Presence']=='On')) ) --
  then
         commandArray['Presence']='Off'
          t = t - 30
         commandArray['ConsigneT']='Set Level '..t
         commandArray['Variable:consigne']=otherdevices_svalues['ConsigneT']
          if  (time.hour>8 and time.hour<19) then 
              commandArray['RoombaClean']='On'
              commandArray['OpenURL'] = 'https://smsapi.free-mobile.fr/sendmsg?user=xxxxxxxx&pass=xxxxxxxxxxxxx&msg=RoombaClean !!'
              print('Départ du Roomba.')
          end
  end
-- personne n'arrive,ni ne part...
    if (devicechanged['Cat'] =='Off' and devicechanged['Cédric']=='Off' )  and otherdevices['Presence']=='Off'
    
    then
       print('Aucun changement')
  end

return commandArray
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Sortir du script si...

Message par vil1driver »

Tu peux tres bien tester si ton device est bien a Off avant de le passer a On et uniquement dans ce cas ;)

Ps: J'ai repondu a ta question pour sortir du script
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
cedric2975
Messages : 15
Inscription : 16 nov. 2016, 17:31

Re: Sortir du script si...

Message par cedric2975 »

vil1driver a écrit :Tu peux tres bien tester si ton device est bien a Off avant de le passer a On et uniquement dans ce cas ;)

Ps: J'ai repondu a ta question pour sortir du script
J avais essayer avec un return commandArray , mais j'avais des soucis avec les end, j aurais du approfondir peut etre
Répondre