sortir d'un fonction Dz

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
skarab22
Messages : 101
Inscription : 14 nov. 2019, 09:18

sortir d'un fonction Dz

Message par skarab22 »

Bonjour,

Je suis entrain de faire un script pour éviter que mon poêle se mette en route si jamais on laisse une porte ou une fenêtre ouverte alors que le poêle est éteint.

Pour cela, j'ai fait un script en DzVents et j'aimerai savoir s'il est possible d'aller directement à la fin de function dans un if par exemple ?

Merci d'avance
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

Re: sortir d'un fonction Dz

Message par pierrotori »

A part faire des règles de gestion complémentaire ou d'utiliser le return pour sortir, je ne vois pas
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: sortir d'un fonction Dz

Message par Keros »

La fonction goto répondrait à ton besoin ?

Code : Tout sélectionner

if condition == true then 
	goto exit
	return
end

::exit::
Partage-nous ton script, on verra peut-être une façon différente pour répondre à ton besoin.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
skarab22
Messages : 101
Inscription : 14 nov. 2019, 09:18

Re: sortir d'un fonction Dz

Message par skarab22 »

merci pour vos retour.

Pour l'instant, j'ai trouvé à faire sans et ça semble marcher mais il faut encore que je fasse des vérifications.

Si vous voyez des choses à améliorer lâchez vous, c'est du vite fait mais loin d'être bien fait...

Code : Tout sélectionner

return {
	on = {
		devices = {'Cbox - Room Temperature'},
	},
	data = {
	    prevTemp = { initial = 0},
	    storedSetTemp = { initial = 0},
	    storedTemp = { initial = 0},
	    openWindow = {initial = 'false'}
	    },
	logging = {
        level = domoticz.LOG_DEBUG
    },

	execute = function(domoticz, triggeredItem)
	    Temp = triggeredItem.temperature
	    pTemp = domoticz.data.prevTemp
	    delta = pTemp - Temp
	    
	    domoticz.log('Température du salon : '.. Temp)
	    domoticz.log('La précédente valeur était : '.. pTemp)
	    domoticz.log('Delta de température : '.. delta)
	    
	    domoticz.log('Setpoint stored température : '.. domoticz.data.storedSetTemp)
	    domoticz.log('Stored température : '.. domoticz.data.storedTemp)
	    
	    if (domoticz.data.openWindow == 'false') then 
	        if (domoticz.data.prevTemp ~= 0 and delta > 0.5 and storedSetTemp ~= 0 ) then
	            domoticz.log ('la température a chutée brutalement')
	            if (domoticz.devices('Cbox - Setpoint').setPoint ~= 7) then
	                domoticz.data.storedSetTemp = domoticz.devices('Cbox - Setpoint').setPoint --on stock l'ancienne valeur jusqu'à ce que la température remonte uniquement si elle n'a pas déjà été stocké
                end
            
    	        domoticz.data.storedTemp = Temp --on stock la température de la pièce avant de baisser
    	        domoticz.devices('Cbox - Setpoint').updateSetPoint(7)
    	        domoticz.log ('la température a chutée brutalement, Set point reglé à '.. domoticz.data.storedSetTemp..'°C')
	        end
        else
    	   if (domoticz.data.storedTemp ~=0 and (domoticz.data.storedTemp - Temp) < 1) then
    	       domoticz.log('la température a remonté')
    	       domoticz.devices('Cbox - Setpoint').updateSetPoint(domoticz.data.storedSetTemp)
    	       domoticz.data.initialize('storedSetTemp')
    	       domoticz.data.initialize('storedTemp')
           end
       end
       
	   domoticz.data.prevTemp = triggeredItem.temperature
	end
}
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: sortir d'un fonction Dz

Message par Keros »

On trouve généralement toujours une façon de faire différemment ;)
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
skarab22
Messages : 101
Inscription : 14 nov. 2019, 09:18

Re: sortir d'un fonction Dz

Message par skarab22 »

Keros a écrit : 04 janv. 2023, 18:52 La fonction goto répondrait à ton besoin ?

Code : Tout sélectionner

if condition == true then 
	goto exit
	return
end

::exit::
Partage-nous ton script, on verra peut-être une façon différente pour répondre à ton besoin.
Sauf erreur de ma part, la fonction goto ne marche pas et il ne semble pas non plus possible de faire un return dans un if.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: sortir d'un fonction Dz

Message par Keros »

Ah, je l'ai dans un script. Il me semblait que cela fonctionnait. Ou alors cette portion de script n'est jamais exécutée :roll:
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
skarab22
Messages : 101
Inscription : 14 nov. 2019, 09:18

Re: sortir d'un fonction Dz

Message par skarab22 »

Je viens de faire le test :

Code : Tout sélectionner

return {
	on = {
		timer = {'every 30 seconds'}
	},
	execute = function(domoticz, triggeredItem)
	    print('script 1 en route')
	    if (1) then 
	        return
        end
        print('le break ne marche pas')

    end
}
Le script ne s'exécute pas du tout. Même le premier print n'est pas vu...
Dernière modification par Keros le 10 janv. 2023, 12:40, modifié 1 fois.
Raison : Citation supprimée. Mercide den pas citer le message précédent lors d'une réponse directe
boum
Messages : 233
Inscription : 18 janv. 2019, 11:34
Localisation : France

Re: sortir d'un fonction Dz

Message par boum »

  • return marche très bien dans un bloc conditionnel (if/then/end). C'est break qui n'existe pas en Lua.
  • le script ne s'exécute pas car le déclencheur n'est pas valide, les timers ne descendent pas sous la minute.
Domoticz v2022.2 sur linux-mint / Z-Wave-JS / RFXCom / Zigbee2MQTT
skarab22
Messages : 101
Inscription : 14 nov. 2019, 09:18

Re: sortir d'un fonction Dz

Message par skarab22 »

effectivement... :? Je suis mauvais Jack

J'avais fait le test en mettant le return sans le mettre dans un if et ça ne marchais pas, comme j'en avais marre d'attendre, j'ai changé le timer en même temps en pensant que ça marcherai...

Autre question : s'auriez vous pourquoi la fonction getAtTime(TimeAgo) ne me renvoit que l'index et pas la valeur ? Alors que dans le wiki c'est censé renvoyé les deux...
getAtTime(timeAgo): Returns the data point closest to the moment as specified by timeAgo and the index in the set. So, myVar.getAtTime('1:00:00') returns the item that is closest to one hour old. It may be a bit younger or a bit older than 1 hour. The second return value is the index in the set: local item, index = myVar.getAtTime('1:00:00')
edit : j'avais oublié le point .data après item pour affiche sa valeur...
Dernière modification par Keros le 10 janv. 2023, 12:41, modifié 1 fois.
Raison : Citation supprimée. Mercide den pas citer le message précédent lors d'une réponse directe
Répondre