Aller au contenu
971jmd

j'apprend le LUA mai

Recommended Posts

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

 

Partager ce message


Lien à poster
Partager sur d’autres sites

non et j'ai fait le teste avec d'autre module FGM 213.... et toujours la même chose 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

tu cliques pas sur le bouton play ?

alors là je sèche...

Faut que j'essaye demain chez moi demain...

Partager ce message


Lien à poster
Partager sur d’autres sites

et tu n'as rien qui déclencherait la scène par une autre manière ? (GEA, autre scène, ...)

Partager ce message


Lien à poster
Partager sur d’autres sites

Non c’est une toute nouvelle scène spécialement conçu pour le test

Partager ce message


Lien à poster
Partager sur d’autres sites

 10  ans avec FIBARO J’ai déjà vu des trucs bizarres

Modifié par 971jmd

Partager ce message


Lien à poster
Partager sur d’autres sites

je sais pas, comme dis j'essaye de reproduire ça demain, mais c'est vraiment étrange...

je te dirais...

Modifié par jjacques68

Partager ce message


Lien à poster
Partager sur d’autres sites

ok 

merci 

Bon ok on verra demain 

Partager ce message


Lien à poster
Partager sur d’autres sites

autre piste, exclure et ré inclure le module.

Mais je sais pas quelles sont les conséquences pour le reste de ton installation...

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Non pour le 1er et 2eme question 

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ) 

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu c'est quoi ça fonctionne maintenant 

 

J'ai supprimé la variable et recréer ;)

 

Un bug

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

Partager ce message


Lien à poster
Partager sur d’autres sites

"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...

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Si je comprend bien, return renvois uniquement true ou false 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×