Mise à jour UserVariable par son IDX au lieu de son nom

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
FloFlo
Messages : 2
Inscription : 11 juil. 2020, 15:15

Mise à jour UserVariable par son IDX au lieu de son nom

Message par FloFlo »

Salut tout le monde,

Je voudrais pouvoir mettre à jour une "variable utilisateur" en lua en utilisant l' IDX de la variable utilisateur et pas son nom car si je change son nom, faudra que je modifie tous mes programmes. Comment je peux faire?

Merci pour votre aide
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Mise à jour UserVariable par son IDX au lieu de son nom

Message par vil1driver »

Salut,

Ne change pas son nom
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: Mise à jour UserVariable par son IDX au lieu de son nom

Message par boum »

C'est faisable en dzVents, mais pas en Lua classique.
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Mise à jour UserVariable par son IDX au lieu de son nom

Message par denis_brasseur »

vil1driver a écrit : 11 juil. 2020, 16:44 Salut,

Ne change pas son nom
Effectivement, cela me semble la meilleur solution, ne pas changer le nom de la variable, même si il doit être possible de manière détournée d'utiliser l'idx pour en retrouver le nom, dans l'exemple de la fonction GetDeviceNameByIdx.

J'utilise 38 variables utilisateur, j'en crée autant que de besoin, et si le nom de la variable est bien explicite, nul besoin de la renommer.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Mise à jour UserVariable par son IDX au lieu de son nom

Message par vil1driver »

En cherchant 3min..

Papoo nous a avait proposé ceci

https://easydomoticz.com/forum/viewtopi ... 950#p39950
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Mise à jour UserVariable par son IDX au lieu de son nom

Message par denis_brasseur »

En t'inspirant de la proposition de papoo, tu peux faire une fonction ;

Code : Tout sélectionner

function GetVariableNameByIdx(variableIDX)
	local config=assert(io.popen(curl..'-u '..domoticzUSER..':'..domoticzPSWD..' "'..domoticzURL..'/json.htm?type=command&param=getuservariables"'))
	local blocjson = config:read('*all')
	config:close()
	jsonValeur = json:decode(blocjson)
	for index, variable in pairs(jsonValeur.result) do
		if variable.idx == variableIDX then
			--print(variable.idx, variable.Name, variable.Value, variable.LastUpdate)
			return variable.Name
		end
	end
	return 0
end
Tu l'utilises ensuite de la manière suivante afin d'obtenir le nom de la variable en partant de l'idx :

Code : Tout sélectionner

GetVariableNameByIdx('idx')
ou idx est l'idx de ta variable, entre quote,
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Mise à jour UserVariable par son IDX au lieu de son nom

Message par denis_brasseur »

denis_brasseur a écrit : 12 juil. 2020, 08:06 En t'inspirant de la proposition de papoo, tu peux faire une fonction :

Code : Tout sélectionner

function GetVariableNameByIdx(variableIDX)
	local config=assert(io.popen(curl..'-u '..domoticzUSER..':'..domoticzPSWD..' "'..domoticzURL..'/json.htm?type=command&param=getuservariables"'))
	local blocjson = config:read('*all')
	config:close()
	jsonValeur = json:decode(blocjson)
	for index, variable in pairs(jsonValeur.result) do
		if variable.idx == variableIDX then
			--print(variable.idx, variable.Name, variable.Value, variable.LastUpdate)
			return variable.Name
		end
	end
	return 0
end
Il te faut personnaliser curl, domoticzUSER, domoticzPSWD et domoticzURL ou écrire la ligne en "dur".

Tu l'utilises ensuite de la manière suivante afin d'obtenir le nom de la variable en partant de l'idx :

Code : Tout sélectionner

GetVariableNameByIdx('idx')
ou idx est l'idx de ta variable, entre quote,
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
FloFlo
Messages : 2
Inscription : 11 juil. 2020, 15:15

Re: Mise à jour UserVariable par son IDX au lieu de son nom

Message par FloFlo »

Merci à tous, vous êtes super. C'est exactement ce que j'ai besoin. Encore merci.
Répondre