Aller au contenu

j'apprend le LUA mai


Messages recommandés

Posté(e)

c'est étrange... essaye cette scène pour plus de précision dans les traces

 

--[[
%% properties
244 value
%% weather
%% events
%% globals
--]]


function inc ()
  local MaVg = tonumber(fibaro:getGlobalValue('TEST'))
  print("MaVg avant = "..MaVg)
  MaVg = MaVg + 1
  fibaro:setGlobal('TEST', MaVg)
  MaVg = tonumber(fibaro:getGlobalValue('TEST'))
  print("MaVg après = "..MaVg)
end
  

local param1 = tonumber(fibaro:getValue(244, "value"))
print("valeur du module = "..parma1)
if param1 == 1 then
  inc()
else
  print("dans le else")
end

 

Posté(e) (modifié)

tu avais enlever le %%events, weather et global de l'entête ?

 

et tu n'as rien que peut rallumer automatiquement le module ?

Modifié par jjacques68
Posté(e)

Avec GEA ça fonctionne la variable passe à plus  1

GEA.add(true , 0, "", {"Global", "TEST", "inc+1"} )    

 

 

 même quand je test la ligne de code toute seule dans une scène, le résultat est toujours +2

fibaro:setGlobal('TEST', fibaro:getGlobalValue('TEST') +1 ) 

Posté(e)

salut 

 

Je revients sur les fonctions ou j'ai toujours de mal à comprendre 

 

J'ai réalisé une fonction qui fonctionne mai je souhaiterais comprendre le fonctionnement 

Quel est le rôle de return

function Calcul(x, y)
   r1 = x + y
   r2 = x + y
  
return r1, r2
end

-- Affectation multiple
local param1, param2 = 10, 10
 
 multi, add = Calcul(param1, param2)
 
 print("Le total de R1 est = "..multi.."     et     R2=   " ..add)
 
print(Calcul(r1, r2
Le total de R1 est = 20     et     R2=   20
40	40

 

Posté(e)

"return" te permet de récupérer les valeurs de retour de ta fonction.

 

Dans ton exemple, 

 

ta fonction renvoie 2 valeurs, R1 et R2

que tu appliques respectivement à multi et add.

 

si tu n'utilisait pas de return, dans ce cas, tu ne pourrait pas récupérer les calculs x+y.

à moins de passer par des variables global à la scène, mais ça n'a aucun intérêt, le return est là pour ça.

 

essaye de mettre en commentaire la ligne de return, et execute le code, tu verras le résultat...

 

Posté(e) (modifié)

Ce je ne comprends pas 

 

R1 = x + y  --- 10 + 10 = 20
R2 = x + y  --- 10 + 10 = 20

 

Pourquoi print(Calcul(r1, r2))  me retourne 40   et  R2    40 

 

40 est le total de R1 + R2 

 

pourquoi j'ai pas  R1 = 20    et    R2 = 20

 

Modifié par 971jmd
Posté(e)

y a une ambiguïté avec tes variables, 

 

tu rappelles la fonction calucul une 2ème fois, en passant non pas param1 et param2, mais r1 et r2 !

 

1er appel :

param1 + param2 = 10 + 10 = 20

2 appel :

r1 + r2 = 20 + 20 = 40

 

il ne faut pas faire appel aux variables locales de la fonction, à l'extérieur de la fonction !

ajoute les "local" avant r1 et r2 dans la fonction.

Posté(e)

Salut

 

Je commence à comprendre beaucoup de chose mai le chemin reste long

 

Pour les fonctions avec un retour print, j'arrive à récupérer la valeur d'une fonction et l'intégrée à une autre.

Mai pour le moment avec les RETURN ce n'est pas encor claire 

 

 

 

function conver (prix , coef)
  
   resultat =     prix * coef
   
    print(resultat)
end

conver (10, 10) 

--------------------

local A = 10
local B = 10
if resultat == A then  print("Ouvertur") 
elseif resultat * B == 1000 then print("fermeture") 
end

 

Je suis même arrivé à réaliser une petite fonction avec FIBARO. Mai je ne vois toujours pas l'utilité de return 

 

function inc_plus (a) 
	local sec = fibaro:setGlobal('came', fibaro:getGlobalValue('came') + a);
return a

end

local param5 = tonumber(fibaro:getValue(244, "value"))

if param5 == 1 then inc_plus (100)  end
print (inc)

 

Posté(e)

Autre exemple 

Quand je réalise un print venti j'ai comme résultat TRUE ce qui est OK

 

Et quand je souhaite exploitée le TRUE ou le FALSE dans un autre code je n'ai rien ?

  function venti ()
	local a = 30 
	local b = 50
	local c = 40
 
	local variableA = false   
	if (a < b) then   
      
		variableA = (c >= a) --or (c <= b) 
   --- else
	 ----  variableA = (c >= a) and (c <= b)
	end
 
	return variableA
end

print(venti())

----------------------------------------------------

if venti == true then  print("Ouvertur") 
elseif venti == false then print("fermeture") 
end

 

 

Posté(e)

pouuu je viens de trouver j'oublier les ()  :D

 

if venti() == true then  print("Ouvertur") 
elseif venti() == false then print("fermeture") 
end

Posté(e)

Visiblement je viens de comprendre que non 

 

mais je ne voie pas comment exploiter local A + B

function coco (u, t)   
local a = 10 + u + t
local b = u * t
  return a
end

if coco (200, 10) == 220 then print("uuuuuuu")
end

 

×
×
  • Créer...