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

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 <\>.
Répondre
Greg.O
Messages : 148
Inscription : 07 oct. 2017, 18:04

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

Message 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 ?
Domoticz v2021.1 sur Raspberry Pi 3B+
Raspbian Buster
Capteurs T/Hum Xiaomi / ConBee II
Zwave
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

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

Message 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
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Greg.O
Messages : 148
Inscription : 07 oct. 2017, 18:04

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

Message 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.
Domoticz v2021.1 sur Raspberry Pi 3B+
Raspbian Buster
Capteurs T/Hum Xiaomi / ConBee II
Zwave
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

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

Message 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
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Greg.O
Messages : 148
Inscription : 07 oct. 2017, 18:04

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

Message 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 ?
Domoticz v2021.1 sur Raspberry Pi 3B+
Raspbian Buster
Capteurs T/Hum Xiaomi / ConBee II
Zwave
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

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

Message 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).
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Greg.O
Messages : 148
Inscription : 07 oct. 2017, 18:04

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

Message 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.
Dernière modification par Greg.O le 12 avr. 2020, 12:08, modifié 1 fois.
Domoticz v2021.1 sur Raspberry Pi 3B+
Raspbian Buster
Capteurs T/Hum Xiaomi / ConBee II
Zwave
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

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

Message 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
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

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

Message 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
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
Greg.O
Messages : 148
Inscription : 07 oct. 2017, 18:04

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

Message 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.
Domoticz v2021.1 sur Raspberry Pi 3B+
Raspbian Buster
Capteurs T/Hum Xiaomi / ConBee II
Zwave
Répondre