Page 4 sur 5

Re: Nouveau Utilisateur help me :)

Publié : 28 févr. 2020, 09:51
par Vinz46
d'accord je vais tester alors ;)

merci bcp pour ton aide je reviens pour faire le retour du script :)

merci encore pour votre aide c'est top

Re: Nouveau Utilisateur help me :)

Publié : 28 févr. 2020, 21:57
par Vinz46

Code : Tout sélectionner

commandArray = {}
	cycle = os.date("*t")
	if cycle.min == 0 then -- toutes les heures
		-- récupérer la température
		T = otherdevices_temperature['Extracteur_capteur']
		commandArray[#commandArray + 1] = {['Extracteur'] = "On"}
		if T <= 29 then 
			commandArray[#commandArray + 1] = {['Extracteur'] = "Off AFTER 900"} -- on coupe appès 15 mn
		
		end
		if T > 29 then
			commandArray[#commandArray + 1] = {['Extracteur'] = "Off AFTER T <= 25"} -- on allume des que c'est en dessus 29°
			
		end
	end
return commandArray

la partie du script qui porte sur la condition supérieure au 29 ne démarre pas et j'ai aucune erreur dans les logs

j'ai une erreur dans la syntaxe ?
merci encore pour votre aide a tous :)

je voudrais juste rajouter une condition au script existant qui me convient bien, je voudrai que si le température passe au-dessus de 29 alors l'extracteur passe sur on est que dès qu'il est descendu à 25 il repasse sur le cycle normal...


@imet oui c'est à cause de ça effectivement , excuse je n'ai pas fait attention ;) du coup j'ai laissé le Extracteur_capteur ;)

Re: Nouveau Utilisateur help me :)

Publié : 28 févr. 2020, 22:33
par lmet
Salut,
A vue de nez l'erreur n'est pas loin "Off AFTER" attend une durée en minutes comme argument et rien d'autre.

Re: Nouveau Utilisateur help me :)

Publié : 28 févr. 2020, 22:55
par Vinz46
@imet d'accord , mais il y a pas une solution pour mettre un condition de température au lieu de temps ?
je pense que si mais j'ai pas la syntaxe :(

Re: Nouveau Utilisateur help me :)

Publié : 28 févr. 2020, 23:11
par lmet
Ce n'était pas dans le cahier des charges initial. Changer en cours de route fait que la solution retenue ne répond pas et ne pourra pas répondre car pas prévue au départ.
Ton nouveau besoin correspond plus à une régulation de consigne (comme un chauffage) cherches de ce coté là
Cela s'articulerait sur un script "Device" avec utilisation de if devicechanged[] ... then
Pour te rassurer Teste et valide la solution initiale. D'autres auront sûrement une autre solution. Tu peux aussi reformuler ton cahier des charges complet.

Re: Nouveau Utilisateur help me :)

Publié : 28 févr. 2020, 23:23
par Vinz46
"J'arrive a pas trouver la solution je précise encore que je suis débutant , j'arrive a faire activé via un planning l'extracteur toute les 15mn par heure , mais j'arrive pas a lui dire que si jamais il fait trop chaud je veux que il s'allume aussi ."

c'est exactement ça qu'il me faudrait, je vais essayer d’être plus clair mais c'est pas évident .

Voila je voudrais que mon extracteur s'allume une fois 15 mn toute les heures si la température est inférieure à 25 ° , mais je voudrais en même temps que si la température augmente et dépasse les 28° je voudrais que l'extracteur s'allume aussi et s’éteigne des que la température passe ou égale les 25°.

en gros la cave est humide , donc j'y ai mit un radiateur et un extracteur donc je voudrais pas que si il fait trop chaud ça ne sature pas au niveau de la chaleur et du coup remonte l’humidité en flèche .

je sais pas si c'est plus clair la ;)

Re: Nouveau Utilisateur help me :)

Publié : 01 mars 2020, 16:21
par denis_brasseur
Vinz46 a écrit : 28 févr. 2020, 23:23 Voila je voudrais que mon extracteur s'allume une fois 15 mn toute les heures si la température est inférieure à 25 °
Commence par créer une variable utilisateur MyExtracteurVar à On.
S'agissant d'un changement horaire, il convient de passer par un script type time.

Code : Tout sélectionner

commandArray = {}
cycle = os.date("*t")
if cycle.min == 0 then -- toutes les heures
	if otherdevices_temperature['Extracteur_capteur'] <= 25 then
		commandArray[#commandArray + 1] = {['Extracteur'] = 'On'}
		commandArray[#commandArray + 1] = {['Extracteur'] = 'Off AFTER 900'} -- on coupe appès 15 mn
		commandArray['Variable:MyExtracteurVar']= 'On'
		commandArray['Variable:MyExtracteurVar']= 'Off AFTER 900'
	end
end
return commandArray
Vinz46 a écrit : 28 févr. 2020, 23:23 mais je voudrais en même temps que si la température augmente et dépasse les 28° je voudrais que l'extracteur s'allume aussi et s’éteigne des que la température passe ou égale les 25°.
Dans ce cas, il convient de passer par un script type device, basé sur le changement d'état de la sonde de température.

Code : Tout sélectionner

commandArray = {}
if devicechanged['Extracteur_capteur'] >= 28 and otherdevices['Extracteur'] == 'Off' then
	commandArray[#commandArray + 1] = {['Extracteur'] = 'On'}
elseif devicechanged['Extracteur_capteur'] <= 25 and otherdevices['Extracteur'] == 'On' and uservariables["MyExtracteurVar"] == 'Off' then
	commandArray[#commandArray + 1] = {['Extracteur'] = 'Off'}
	
end
return commandArray

Re: Nouveau Utilisateur help me :)

Publié : 01 mars 2020, 16:59
par lmet
Salut,
Si tu désactives le planning de ton extracteur tu peux alors considérer :
Toutes les heures on récupère la valeur de T (On affiche l'heure et la valeur de T dans les logs).

° On affiche aussi dans les logs : L'état => "Arrêt de l'extracteur" ou "Lancement de l'extracteur pendant 15 minutes".
° Si T>25 ou T<28 on éteint l'extracteur.
° Si T<25 ou T>28 on allume l'extracteur pendant 15 minutes.

Il n'y a pas de boucle forçant T de 29° à 25° (je ne sais pas faire). Mais en faisant tourner le script (quitte à jouer sur la valeur "duree_extract" fixée à 15 mn.) on devrait au bout de quelques cycles s'approcher de la valeur souhaitée (T>25 et T<28).
Le script de type " time" au cas où :

Code : Tout sélectionner

local duree_extract = 900  -- Durée extraction en minutes
-- local ecart         = 20   -- Ecart entre deux tests en minutes
commandArray = {}
	cycle = os.date("*t")
	if cycle.min == 0 then 
		-- récupérer la température
		T = otherdevices_temperature['Extracteur_capteur']
		print ("Température de la cave à : " .. cycle.hour .. ":" .. cycle.min .. " => " .. tostring(T) .. "°")  
		if T > 25 or T < 28 then 
			commandArray[#commandArray + 1] = {['Extracteur'] = "Off"}
			print ("Arrêt de l'extracteur")
		elseif T < 25 or T > 28 then
			commandArray[#commandArray + 1] = {['Extracteur'] = "On"}
			commandArray[#commandArray + 1] = {['Extracteur'] = "Off" AFTER " .. duree_extract}
			print ("Lancement de l'extracteur pendant 15 minutes")
		end
	end
return commandArray
S'agissant de problème d'humidité, j'imagine que ta sonde ne renvoie pas l'hygrométrie ? ( Ce qui simplifierai grandement la tâche).

Re: Nouveau Utilisateur help me :)

Publié : 01 mars 2020, 17:35
par denis_brasseur
lmet a écrit : 01 mars 2020, 16:59
° Si T>25 ou T<28 on éteint l'extracteur.
Cette condition sera systématique, si la température est de 3°, 3 < 28, ou qu'il fasse 50°, 50 > 25, alors extinction de l'extracteur, et l'autre condition elseif T < 25 or T > 28 then ne sera jamais exécuté .....

Re: Nouveau Utilisateur help me :)

Publié : 01 mars 2020, 18:57
par lmet
Merci denis pour ton intérêt pour le souci de notre ami :)
Effectivement il vaut mieux lire :
° Si T>25 et T<28 on éteint l'extracteur.
et non "ou".
Ta solution est certainement la meilleure même si je ne vois pas trop à quoi sert la uservariable.
Je pense que Vinz46 gagnera du temps en essayant la tienne :)