Page 1 sur 1

Variable dans un script Lua - Help

Publié : 30 mars 2018, 10:29
par Phebus06
Bonjour à tous,

Comme beaucoup, maintenant que ma domotique tourne correctement et que la détection de présence de mon smartphone et celui de ma femme est opérationnel, je voudrait pouvoir lancer des scénario.

Celui que j'ai en tête doit se lancer qu'une fois par jour à la première détection du smartphone et doit être différent si elle rentre seule, si je rentre seule ou si nous rentrons ensemble.

Comme j'apprends tant bien que mal le Lua, je vais essayer de faire les choses l'une après l'autre.

Première des chose, comme je vais travailler sur des variables, créer dans domoticz une variable entier 'variable_Smartphone_Isa' et une variable entier 'Variable_Smartphone_Fab'

1) - A chaque passage de l'interrupteur virtuel 'Présence_Smartphone_Isa' à ON, rajouter +1 à la variable 'variable_Smartphone_Isa'
Ce qui me permettra plus tard de déclencher un scénari que lorsque la 'variable_Smartphone_Isa' sera à 1
Du coup est ce que vous pensez que le script si dessous est bon ?

Code : Tout sélectionner

commandArray {}

     if (devicechanged ['Présence_Smartphone_Isa']=='On') then
     commandArray ['Variable:variable_Smartphone_Isa']=tostring(uservariables["variable_Smartphone_Isa"] +1
     
     end
return commandArray
Ensuite je voudrais rajouter :
2) - Une remise à 0 de la variable 'variable_Smartphone_Isa' tous les jours à 05h00
et la je bloque ....

Re: Variable dans un script Lua - Help

Publié : 30 mars 2018, 14:23
par landaisbenj
Phebus06 a écrit :Bonjour à tous,

Comme beaucoup, maintenant que ma domotique tourne correctement et que la détection de présence de mon smartphone et celui de ma femme est opérationnel, je voudrait pouvoir lancer des scénario.

Celui que j'ai en tête doit se lancer qu'une fois par jour à la première détection du smartphone et doit être différent si elle rentre seule, si je rentre seule ou si nous rentrons ensemble.

Comme j'apprends tant bien que mal le Lua, je vais essayer de faire les choses l'une après l'autre.

Première des chose, comme je vais travailler sur des variables, créer dans domoticz une variable entier 'variable_Smartphone_Isa' et une variable entier 'Variable_Smartphone_Fab'

1) - A chaque passage de l'interrupteur virtuel 'Présence_Smartphone_Isa' à ON, rajouter +1 à la variable 'variable_Smartphone_Isa'
Ce qui me permettra plus tard de déclencher un scénari que lorsque la 'variable_Smartphone_Isa' sera à 1
Du coup est ce que vous pensez que le script si dessous est bon ?

Code : Tout sélectionner

commandArray {}

     if (devicechanged ['Présence_Smartphone_Isa']=='On') then
     commandArray ['Variable:variable_Smartphone_Isa']=tostring(uservariables["variable_Smartphone_Isa"] +1
     
     end
return commandArray
Je pense qu'il y a un espace entre Variable: et variable_Smartphone_Isa.

Deuxième chose, tu met la fonction "tostring", qui permet de transformer n'importe quelle donnée, en chaine. Et après tu fait + 1. En gros tu ajoute un chiffre à une chaîne.
Le LUA est peut être assez intelligent pour faire cela mais je pense qu'il vaut mieux faire chiffre plus chiffre...
Ensuite je voudrais rajouter :
2) - Une remise à 0 de la variable 'variable_Smartphone_Isa' tous les jours à 05h00
et la je bloque ....
Le problème dans ton besoin c'est que pour le point 2 tu veux remettre la variable a 0 a une certaines heures; il faut que domoticz aille vérifier ton script toutes les minutes pour savoir s'il est l'heure.
Et pour le point 1; il faut que domoticz aille vérifier ton script au moment ou ton device change de statu.. Les deux en même temps sont incompatibles. Car si tu verifie toutes les minutes l'heure du script alors ton device n'aura pas changé de statu, tu auras donc une erreure. Il faut faire deux scripts différents.

Un device et un time.

Pour la fonction en elle-même, il te faut l'heure exacte. La fonction os.date contient le timestamp exact au moment de l’exécution en seconde.
On transforme cette valeur en 'hh:mm' ensuite on la compare a '05:00'. Le problème c'est pour la bloquer.

Apres pour t'en donner plus, tu peux décomposer ton script et simplifier son écriture:
1/Utiliser une variable local pour pouvoir la traiter mathematiquement:

Code : Tout sélectionner

local isa = uservariables['variable_Smartphone_Isa']
et dans ton script:

Code : Tout sélectionner

isa = isa + 1
commandArray['Variable: variable_Smartphone_Isa']=isa
2/Réduire le nom de ta variable:
Au lieu de variable_Smartphone_Isa; Smartphone Isa est suffisant (variable ne sert a rien vu qu'il s'agit forcement d'un variable; _ ne servant a rien vu que tu traite le nom comme une chaine). Moi je mettrai un espace car plus tard quand tu en auras les connaissances tu verras que tu peux traiter la recherche d'un mot dans ta chaîne. Cela pourra t’être utile dans le cas de deux Smartphones.

3/Tu cherches a faire:
SI il est 5h ALORS : variable_Smartphone_Isa = 0
SI Presence_Smartphone_Isa passe a On ALORS : ajouter 1 a la variable
et tu doit ajouter un script quand ta variable est a 1

Je pense que tu peux simplifier en disant:
SI Presence_Smartphone_Isa passe a On ET que c'est la première fois depuis 5h du matin ALORS :
(mais je suis d'accord, ca demande plus de connaissance).
A terme tu pourras faire ca pour tes deux téléphones en disant:
SI 'un des devices commençant par Presence' passe a On ET que c'est la première fois de la journée ALORS :

Re: Variable dans un script Lua - Help

Publié : 30 mars 2018, 16:28
par Phebus06
Oula merci bien pour toutes les explications. Du coup je comprend beaucoup mieux.
Effectivement je me doutais que je devais faire deux script mais je pensais que j'avais pas assez bien compris et que ça devait être possible dans un seul. Du coup je me dis que je suis sur la bonne piste.
Je vais mettre en application tout ce que tu m'as dit dès ce week end :D

Encore merci

Re: Variable dans un script Lua - Help

Publié : 01 avr. 2018, 19:44
par Phebus06
Donc le script qui fonctionne nickel donne ceci :

Code : Tout sélectionner

commandArray = {}

     if devicechanged['Présence Smartphone Isabelle']=='On' then
     print "----------- Le script Changement de Variable Isabelle démarre -----------"
     
     isa = uservariables['Smartphone Isabelle']
     print (isa)
     
     Isa = isa + 1
     print (Isa)
     
     commandArray['Variable:Smartphone Isabelle']= ''..Isa..''
     print "----------- Fin du script -----------"
     
     end
     
return commandArray
et je test ce soir le script suivant en script_time pour remettre à zéro les variables tous les jours à 05h00 du matin :

Code : Tout sélectionner

-- Script de remise à zéro des variables Smartphone Isabelle et Smartphone Fabrice

commandArray={}

   time=os.date("*t")
   if (time.hour==5 and time.min==00) then
   print('=============== Début du script de remise à zéro des variables Smartphone Isabelle et Fabrice ===============')

   commandArray['Variable:Smartphone Isabelle']= '0'
   print('_______________ Variable Smartphone Isabelle mise à Zéro _______________')
   
   commandArray['Variable:Smartphone Fabrice']= '0'
   print('_______________ Variable Smartphone Fabrice mise à Zéro _______________')

   end
   print('=============== Fin du Script ===============')
return commandArray
à suivre ...

Re: Variable dans un script Lua - Help

Publié : 01 avr. 2018, 20:59
par landaisbenj
Pas mal!!!

Peut-être pour t'amener plus loin, sache que tu peux avoir un retour de otherdevice_lastupdate['Presence Smartphone Isa']. (Si tu fais un print ça t'indiquera ce que ça retourne).

Tout ça pour dire que si tu sais manier ça et os.date, alors peut-être que tu peux en un seul script déterminer si 'Présence Smartphone Isa' a était déclenché pour la première fois de la journée. (Ça t'éviteras deux script)