jjacques68 Posté(e) le 30 avril 2020 Signaler Posté(e) le 30 avril 2020 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
971jmd Posté(e) le 30 avril 2020 Auteur Signaler Posté(e) le 30 avril 2020 non et j'ai fait le teste avec d'autre module FGM 213.... et toujours la même chose
jjacques68 Posté(e) le 30 avril 2020 Signaler Posté(e) le 30 avril 2020 la scène, tu la lances manuellement ?
971jmd Posté(e) le 30 avril 2020 Auteur Signaler Posté(e) le 30 avril 2020 Non Elle est en automatique
jjacques68 Posté(e) le 30 avril 2020 Signaler Posté(e) le 30 avril 2020 tu cliques pas sur le bouton play ? alors là je sèche... Faut que j'essaye demain chez moi demain...
jjacques68 Posté(e) le 30 avril 2020 Signaler Posté(e) le 30 avril 2020 et tu n'as rien qui déclencherait la scène par une autre manière ? (GEA, autre scène, ...)
971jmd Posté(e) le 30 avril 2020 Auteur Signaler Posté(e) le 30 avril 2020 Non c’est une toute nouvelle scène spécialement conçu pour le test
971jmd Posté(e) le 30 avril 2020 Auteur Signaler Posté(e) le 30 avril 2020 (modifié) 10 ans avec FIBARO J’ai déjà vu des trucs bizarres Modifié le 1 mai 2020 par 971jmd
jjacques68 Posté(e) le 30 avril 2020 Signaler Posté(e) le 30 avril 2020 (modifié) je sais pas, comme dis j'essaye de reproduire ça demain, mais c'est vraiment étrange... je te dirais... Modifié le 30 avril 2020 par jjacques68
971jmd Posté(e) le 30 avril 2020 Auteur Signaler Posté(e) le 30 avril 2020 ok merci Bon ok on verra demain
jjacques68 Posté(e) le 30 avril 2020 Signaler Posté(e) le 30 avril 2020 autre piste, exclure et ré inclure le module. Mais je sais pas quelles sont les conséquences pour le reste de ton installation...
jjacques68 Posté(e) le 30 avril 2020 Signaler Posté(e) le 30 avril 2020 (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é le 30 avril 2020 par jjacques68
971jmd Posté(e) le 30 avril 2020 Auteur Signaler Posté(e) le 30 avril 2020 Non pour le 1er et 2eme question
971jmd Posté(e) le 30 avril 2020 Auteur Signaler Posté(e) le 30 avril 2020 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 )
971jmd Posté(e) le 1 mai 2020 Auteur Signaler Posté(e) le 1 mai 2020 Tu c'est quoi ça fonctionne maintenant J'ai supprimé la variable et recréer Un bug 1
971jmd Posté(e) le 1 mai 2020 Auteur Signaler Posté(e) le 1 mai 2020 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
jjacques68 Posté(e) le 1 mai 2020 Signaler Posté(e) le 1 mai 2020 "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...
971jmd Posté(e) le 1 mai 2020 Auteur Signaler Posté(e) le 1 mai 2020 (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é le 1 mai 2020 par 971jmd
jjacques68 Posté(e) le 1 mai 2020 Signaler Posté(e) le 1 mai 2020 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.
971jmd Posté(e) le 2 mai 2020 Auteur Signaler Posté(e) le 2 mai 2020 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)
971jmd Posté(e) le 2 mai 2020 Auteur Signaler Posté(e) le 2 mai 2020 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
971jmd Posté(e) le 2 mai 2020 Auteur Signaler Posté(e) le 2 mai 2020 pouuu je viens de trouver j'oublier les () if venti() == true then print("Ouvertur") elseif venti() == false then print("fermeture") end
971jmd Posté(e) le 2 mai 2020 Auteur Signaler Posté(e) le 2 mai 2020 Si je comprend bien, return renvois uniquement true ou false
971jmd Posté(e) le 2 mai 2020 Auteur Signaler Posté(e) le 2 mai 2020 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
Messages recommandés