variable qui ne change pas lua

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
domoticzmax
Messages : 13
Enregistré le : 16 mai 2020, 12:24

variable qui ne change pas lua

Message par domoticzmax »

bonsoir a tous,
j'ai un problème avec ma variable, quoi que je tente elle reste a 0 alors je ne sais pas comment règle mon problème.
Je dois mal initialise mal ma variable sois je la modifie pas correctement pouvez vous m'aider je vous fait une copie de mon code lua.
je n'est aucune erreur et le code me renvoie toujours 0 pour compteur.
si je clic sur 25 le code s’exécute mais la variable reste a 0 donc le reste ne fonctionne pas
merci par avance :) .

Code : Tout sélectionner

commandArray = {}
compteur = 0
print (compteur) 

if (devicechanged['rideau gauche'] == '0') then  
    if (compteur == 0) then
        commandArray ['rideau gauche'] = 'Off'
        print (compteur) 
    elseif (compteur == 25) then
        commandArray[1]={['rideau gauche up']='On'}
        commandArray[2]={['rideau gauche up']='Off AFTER 5'} 
        print (compteur) 
    elseif (compteur == 50) then
        commandArray[1]={['rideau gauche up']='On'}
        commandArray[2]={['rideau gauche up']='Off AFTER 50'}  
        print (compteur) 
    elseif (compteur == 75) then
        commandArray[1]={['rideau gauche up']='On'}
        commandArray[2]={['rideau gauche up']='Off AFTER 75'}  
        print (compteur) 
    elseif (compteur == 100) then
        commandArray[1]={['rideau gauche up']='On'}
        commandArray[2]={['rideau gauche up']='Off AFTER 100'}   
        print (compteur) 
    end
compteur = 0

elseif (devicechanged['rideau gauche'] == '25') then
    if (compteur == 0) then
        commandArray[1]={['rideau gauche down']='On'}
        commandArray[2]={['rideau gauche down']='Off AFTER 5'}
    elseif (compteur == 25) then
        commandArray ['rideau gauche'] = 'Off'
    elseif (compteur == 50) then
        commandArray[1]={['rideau gauche up']='On'}
        commandArray[2]={['rideau gauche up']='Off AFTER 25'} 
    elseif (compteur == 75) then
        commandArray[1]={['rideau gauche up']='On'}
        commandArray[2]={['rideau gauche up']='Off AFTER 50'}  
    elseif (compteur == 100) then
        commandArray[1]={['rideau gauche up']='On'}
        commandArray[2]={['rideau gauche up']='Off AFTER 75'}  
    end   
 compteur = 25
 
elseif (devicechanged['rideau gauche'] == '50') then
    if (compteur == 0) then
        commandArray[1]={['rideau gauche down']='On'}
        commandArray[2]={['rideau gauche down']='Off AFTER 50'}
    elseif (compteur == 25) then
        commandArray[1]={['rideau gauche down']='On'}
        commandArray[2]={['rideau gauche down']='Off AFTER 25'} 
    elseif (compteur == 50) then
        commandArray ['rideau gauche'] = 'Off'
    elseif (compteur == 75) then
        commandArray[1]={['rideau gauche up']='On'}
        commandArray[2]={['rideau gauche up']='Off AFTER 25'}    
    elseif (compteur == 100) then
        commandArray[1]={['rideau gauche up']='On'}
        commandArray[2]={['rideau gauche up']='Off AFTER 50'}     
    end   
 compteur = 50

elseif (devicechanged['rideau gauche'] == '75') then
    if (compteur == 0) then
        commandArray[1]={['rideau gauche down']='On'}
        commandArray[2]={['rideau gauche down']='Off AFTER 75'}
    elseif (compteur == 25) then
        commandArray[1]={['rideau gauche down']='On'}
        commandArray[2]={['rideau gauche down']='Off AFTER 50'}
    elseif (compteur == 50) then
        commandArray[1]={['rideau gauche down']='On'}
        commandArray[2]={['rideau gauche down']='Off AFTER 25'} 
    elseif (compteur == 75) then
        commandArray ['rideau gauche'] = 'Off'
    elseif (compteur == 100) then
        commandArray[1]={['rideau gauche up']='On'}
        commandArray[2]={['rideau gauche up']='Off AFTER 25'}    
    end  
 compteur = 75

elseif (devicechanged['rideau gauche'] == '100') then
    if (compteur == 0) then
        commandArray[1]={['rideau gauche down']='On'}
        commandArray[2]={['rideau gauche down']='Off AFTER 100'}
    elseif (compteur == 25) then
        commandArray[1]={['rideau gauche down']='On'}
        commandArray[2]={['rideau gauche down']='Off AFTER 75'}   
    elseif (compteur == 50) then
        commandArray[1]={['rideau gauche down']='On'}
        commandArray[2]={['rideau gauche down']='Off AFTER 50'}  
    elseif (compteur == 75) then
        commandArray[1]={['rideau gauche down']='On'}
        commandArray[2]={['rideau gauche down']='Off AFTER 25'} 
    elseif (compteur == 100) then
        commandArray ['rideau gauche'] = 'Off'
    end   
 compteur = 100
end
    
return commandArray

denis_brasseur
Messages : 511
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: variable qui ne change pas lua

Message par denis_brasseur »

Tu initialise ta variable à 0 en début de script, tu change ensuite sa valeur à chaque elseif. A chaque nouvelle exécution du script, ta variable est remise à 0, même si sa valeur évolue dans ton script. Je n'ai pas regarder ton script en détail (je ne comprend pas à quoi il sert), essaye avec une variable utilisateur qui conservera sa valeur.
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
7 Modules fil pilote ZMNHJD1
2 détecteur fumées CHACON 34131
5 Bresser Capteur thermo/hygro
1 contacteur porte Philio PST02-1A Z
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

domoticzmax
Messages : 13
Enregistré le : 16 mai 2020, 12:24

Re: variable qui ne change pas lua

Message par domoticzmax »

Avec une utilisateur j'en est faite une nommé compteur avec entier à 0 comment je peut la modifié ensuite comme sur le scripte ? Et je dois l'appeler au début de script ? Je ne connais pas grand chose et ça fait plusieur jours que je suis bloquer la dessus.

vil1driver
Messages : 5515
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: variable qui ne change pas lua

Message par vil1driver »

Salut,

Il faut bien differentier variable interne au script (qui ne vit que le temps d'exécution du script) et variable utilisateur (qui conserve sa valeur même après exécution du script)

Leur usage est différent.

Dans ton script tu utilises le premier cas.
Tu met effectivement la variable à zero en début de script.
Puis tu test différentes valeurs possibles.
Mais elle ne peut être différente de zero.

Si tu souhaites avoir une variable qui vive en dehors du script, voir les variables utilisateur.
Ça ne s'utilise pas de la même façon mais tu trouveras de la doc facilement.

En tout cas, revoir la logique.
Dire
A = 0
Si A = 1 faire ceci...

Il est clair que 'ceci' ne sera jamais exécuté
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

domoticzmax
Messages : 13
Enregistré le : 16 mai 2020, 12:24

Re: variable qui ne change pas lua

Message par domoticzmax »

D'accord merci donc il me faut une variable utilisateur et j'ai essayer de faire exactement pareil mais la commande ne fonctionne pas faut il appeler la variable au début de script ?

vil1driver
Messages : 5515
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: variable qui ne change pas lua

Message par vil1driver »

Pas d'appel en début de script
Ou alors juste pour simplifier l'usage à suivre

Exemple

Remplace

Code : Tout sélectionner

compteur = 0
Par

Code : Tout sélectionner

local compteur = uservariables["compteur"]
Rien à changer au reste du script
Si ce n'est qu'une variable utilisateur est retournée sous forme de chaîne

Donc les tests sont à faire en fonction
Non pas

Code : Tout sélectionner

if (compteur == 0) then
Mais

Code : Tout sélectionner

if (compteur == '0') then
Ou alors convertir la variable en nombre avant

Code : Tout sélectionner

local compteur = tonumber(uservariables["compteur"]) 
[edit]
Ah si, il faut enlever dans le script les lignes où tu changes la valeur de compteur
Comme celle ci

Code : Tout sélectionner

compteur = 25
[/edit]

Ps: il est tout de même bizarre ton script, on a du mal à comprendre le but
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

domoticzmax
Messages : 13
Enregistré le : 16 mai 2020, 12:24

Re: variable qui ne change pas lua

Message par domoticzmax »

J'utilise le code pour faire monter ou descendre un store
Et j'ai un interrupteur qui a 6 position off pour tout couper 0 25 50 70 100 et selon la position sa actionne un interrupteur gauche up pour monter et gauche down pour descendre et pour le compteur je voudrais m'en servir pour le code pour actionner le bon interrupteur avec un temps donné je n'est pas de retour d'état du store.

Donc j'ai besoin des lignes qui change la valeur de compteur mais si je dois enlever celle là je peut les remplacer par quoi ?

vil1driver
Messages : 5515
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: variable qui ne change pas lua

Message par vil1driver »

Code : Tout sélectionner

commandArray['variable:compteur'] = '25'
https://www.domoticz.com/wiki/User_variables
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

domoticzmax
Messages : 13
Enregistré le : 16 mai 2020, 12:24

Re: variable qui ne change pas lua

Message par domoticzmax »

alors j'ai essayer plusieurs choses

Code : Tout sélectionner

local compteur = uservariables["compteur"]
avec

Code : Tout sélectionner

(compteur == '0')

et le code ne récupéré pas l'information car même quand elle est a 0 elle ne se met pas en off.
j'ai essayer avec tonumber
c'est pareil
j'ai également essayer avec

Code : Tout sélectionner

  if ( uservariables["compteur"] == "0" ) then 
ne fonctionne pas non plus j'ai l’impression les informations ne passe pas entre les variables et le script
j'ai même essayer un script

Code : Tout sélectionner

commandArray = {}
if ( uservariables["compteur"] == "0" ) then 
    commandArray['variable:compteur'] = '25'
end
return commandArray
et rien a faire la variable est toujours a 0
ma variable a pour dernière mise a jour hier 23h alors que j'ai fait a midi aujourd'hui

vil1driver
Messages : 5515
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: variable qui ne change pas lua

Message par vil1driver »

Tu l'as bien créé ta variable ?
Pas d'erreur dans les logs ?
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

Répondre