Aller au contenu
Titof_44

Création variable globale dans une scène

Recommended Posts

Bonjour, Qu'est ce que je fais de mal, je ne comprends pas pour quoi cela ne marche pas, la variable n'est pas crée donc le debug renvoie nil et les debug de http n'apparaissent pas !

Dans un VD avec les Net.FHttp je n'ai pas de problème !

Merci d'avance.

	function createGlobalIfNotExists(varName, defaultValue)
        if (fibaro:getGlobal(varName) == nil) then
            fibaro:debug("Création de la variable "..varName.." avec comme valeur par défaut "..defaultValue)
            newVar = {}
            newVar.name = varName
      		newVar.isEnum = 0
            newVar.value = defaultValue
      		local http = net.HTTPClient()
            http:request("http://127.0.0.1:11111/api/globalVariables", { options = { method = 'POST', data = json.encode(newVar)},
            	success = function(response) fibaro:debug(varName .. " création avec succès") end,
            	error = function(response) fibaro:debug(varName .. " ERROR !!!") end
        		})     
        end
    	fibaro:debug(varName .. " valeur "..fibaro:getGlobal(varName))
		return true
	end

 

Partager ce message


Lien à poster
Partager sur d’autres sites

avec api.post c'est plus facile.

 

Voici une fonction qui fait le job :

 

local debug = true -- false

--
-- createVG function
--
function CreateVG(varName, varValue, varEnum)
	Message("purple", "CreateVG")
	local isEnum = (#varEnum > 0) and 1 or 0
	local payload = {name=varName, isEnum=isEnum, value=(varValue or "")}
	if debug then
		Message("gray", json.encode(payload))
	end
	local response, status = api.post("/globalVariables/"..varName, payload)
	if (tonumber(status) == 200 or tonumber(status) == 201) and response ~= nil and response ~= "" then
		Message("", 'Global variable "'..varName..'" created')
		if isEnum > 0 then
			local payload = {name=varName, isEnum=true, enumValues=varEnum}
			local response, status = api.put("/globalVariables/"..varName, payload)
			if (tonumber(status) == 200 or tonumber(status) == 201) and response ~= nil and response ~= "" then
				Message("", 'Global variable "'..varName..'" modified with enum values')
			else
				Message("red", 'Error : Can not modify enum global variable, status='..status..', payload='..json.encode(payload)..', response='..(response or ""))
			end
		end
	else
		Message("red", 'Error : Can not create global variable, status='..status..', payload='..json.encode(payload)..', response='..(response or ""))
	end
end -- function


-- Create VG
local vg = "MyVariable"
local variable = api.get("/globalVariables/"..vg)
if not variable then
	if debug then
		Message("gray", 'Global variable "'..vg..'" does not exist')
	end
	CreateVG(vg, "", {})
elseif debug then
	Message("green", 'Global variable "'..vg..'" exist')
end

Attention dans ce code la fonction Message() fait appel à une autre fonction que je n'ai pas recopié, tu peux simplement faire un fibaro:debug() à la place

  • Upvote 3

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici une solution que le pére @steven m'avait donné

 

--[[
%% properties
%% globals
--]]
 
 
local variables = {
  
	{nom = "JourChomeJ1", valeur = "NON", choix = {"OUI"}}, -- VD J chomé
    {nom = "JourChome", valeur = "NON", choix = {"OUI"}}, -- VD J chomé
    {nom = "Conges", valeur = "NON", choix = {"OUI"}},
    {nom = "Chloe", valeur = "NON", choix = {"OUI"}

}
 
local variablesASupprimer = {
	--{nom = "TestSteven"}
}
 
-- -----------------------------------------------
-- Supprime une variable
-- -----------------------------------------------
function supprimer(nom)
	local http = net.HTTPClient()
	http:request("http://127.0.0.1:11111/api/globalVariables/"..nom, { 
		options = { 
			method = 'DELETE'
		} ,
		success = function(response) fibaro:debug(nom .. " supprimée avec succès") end,
		error = function(response) fibaro:debug(nom .. " ERROR !!!") end,
	}) 
end
 
-- -----------------------------------------------
-- Modifie une variable
-- -----------------------------------------------
function modifier(nom, valeur, choix)
	local variable = {}
	variable.value = valeur
	variable.isEnum = false
	if (type(choix) ~= "nil") then
		variable.isEnum = true
        table.insert(choix, 1, valeur)
		variable.enumValues = choix
	end
 
	local http = net.HTTPClient()
	http:request("http://127.0.0.1:11111/api/globalVariables/"..nom, { 
		options = { 
			method = 'PUT', 
			data = json.encode(variable)
		},
		success = function(response) fibaro:debug(nom .. " modifiée avec succès") end,
		error = function(response) fibaro:debug(nom .. " ERROR !!!") end,
	}) 
end
 
-- -----------------------------------------------
-- Ajoute une variable
-- -----------------------------------------------
function ajouter(nom, valeur, choix)
	local enum = 0
	if (type(choix) ~= "nil") then
		enum = 1
	end
	local http = net.HTTPClient()
	http:request("http://127.0.0.1:11111/api/globalVariables", { 
		options = { 
			method = "POST", 
			data = json.encode({name=nom, isEnum=enum})
		},
		success = function(response) 
			fibaro:debug(nom .. " créé avec succès") 
			modifier(nom, valeur, choix)
		end,
		error = function(response) fibaro:debug(nom .. " ERROR !!!") end,
	}) 
end
 
-- -----------------------------------------------
-- Voir si une variable existe ou non
-- et la modifier ou créer
-- -----------------------------------------------
function traiter(nom, valeur, choix)
	if (fibaro:getGlobalValue(nom) == nil) then
		ajouter(nom, valeur, choix)
	else
-- modifier(nom, valeur, choix)
	end
end
 
----------------------------------------------------
-- Execution du programme
----------------------------------------------------
for _,v in ipairs(variables) do
	traiter(v.nom, v.valeur, v.choix)
end
 
for _,v in ipairs(variablesASupprimer) do
	supprimer(v.nom)
end

 

  • Upvote 3

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci à tous. @Steven essayé et adopté. Vraiment top. :13:. Un grand merci !

Partager ce message


Lien à poster
Partager sur d’autres sites

Est-ce que l'un de vous aurait une scène (utilitaire) qui permet de lire un variable globale que son contenu est de type tableau et quelque soit le nombre de niveau dans la structure du tableau.

 

Je pourrais l'écrire moi-même, mais j'avoue que si c'est déjà fait autant que cela me serve ;)

 

Merci d'avance.

Partager ce message


Lien à poster
Partager sur d’autres sites

×