[Résolu] - Problème dans la mise à jour "temps réel" d'une variable à l'intérieur d'un script LUA

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 <\>.
vinchz31
Messages : 312
Inscription : 21 nov. 2016, 07:51

[Résolu] - Problème dans la mise à jour "temps réel" d'une variable à l'intérieur d'un script LUA

Message par vinchz31 »

Bonsoir à tous,

Je rencontre un problème que je n'arrive pas à m'expliquer et ça fait plusieurs heures que je fais des tests dans tous les sens :
A l'intérieur d'un script, je cherche à mettre à jour une variable Domoticz et à réutiliser cette variable une fois modifiée (besoin lié à l'utilisation de cette variable dans un script php externe).

Or lorsque je modifie la variable via la commande :
  • commandArray['Variable:Ma_Variable'] = tostring(1)


...je la vois bien prendre la valeur 1 une fois sortie du script, mais si je cherche à l'afficher à l'intérieur du script juste à la suite de la mise à jour précédente via la commande :
  • print(tonumber(uservariables['Ma_Variable'])


Elle n'est pas mise à jour...

Exemple, en mettant la variable à 0 dans Domoticz avant l'execution du script, j'obtiens dans la log Domoticz lors de l'execution du code suivant :

Code : Tout sélectionner

commandArray = {}

	commandArray['Variable:Ma_Variable'] = tostring(1)
	print(tonumber(uservariables['Ma_Variable'])

	commandArray['Variable:Ma_Variable'] = tostring(2)
	print(tonumber(uservariables['Ma_Variable'])

	commandArray['Variable:Ma_Variable'] = tostring(3)
	print(tonumber(uservariables['Ma_Variable'])

return commandArray 

Le résultat :
  • 0
    0
    0


Et lorsque je regarde après l'execution du script dans Domoticz, la variable a bien pris la dernière valeur et est affichée à 3
J'ai essayé de mettre un délai entre chaque mise à jour / affichage au cas où il faille un petit instant entre l'ordre et la mise à jour mais ça ne change rien :(

Quelqu'un a-t-il une explication ? (la variable n'est elle par exemple mise à jour qu'à l'execution du return commandarray à la fin du script et si oui, y-a-t-il une commande pour la mettre à jour avant la fin du script ?).

Merci d'avance pour votre aide !
Très bonne soirée !



Dernière modification par vinchz31 le 11 déc. 2016, 16:35, modifié 1 fois.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Problème dans la mise à jour "temps réel" d'une variable à l'intérieur d'un script LUA

Message par vil1driver »

Salut,

commandArray n'est q'un tableau

Domoticz n'en prend connaissance qu'à la fin du script
Avec le return commandArray

Aucune action ne sera faite avant.
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
vinchz31
Messages : 312
Inscription : 21 nov. 2016, 07:51

Re: Problème dans la mise à jour "temps réel" d'une variable à l'intérieur d'un script LUA

Message par vinchz31 »

Merci vil1driver !

Je m'en doutais un peu, donc pour contourner, j'ai fait un script php qui met à jour une variable Domoticz.
Il fonctionne très bien en ligne de commande.

Je l'appelle via un script Lua avec :
os.execute('/home/pi/domoticz/scripts/Php/PassageValeur.php ' .. tostring(Idx_Variable).. ' ' .. Nom_Variable .. ' ' .. tostring(valeur) .. ' &')

Et bien, j'ai le même résultat sans utiliser de commande Array alors que la variable est bien mise à jour via un appel JSON réalisé en PHP en dehors du script LUA (visible dans les variables Domoticz qui se met à jour).

Le script LUA n'arrve pas à récupérer la valeur avant le passage suivant.
Cela veut-il que la lecture de toutes les variables Domoticz se fait une fois au début du script et que l'appel à une variable à l'intérieur du script est donc également "statique" ?

Si oui, quelqu'un a-t-il une idée pour répondre à mon besoin (objectif : partager une variable avec un script externe).

Merci d'avance !
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Problème dans la mise à jour "temps réel" d'une variable à l'intérieur d'un script LUA

Message par patrice »

Bonjour
Ecris ta variable dans une variable Domoticz (celles du paramètrage menu "plus d'options/variables utilisateurs" et ensuite tu la lis avec un appel json dans le langage que tu souhaites
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
vinchz31
Messages : 312
Inscription : 21 nov. 2016, 07:51

Re: Problème dans la mise à jour "temps réel" d'une variable à l'intérieur d'un script LUA

Message par vinchz31 »

Merci Patrice,

Ca m'irait bien mais comment récupérer la valeur dans un script LUA.
J'arrive à récupérer sans souci la valeur en Php (et à l'écrire aussi), mais comment passer la valeur récupérée par mon script Php à Lua ?

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

Re: Problème dans la mise à jour "temps réel" d'une variable à l'intérieur d'un script LUA

Message par vil1driver »

Je me dis que tu pourrais détailler un peu ce que tu souhaites faire, peut-être que l'on saurait le faire autrement..

Je ne comprends pas pourquoi vouloir lire la variable que tu viens de modifier aussitôt dans le même script.
Tu es censé pouvoir la déduire..
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
vinchz31
Messages : 312
Inscription : 21 nov. 2016, 07:51

Re: Problème dans la mise à jour "temps réel" d'une variable à l'intérieur d'un script LUA

Message par vinchz31 »

EN fait je contrôle mon poêle à granulets via le script.

J'utilise des variables domoticz pour récupérer son état et lui transmettre des ordres.
Donc à l'intérieur du script LUA de contrôle du poêle, je lui passe un ordre en mettant une valeur dans une variable Domoticz pour lui dire si je veux lire ou écrie des données, puis j'appelle le script PHP qui le contrôle.

Ce script met à jour des variables domoticz en fonction de l'état du poême, variables que je souhaite pouvoir lire dans le script lua à la suite.
Or les valeurs sont bien modifiés par le script PHP mais non utilisables immédiatement dans le script LUA en retour de la commande Php...

Le problème c'est que j'ai besoin de pouvoir lire ces valeurs pour en déduire d'autres ordres à passer au poêle et que je ne peux pas attendre la prochaine execution du script LUA...

J'espère que c'est assez clair / compréhensible...
Très bonne journée !
rapinou
Messages : 119
Inscription : 17 nov. 2016, 01:44

Re: Problème dans la mise à jour "temps réel" d'une variable à l'intérieur d'un script LUA

Message par rapinou »

Bonjour,

Si j'ai bien compris ce que tu cherches à faire, il ne faut pas récupérer les variables Domoticz pour la suite du script mais plutôt utiliser des variables locales à l'intérieur de ton script.

Exemple :

Code : Tout sélectionner

local ma_variable = "123"
commandArray['Variable:MyVar'] = ma_variable
Comme ça tu n'as plus qu'à utiliser"ma_variable" pour la suite du script.
RPI 3 - Raspbian 8 (Jessie) - Domoticz V3.5877
vinchz31
Messages : 312
Inscription : 21 nov. 2016, 07:51

Re: Problème dans la mise à jour "temps réel" d'une variable à l'intérieur d'un script LUA

Message par vinchz31 »

Non malheureusement ce n'est pas mon besoin.

J'ai besoin d'une variable partagée avec mon script externe php qui gère le poêle.
Il faut donc que je puisse lui transmettre une valeur et que je puisse lire une valeur retournée par ce script externe (ce que je voulais faire au travers d'une variable LUA).

Le problème c'est que mon script externe modifie bien la variable LUA mais tant que le commandarray n'est pas passé dans mon script LUA (et donc que je ne suis pas sorti du script), je ne peux pas la récupérer.

J'ai également essayer de renvoyer la valeur par un code retour de mon script Php. Le code retour est bien renvoyé mais je n'arrive pas à le récupérer dans LUA (la commande os.execute ne renvoie que 0 si commande inexistante sur le système ou 1 si commande Ok et ne envoie pas le retour du script executé).
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Problème dans la mise à jour "temps réel" d'une variable à l'intérieur d'un script LUA

Message par vil1driver »

le mieux serait probablement de tout faire dans le même script
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
Répondre