Aller au contenu
JossAlf

Précis Sur Les Variables Locales/globales

Recommended Posts

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.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Désolé mais j'ai vraiment décroché ne sacant pas faire un CURL

Que faut-il envoyer en HTTP

Que faut il mettre dans le Bouton du VD ?

 

Je erais moins bete apres

Merci encore de ton aide

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Berale24.. le VD fonctionne nickel

 

Mais juste pour ma culture personnel, comment on fait pour afficher l'état d'une variable dans un debug ?

Partager ce message


Lien à poster
Partager sur d’autres sites

comme ceci, si 'jai bien compris la demande

local variable = ....
fibaro:debug("la valeur de variable est :" ..variable)

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu veux relire la valeur de ta varable globale ?

var = fibaro:getGlobalValue("TimeOfDay")

 

PS: pour le VD c'est surtout à  Steven qu'il faut dire merci.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

c'est vrai j'avoue

 

Merci Steven  :13:  :13:  :13:  :13:  :13:

Partager ce message


Lien à poster
Partager sur d’autres sites

eh ben voilà  cette fois ci merci Berale24   :13:  :13:  :13:  :13:  :13:  :13:

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut pepite, c'est bien ce que je pensais aussi mais ce qui est étrange c'est  que le debug n'affiche rien au changement d'heure tu vois.

 

Pour que ma valeur change, il faut que je redémarre ma scène

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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 

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
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é.

Partager ce message


Lien à poster
Partager sur d’autres sites

Donc pourquoi GEA est codé comme ça ? C'était un VD à l'origine ?

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

Heuuu ok, tu ne parles pas de VG mais de variable globale au sens programmation.

 

Donc c'est le 

if (not GEA) then 
   GEA = {}
end

qui te dérange ? En effet, il ne sert à plus rien ... mais il ne coûte rien non plus.

Partager ce message


Lien à poster
Partager sur d’autres sites

×