Page 1 sur 1

sortir d'un fonction Dz

Publié : 04 janv. 2023, 17:54
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

Re: sortir d'un fonction Dz

Publié : 04 janv. 2023, 18:45
par pierrotori
A part faire des règles de gestion complémentaire ou d'utiliser le return pour sortir, je ne vois pas

Re: sortir d'un fonction Dz

Publié : 04 janv. 2023, 18:52
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.

Re: sortir d'un fonction Dz

Publié : 04 janv. 2023, 20:21
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
}

Re: sortir d'un fonction Dz

Publié : 04 janv. 2023, 20:30
par Keros
On trouve généralement toujours une façon de faire différemment ;)

Re: sortir d'un fonction Dz

Publié : 09 janv. 2023, 22:15
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.

Re: sortir d'un fonction Dz

Publié : 09 janv. 2023, 22:42
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:

Re: sortir d'un fonction Dz

Publié : 10 janv. 2023, 08:51
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...

Re: sortir d'un fonction Dz

Publié : 10 janv. 2023, 10:23
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.

Re: sortir d'un fonction Dz

Publié : 10 janv. 2023, 10:35
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...