Page 1 sur 1

DzVents, variables globales et conditions de déclenchements d'un script

Publié : 06 avr. 2020, 18:16
par Greg.O
Salut,

pas trop au point en DzVents, je tente de faire un script qui se déclenche par le changement d'état d'une variable globale persistante.

Voici la variable telle que je l'ai définie dans mon fichier global_data_lua :

Code : Tout sélectionner

data = {
          Besoin_Ventilation_SDB_1 = { initial = false }
Et voici un premier jet d'un script qui doit se déclencher par modification de la variable Besoin_Ventilation_SDB_1 :

Code : Tout sélectionner

return {
	active = true,
	logging = {
		level = domoticz.LOG_INFO,
		marker = "Script de sélection automatique de la vitesse de VMC :"
		},	 
        
	on = {
          variables = { 'Besoin_Ventilation_SDB_1' }
        },
		
	data = {
		   Cible_Humidite_SDB1,
	},
        
	execute = function(domoticz, variable)
        	if (variable.value == true) then
             		domoticz.log("J'ai bien détecté dans un autre script le besoin de modifier la vitesse de la VMC")
                else
            		domoticz.log('Bien détecté dans un autre script le besoin de repasser en vitesse 1')
          	end
        end
    }
Mais vous l'aurez compris, ça ne fonctionne pas. Je sais que la variable change de valeur car je la teste dans un autre script, mais elle ne déclenche pas d'action dans le script que je vous présente.

Est ce que les masters du DzVent peuvent m'aider svp ?

Re: DzVents, variables globales et conditions de déclenchements d'un script

Publié : 06 avr. 2020, 19:40
par Neutrino
Tu confonds ( à juste titre) variables utilisateur et variable globale.
Le script se déclenche à la modification d'une variable utilisateur. (Configuration>Plus D'options>Variables Utilisateurs).
https://www.domoticz.com/wiki/DzVents:_ ... le_changes

Re: DzVents, variables globales et conditions de déclenchements d'un script

Publié : 06 avr. 2020, 21:22
par Greg.O
Ok, je vais changer la déclaration de mes variables.

Mais alors, dans la philosophie de DzVents, à quoi servent les variables globales ? En effet, on peut les remplacer par des variables utilisateurs qui ont ce petit avantage en plus qui est de pouvoir déclencher des scripts.

Re: DzVents, variables globales et conditions de déclenchements d'un script

Publié : 06 avr. 2020, 21:36
par Neutrino
Pour un simple booléen, pas vraiment de différence.
Mais tu peux stocker des tableaux, calculer des moyennes, sortir des historiques....
https://www.domoticz.com/wiki/DzVents:_ ... _variables

Re: DzVents, variables globales et conditions de déclenchements d'un script

Publié : 11 avr. 2020, 17:19
par Greg.O
J'ai passé l'étape du déclenchement du script en créant des variables 'user'. J'en ai donc trois :
Besoin_Ventilation_SDB_1
Besoin_Ventilation_SDB_2
Besoin_Ventilation_SDB_3

Je tourne et retourne le wiki, les recherches sur google, mais je bloque sur la façon de faire un test avec ces variables dans mon code : j'aimerais que lorsque une de ces variables passe à 'true', mon script passe la VMC en vitesse 2. Pour ça j'ai fait ce script :

Code : Tout sélectionner

on = {
          variables = { Besoin_Ventilation_SDB_*'}
         },
		        
execute = function(dz, var)
        if (dz.variables.var.value == 'true') then
             dz.log("J'ai bien détecté dans un autre script le besoin de modifier la vitesse de la VMC")
        else
             dz.log('Bien détecté dans un autre script le besoin de repasser en vitesse 1')
        end
    end
j'ai aussi essayé comme ça :

Code : Tout sélectionner

on = {
          variables = { Besoin_Ventilation_SDB_*'}
         },
		        
execute = function(dz, var)
        if (var.value == 'true') then
             dz.log("J'ai bien détecté dans un autre script le besoin de modifier la vitesse de la VMC")
        else
             dz.log('Bien détecté dans un autre script le besoin de repasser en vitesse 1')
        end
    end
j'ai essayé avec des .sValue, des .RawData mais rien n'y fait : je n'arrive pas à faire un test qui fonctionne sur la valeur de la variable qui a changée.

Une idée ?

Re: DzVents, variables globales et conditions de déclenchements d'un script

Publié : 11 avr. 2020, 19:28
par Neutrino
Script will only execute when this variable is updated directly by dzVents or by a JSON. If updated with a standard Lua script (using commandArray) or in combination with a time option like afterAAA no event will be triggered.
Comment est modifiée ta variable ?
Ton script se lance ou pas ?
Pour moi, la v2 devrait fonctionner si tes variables sont actualisé par un autre dzvents ou par l'interface web (qui envoie un json).

Re: DzVents, variables globales et conditions de déclenchements d'un script

Publié : 12 avr. 2020, 01:00
par Greg.O
Merci pour l'aide,

j'ai bien trouvé dans le wiki ce passage. Oui, c'est un autre script écrit en DzVents qui change la variable utilisateur. Oui, le script se déclenche bien.
Par contre, il ne rentre jamais dans la condition if == 'true'. Pourtant, la variable est bien à 'true'.

Je pense donc que c'est la condition qui est mal écrite, mais je n'arrive pas à trouver, ni sur le wiki, ni sur le forum, la bonne façon d'écrire un test sur une variable utilisateur.

Re: DzVents, variables globales et conditions de déclenchements d'un script

Publié : 12 avr. 2020, 06:18
par denis_brasseur
J'utilise le test de l'état d'une variable comme ceci dans 2 scripts, je ne l'utilise pas en changement d'état de cette variable :

Code : Tout sélectionner

execute = function(dz)
	local var_my_var = dz.variables('__var_my_var').value
	if var_my_var == 'true' then

Re: DzVents, variables globales et conditions de déclenchements d'un script

Publié : 12 avr. 2020, 11:18
par boum
Ça devrait fonctionner. Il faut vérifier (par les logs) que la valeur de la variable est bien celle attendue.

Code : Tout sélectionner

on = {
          variables = { Besoin_Ventilation_SDB_*'}
         },
		        
execute = function(dz, var)
	print("Script pour " .. var.trigger .. " : " .. var.name .. " = '" .. var.value .. "' (" .. type(var.value) .. ") -> "  .. tostring(var.value == 'true') )
        if var.value == 'true' then
             dz.log("J'ai bien détecté dans un autre script le besoin de modifier la vitesse de la VMC")
        else
             dz.log('Bien détecté dans un autre script le besoin de repasser en vitesse 1')
        end
    end
Parmi les problèmes courant, il pourrait y avoir un problème de nom de variable, de case 'True', de type, d'espace supplémentaire 'true ' (d'où les ' à l'intérieur des " pour voir ça dans le print)…

bon courage

Re: DzVents, variables globales et conditions de déclenchements d'un script

Publié : 12 avr. 2020, 12:21
par Greg.O
Merci pour l'aide,

la version suivante fonctionne :

Code : Tout sélectionner

if var.value == 'true' then

Il y a des fois où la programmation lorsqu'on est un amateur, vous rend fous !! Je suis persuadé d'avoir testé cette syntaxe et qu'elle me renvoyait un message d'erreur.