Aller au contenu

Précis Sur Les Variables Locales/globales


JossAlf

Messages recommandés

C'est impossible, en faisant ce genre d'URL, tu passes par la méthode GET alors que tu as besoin de faire du PUT avec en plus de l'authentification :(
 
Tu a essayé de faire un curl, tu peux essayer cela 

curl -H 'Content-Type: application/json' -X PUT -d '{"value": "122Km", "isEnum":false}' http://admin:admin@IPXBOX/api/globalVariables/Test


J'ai testé chez moi avec succès.

 

Lien vers le commentaire
Partager sur d’autres sites

  • 6 mois après...

salut les gars, j'ai une question con mais c'est une question quand même !!

 

J'ai déclaré une variable globale pour les période de la journée TimeOfDay avec 4 états. 

 

J'ai fait une scène qui dit que de telle heure à  telle heure cela correspond à  1 période définie.

 

Comment j'écris mon debug pour savoir quelle valeur ma variable a pris ? (pour vérification que ma scène fonctionne ) :15: ???

 

Merci pour le retour

Lien vers le commentaire
Partager sur d’autres sites

Salut Pepite... 

 

Non ça j'ai bien compris mais je cherche à  afficher la valeur non numérique d'une variable globale 

 

pour illustrer : ma variable globale est TimeOfDay avec 4 états : Night, Morning, Day, Evening

 

Je veux récupérer l'une de ces 4 valeurs en fonction de l'heure de la journée. J'ai bien évidemment fait une semaine qui définit la valeur en fonction de fourchettes d'heures

Lien vers le commentaire
Partager sur d’autres sites

Les amis, 

 

Juste une demande de validation sur ma variable créée hier TImeOfDay

 

Elle comporte 4 états : morning, day, evening, night

 

j'ai fait ça pour la faire changer d'état 

--[[
%% autostart
%% properties
os.date("hour")
%% globals
TimeOfDay
--]]
local var = fibaro:getGlobalValue("TimeOfDay")
local now = os.date("*t")

if (now["hour"] >= 16 and now["hour"] <= 23)
      then
	fibaro:setGlobal("TimeOfDay", "Evening");
end
  if (now["hour"] >= 0 and now["hour"] < 7)
      then
	fibaro:setGlobal("TimeOfDay", "Night");
end     

if (now["hour"] >= 7 and now["hour"] < 9)
      then
	fibaro:setGlobal("TimeOfDay", "Morning");
end     
if (now["hour"] >= 9 and now["hour"] < 17)
      then
	fibaro:setGlobal("TimeOfDay", "Day");
  end   

a priori ça fonctionne mais je me demande si cette méthode permets de faire varier ces états automatiquement ou pas ?

 

En d'autres termes, et ce que, automatiquement, à  17h par exemple, ma variable va changer d'état ?

 

Merci pour vote aide

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

 

Je pense que tu n'as besoin de rien en entete, puisque rien n'est declenche par trigger, ce n'es pas un changement de propriete ou de valeur qui execute ta scene

 

Ta scene va tourner et verifier now et en fonction fera les setGlobal ;-)

 

Enfin, je ne suis aps un expert du LUA mais c'est comme ceci que j'ai traduit. je me trompe peut-etre

Lien vers le commentaire
Partager sur d’autres sites

Proposition en 1 minute et j'ai pas la possibilité de tester :

--[[
%% autostart
--]]

while true do 
	local now = os.date("*t")
	if (now["hour"] >= 16 and now["hour"] <= 23) then
		fibaro:setGlobal("TimeOfDay", "Evening");
	else if (now["hour"] >= 0 and now["hour"] < 7) then
		fibaro:setGlobal("TimeOfDay", "Night");
	else if (now["hour"] >= 7 and now["hour"] < 9) then
		fibaro:setGlobal("TimeOfDay", "Morning");
	else 
		fibaro:setGlobal("TimeOfDay", "Day");
	end   
	fibaro:sleep(60000)
end
Lien vers le commentaire
Partager sur d’autres sites

 

  • %% properties
  • os.date("hour")

Voilà  un truc que je n'ai jamais vu.

ça voudrait dire qu'à  chaque fois que l'heure change, la scène démarre.

Chaud devant .... :)

 

Je pense que tu dois enlever le os.date de même que le TimeOfDay sous global.

Il faut faire un "While true do" qui encadre ta scène, avec un sleep d'une minute

--[[
%% autostart
%% properties

%% globals

--]]
local var = fibaro:getGlobalValue("TimeOfDay")

while true do
local now = os.date("*t")
 local TriggerTime = string.format("%02d",now.hour)..":"..string.format("%02d",now.min);

if (TriggerTime  = "16:00")      then
	fibaro:setGlobal("TimeOfDay", "Evening");
end

  if (TriggerTime = "00:00" )      then
	fibaro:setGlobal("TimeOfDay", "Night");
end     
 
if (TriggerTime = "07:00" )      then
	fibaro:setGlobal("TimeOfDay", "Morning");
end   
  
if (TriggerTime  = "09:00" )      then
	fibaro:setGlobal("TimeOfDay", "Day");
  end  
fibaro:sleep(60*1000);
end 
Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...

Bonjour,

 

En regardant le code de GEA de @Steven, j'ai constaté que toutes les fonctions sont stockées dans une variable globale de type table, et que la scène contrôle avant de la créer si elle n'existe pas déjà.

 

Si je comprends bien l'intérêt dans le main loop d'un VD, je vois moins l'intérêt dans une scène ? D'après ce que j'ai pu constater, une variable globale se conserve d'un loop sur l'autre dans le VD (comme si le code s'insérait en réalité dans un sleep ou un setTimeout), mais pas d'une instance à l'autre d'une scène.

Lien vers le commentaire
Partager sur d’autres sites

En fait la Main Loop d'un VD est une boucle while avec un sleep() de 3 secondes.

Donc ton code se trouve là dedans, d'où l'astuce de la variable globale.

En conséquent, hors plantage ou arrêt volontaire de ton script (fibaro:abort()), le code d'une Main Loop tourne indéfiniment.

 

Cela n'est pas valable pour une scène, dont l'instance meurt dès que ton code LUA est terminé.

Lien vers le commentaire
Partager sur d’autres sites

Je ne sais pas, je ne me suis jamais plongé dans le code de GEA, je suis persuadé que Steven a mis un gros cheval de Troie dedans et qu'il espionne ma maison à distance, alors je préfère rester dans l'ignorance :P  et vivre comme un bienheureux qui bénéficie du service rendu :D

 

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

Ben non, c'est juste que tu n'as pas bien du lire le code ;)

 

Il n'y a qu'une seule variable globales GEA_Tasks et elle ne stocke que des R12, S23, ... qui permet de savoir si la tache #12 doit être redémarrée la #23 stoppée ... ce qui permet d'avoir un traitement entre les instances de GEA.

 

En aucun cas les functions sont stockées dans des VG,.

 

 

@Lazer

D'ailleurs, oublie pas de tirer la chasse d'eau un peu plus souvent ton CO2 est en augmentation :P

  • Like 3
Lien vers le commentaire
Partager sur d’autres sites

Je ne parlais pas d'une variable globale 'Fibaro' mais d'une variable globale 'Lua' :

if (not GEA) then
	
	GEA = {}
  
[...]

	GEA.insert = function(entry) 
		table.insert(GEA.todo, entry)
		--entry[GEA.keys["INDEX"]] = #GEA.todo	
		return entry[GEA.keys["INDEX"]]
	end
	
[...]
  
end

Ce qui signifie bien que les fonctions sont stockées dans la variable globale GEA. Ou alors j'ai vraiment rien compris <_< A quoi sert la condition (not GEA) dans une scène puisque par définition, elle sera toujours à true ?

Modifié par OJC
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...