Aller au contenu
ebtjjn

Domotisation De La Piscine

Recommended Posts

Salut tout le monde,
Après avoir largement profité des conseils du site (et d'autres), voici venu le temps de faire un retour d'expérience et peut être aider quelques uns d'entre vous qui liront le sujet : voici donc où j'en suis ce jour : quand je parle de domotisation, il s'agit de régler le temps de filtration sur la température de l'eau.
Dans l'idéal au niveau du "hardware" et de l'installation, j'aimerai mettre la sonde directement dans le circuit au niveau du local piscine; on voit rien niveau esthétique et ça fait "propre" : voir réponse de "pinou" dans le post :

http://www.domotique-fibaro.fr/index.php/topic/4432-virtual-device-gestionnaire-filtration-piscine/page-2?hl=%20gestionnaire%20%20piscine

Faute de temps et par le fait que je risque prochainement de changer le local piscine, j'ai choisi la solution "classique" : sonde de température dans le bassin avec le fil plus ou moins caché...

Pour cela,j'ai acheté :
- une sonde waterproof de 5m (j'en avias acheté de 1m mais pas assez longue pour arriver directement dans le local!!)
http://www.planete-domotique.com/sonde-de-temperature-1-wire-etanche-5-metres-sans-connecteur.html
- un sensor universel fibaro  FGBS-001 
http://www.domadoo.fr/fr/peripheriques/916-fibaro-detecteur-universel-z-wave-fgbs-001-5902020528074.html

- un module double switch FGS-222 :(un pour la pompe, l'autre switch pour la lumière)

http://www.domadoo.fr/fr/obsoletes/937-fibaro-micromodule-commutateur-double-z-wave-fgs-221-5902020528043.html
- un transformateur pour l'alimenter le sensor universel
https://www.amazon.fr/dp/B00H2D6X8G/ref=pe_386181_148007091_TE_dp_1
 

Pour les branchements, rien de compliqué au final, j'ai fait comme indiqué dans de nombreux forums et sur le site...

Puis ensuite, côté HC2 et scénario/virtual device, le VD de chris6783 ne me convenait pas : je n'ai pas bien compris!!! et surtout le coup des cycles et de la filtration pas forcément continue ne me plaisait pas...

http://www.domotique-fibaro.fr/index.php/topic/4432-virtual-device-gestionnaire-filtration-piscine/?hl=%2Bgestionnaire+%2Bpiscine
Voici mon code qui permet de gérer le mode hiver : en hiver (changement de la variable "saison" à  hiver le jour où je passe la piscine en hivernage), si la température n'est pas inférieure à  2°C, je filtre de 4h à  6h du matin; si la température descend en dessous de 2°C, je filtre en continu.
L'été (changement de la variable "saison" à  été le jour où je "redémarre" la piscine) : à  10h30, démarrage de la filtration; à  11h30 prise de température (une fois que l'eau a été filtrée et qu'elle à  tourné un peu) puis délai de filtration selon la température.
J'ai des notifications à  chaque démarrage ou fin de filtration.
 
J'ai poussé un peu avec un VD qui me permet de stopper la filtration, d'activer un choc long de 11h, un choc court de 2h et d'allumer ou éteindre la lumière. Le VD m'indique aussi dans quel mode de filtration je suis (en lien avec la scène). Je n'ai pas réussi à  faire remonter la temp instantanée sur le VD mais je vais encore chercher (et de tout façon je la vois sur le module correspondant sur l'appli).
 
Voici donc mon code de la scène et en PJ, le VD.
Je suis bien sà»r preneur de toutes les remarques concernant la correction ou amélioration du code car je n'y connais rien en programmation. ..!!!

 

ebtjjn

--[[
%% autostart
%% properties
%% events
%% globals
--]]

local sourceTrigger = fibaro:getSourceTrigger();
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();

function tempFunc()	--fonction de filtration en ETE
	local currentDate = os.date("*t");
	local startSource = fibaro:getSourceTrigger();

	if (
 	( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "10:30") )
		)
	then
    	fibaro:debug("Je filtre");
		fibaro:call(69, "turnOn");
    	fibaro:setGlobal("modefiltration", 1)
    	fibaro:call(13, "sendDefinedPushNotification", "51");
 		fibaro:sleep(3600*1000)
		-- 	au bout d'une heure, prise de température pour gestion auto du nbe d'heures à  filtrer selon temp de l'eau
		local temppiscine = fibaro:getValue(91, "value")
		-- test de la température : si > 27, filtration sur 22h30 de plus (=23h30 au total) sinon, règle BAROUDI		
    		if tonumber(temppiscine) > 27 then
      			fibaro:debug("T° eau piscine > 27 ==> filtration continue")
	      		fibaro:call(13, "sendDefinedPushNotification", "80");
		   		local nbheuresafiltrer = 22,5 * 3600 * 1000
      		else
		    	fibaro:debug("T° eau piscine = " ..temppiscine .. " °C")	
    			local temppiscinearrondi = math.floor(tonumber(temppiscine)+ .5)
				local nbheuresafiltrerenh = ((tonumber(temppiscinearrondi)/2)-2)
				fibaro:debug("nb heures a filtrer = " .. nbheuresafiltrerenh)
				local nbheuresafiltrer = nbheuresafiltrerenh *3600 * 1000
				-- on définit la variable dureefiltration = nb d'heures à   filtrer 
				fibaro:setGlobal("dureefiltration", nbheuresafiltrer)
			end	
		fibaro:debug("Valeur de la variable _dureefiltration_ : "..fibaro:getGlobalValue("dureefiltration"));
		fibaro:sleep(tonumber(fibaro:getGlobalValue("dureefiltration"))-(3600*1000));    
    		if fibaro:getGlobalValue("modefiltration") == "12" then
      			fibaro:debug("Fin du mode auto mais CHOC déjà  en cours")
      		else
        		fibaro:debug("Fin du timer, j\'arrête de filtrer");
				fibaro:call(69, "turnOff"); 
    			fibaro:setGlobal("modefiltration", 0)
    			fibaro:call(13, "sendDefinedPushNotification", "52");
      		end

    end

  setTimeout(tempFunc, 60*1000)
  
end

if fibaro:getGlobalValue("Saison") == "Eté" then --je filtre en mode ETE
	fibaro:debug("c\'est l\'été, cool !! :-)")
	tempFunc()
		
else	
	local temppiscine = fibaro:getValue(91, "value")
	-- test de la température : si < 2, filtration sur 24h, sinon 2h de 4h à  6h du mat		
    	if tonumber(temppiscine) < 2 then
      		fibaro:debug("T° eau piscine < 2 ==> filtration continue")
	      	fibaro:call(13, "sendDefinedPushNotification", "79");
		   	local nbheuresafiltrer = 23,5 * 3600 * 1000
			fibaro:call(71, "turnOn"); 
		    fibaro:debug("Je filtre en continu");			
      		fibaro:setGlobal("modefiltration", 1)
			fibaro:sleep(5*1000)
    		fibaro:call(71, "turnOff");
    		fibaro:debug("Fin du timer, j\'arrête de filtrer");
    		fibaro:call(13, "sendDefinedPushNotification", "52");
    		fibaro:setGlobal("modefiltration", 0)
		end
	
    
  		if ( --à  4h du matin, j'active la filtration
 		( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "04:00") )
			) then
		-- s'il y a un CHOC en cours --> priorité au CHOC : je ne fais rien. Sinon, je filtre 2h.
			fibaro:debug("je filtre en mode HIVER")			
    			if fibaro:getGlobalValue("modefiltration") == "12" then
					fibaro:debug("CHOC déjà  en cours : la durée de filtration est celle définie par le CHOC") 
      			else
        			fibaro:call(69, "turnOn"); 
		    		fibaro:debug("Je filtre");			
      				fibaro:setGlobal("modefiltration", 1)
      				fibaro:call(13, "sendDefinedPushNotification", "51");
					fibaro:sleep(2*3600*1000)
					fibaro:debug("Fin du timer, j\'arrête de filtrer");
					fibaro:call(69, "turnOff");
    				fibaro:setGlobal("modefiltration", 1) --je ne teste pas s'il ya un CHOC en cours : il faudrait l'avoir déclenché entre 4h et 6H du matin...
    				fibaro:call(13, "sendDefinedPushNotification", "52");
      			end
		end

end

Le VD ici :

 

PISCINE.vfib

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour le partage. On peut avoir une photo du local technique ?

 

(Moi je viens de signer la commande de ma piscine, cool !!! Bon, reste à  bosser :))...

Partager ce message


Lien à poster
Partager sur d’autres sites

Ouh la... le local technique... c'en n'est pas vraiment un en fait...!!!  :rolleyes:

L'ancien proprio avait fait un "trou" adossé au mur du voisin, bati avec quelques briques et une planche dessus pour "fermer"... Ca n'a rien d'un vrai local technique du coup... 

Mais je peux la photo que j’intitulerai : "ceci n'est pas un local technique"!!  ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut. je souhaite domotiser la pompe de ma piscine cette hiver. C'est surtout pour éviter le gel.

J'ai vu que tu utilises un FGS-222 + FGBS-001 + sonde

Je part sur le même principe mais je souhaite acheter le FGS-223 qui est plus récent.

Ma question est de savoir si je peux utiliser le FGS-223 en sachant qu'il n'y a pas de contact sec avec cette version?

Merci de vos réponse.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon je me répond à moi même. Oui on peut utilisé le FGS-223 pour gérer la pompe de la piscine et la lampe.

J'ai effectué l!installation du module cette après-midi et tout fonctionne parfaitement.

Par contre je ne sais pas quel VD utiliser car il y en a quelques un sur le forum et ils sont un peu "difficile " à comprendre et paramètre pour un novice en LUA comme moi.

C'est pourquoi, je commence avec une scène pour gérer la pompe. Mais, car il y a un mais.. La scène que j'ai mis en place ne ce lance pas! je vous ai mis deux captures d'écran (la scène et le message d'erreur), pouvez-vous me dire ce qui ne va pas. Merci de vos conseilles.

Pisc_Scene_Bloc_01.png

Pisc_Scene_Bloc_02.png

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon. J'ai viré ma scène bloc et repris celle de @ebtjjn. Elle a l'air simple, c'est qu'il me faut.

Par contre @ebtjjnas-tu apporté des modifications sur ton VD?

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut. J'utilise depuis hier ce VD pour la gestion de ma piscine.

J'ai créé le VD ensuite créé une scène avec les éléments fournis en prenant soin de porter tous les changements pour son fonctionnement (ID pompe, ID température, ID lumière).

Et ben, je n'arrive pas à la faire fonctionner. La pompe ne démarre pas le matin comme prévu pendant 02h00 et je n'ai aucun retour d'info sur le VD.

Il n'y a pas non plus le relevé de température à 11h30 pour ensuite adapter le temps de filtrage.

Quelqu'un utilise ce VD? Sinon, qu'ai-je oublié pour le faire fonctionner?

Merci de vos réponses.

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut fredokl

Le VD fonctionne mais je l'ai modifié depuis... 

Je te donne tout ça dès que j'ai un peu de temps. Ce WE possiblement.... 

A noter j'ai un abonnement tempo EDF.

 

Ebtjjn

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut fredokl,

voici.

Bon je dois dire qu'il n'est pas (encore) parfait. :-(

Il faut créer une variable globale "modefiltration"; ça permet de faire le distingo et d'afficher l'info sur le VD.

Mais l'essentiel fonctionne : la filtration, la temp de l'eau et la temp de référence.

Après, les icones ne sont pas bons et la temp max de la veille ne fonctionnait plus mais j'ai retrouvé le code de Steven que je viens de rajouter en bas et qui avait marché nickel avant que je l'enlève pur une mauvaise raison...

 

DIs moi tout...

ebtjjn

PISCINE.vfib

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut ebtjjn, merci pour le VD. Je test et te tiens au courant.

Partager ce message


Lien à poster
Partager sur d’autres sites

@ebtjjnJ'ai installé le VD. Tu confirmes qu'il faut toujours la scène en plus. Par contre j'ai une ou deux questions. désolé mais je débute en lua et je maîtrise pas vraiment.

Par exemple sur le bouton Filtration+2, le code est le suivant:

 

fibaro:setGlobal('modefiltration', 5);
fibaro:call(69,'turnOn' ) ;
--fibaro:call(fibaro:getSelfId(), "setProperty","ui.Running.value", CHOOOC);
--fibaro:setGlobal('tempref', 999);
fibaro:sleep(2 * 3600 * 1000);

-- vérification que la filtration auto n'est pas en marche
if (fibaro:countScenes(25) > 1) then
  fibaro:setGlobal('modefiltration', 1);
  fibaro:debug('Choc terminé mais filtration non arrêtée car la filtration automatique est déjà en marche');
else
  fibaro:setGlobal('modefiltration', 0);
  fibaro:call(71, 'turnOff' )
  --fibaro:setGlobal('tempref', 99);
  fibaro:debug('Choc terminé et pas de filtration auto --> arrêt de la filtration');
end

Le 69 correspond a ta pompe, le 25 correspond à la scène et 71 à ta lampe, alors ma question est pourquoi la lampe?

Modifié par fredokl

Partager ce message


Lien à poster
Partager sur d’autres sites

Pardon, coquille suite à des tests post-été... C'est bien 69 à la place de 71...

Et oui pour le reste!! :-)

Partager ce message


Lien à poster
Partager sur d’autres sites

Cool. Merci de ta réponse. C'est bien ce que j'ai mis, cela me semblait plus logique. Merci pour la confirmation. Si tu penses le faire évoluer, je suis preneur car ton VD correspond bien à mon usage.

Partager ce message


Lien à poster
Partager sur d’autres sites

Va falloir que je relise tous les tutos et topic piscine, je commence à creuser fin du mois moi :):)

Partager ce message


Lien à poster
Partager sur d’autres sites

Il y a de quoi lire! Le choix pour le VD parfait est assez compliqué! Chacun a sa vision des choses et pour nous (en tout cas moi) profane du LUA, le choix est cornélien!

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut. Je me suis lancer dans une scène en lua pour m'entraîner. Je test sur ma pompe de piscine.

Je veux en fonction de la température que la pompe démarre pendant 2 heures et ensuite s'arrête.

Cela ne semble pas fonctionner.

Voici le script:

--[[
%% autostart
%% properties
587 value
%% events
%% globals
Saison
--]]

local tempext = fibaro:getValue(587, 'value') -- 'tempext' représente la fonction qui récupère (get) la valeur (Value) de l'intensité (value) du capteur de température 587
local timeloc = os.date("*t") --stocke la date et heure actuelle du système sous forme d'un tableau à l'intérieur de la variable "timeloc" 

if (fibaro:getGlobalValue(Saison) == "Hiver") then -- si récupère la valeur de la variable Saison
if(timeloc['hour'] >= 14 and timeloc['hour'] < 18) then
if tonumber(tempext) >= 8 then -- si la valeur récupérée (ramenée en valeur numérique grâce à  tonumber) est supérieure ou égale à  8, alors
if tonumber(tempext) <= 12 then -- si la valeur récupérée (ramenée en valeur numérique grâce à  tonumber) est inférieur ou égale à  12, alors
fibaro:call(570, 'turnOn') -- la pompe 570 s’allume.
fibaro:call(590, "sendDefinedPushNotification", "566") -- Envoi Push "Démarrage Pompe" sur mon téléphone portable
if fibaro:sleep(72000) then -- s'éteint au bout de 2 heures.
else fibaro:call(570, 'turnOff') -- sinon la pompe 570 s’éteint.
fibaro:call(590, "sendDefinedPushNotification", "567") -- Envoi Push "Arrêt Pompe" sur mon téléphone portable
end -- fin de la condition
end -- fin de la condition
end -- fin de la condition
end -- fin de la condition
end -- fin de la condition

Quand la scène ce lance, j'obtient cette erreur:

[DEBUG] 00:41:49: line 154: Assertion failed: Expected string

 
Le code s'arrête à la ligne 22 et je ne vois pas d'où viens cette ligne 154.
Pouvez me dire ce qui ne va pas.
Merci.
Modifié par fredokl

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai trouvé mon erreur. C'est la variable global prédéfini qui posait problème.

Remplacé: 

if (fibaro:getGlobalValue(Saison) == "Hiver") then -- si récupère la valeur de la variable Saison

par:

fibaro:setGlobal("Saison", "Hiver") -- si récupère la valeur de la variable Saison

 

 

 

 

Modifié par fredokl

Partager ce message


Lien à poster
Partager sur d’autres sites

@ebtjjnSalut. Ça fait une semaine que j'ai réinstallé la scène et le Vd. Rien ne fonctionne. J'ai tout paramètré correctement et rien ne se lance.

Que ce soit à 04h00 du matin, la lecture de la température à 11h30 etc... Rien ne fonctionne.

Au niveau de variables, combien y-en-a-t-il à créer?

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut

 

variable prédéfinie : "Saison" --> "Hiver" & "Eté"

variables globales : "modefiltration" + " "dureefiltration" + "tempref"

Il y a des notifications push à créer ou à supprimer mais je pense que tu les verras... ;-)

 

Voici la scène que j'utilise :

--[[
%% autostart
%% properties
%% events
%% globals
--]]

--****************************************
--*************PARAMETRAGE****************
local id_pompe = 69
local id_tel = 13 -- 13= tél JJ : téléphone sur lesquel envoyer une notif push (start et stop)
local id_eau = 91
--****************************************
--****************************************

local sourceTrigger = fibaro:getSourceTrigger();
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();


function tempFunc()	--fonction de filtration en ETE
	local currentDate = os.date("*t");
	local startSource = fibaro:getSourceTrigger();

	if (
 	( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "10:30") )
		)
	then
    	fibaro:debug("Je filtre");
		fibaro:call(id_pompe, "turnOn");
    	fibaro:setGlobal("modefiltration", 1)
    	fibaro:call(id_tel, "sendDefinedPushNotification", "51");
 		fibaro:sleep(3600*2*1000)
		-- 	au bout de 2 heures, prise de température pour gestion auto du nbe d'heures à filtrer selon temp de l'eau
		local temppiscine = fibaro:getValue(id_eau, "value")
    	fibaro:setGlobal('tempref',temppiscine)
		-- test de la température : si > 27, filtration sur 21h30 de plus (=23h30 au total) sinon, règle BAROUDI		
    		if tonumber(temppiscine) > 27 then
      			fibaro:debug("T° eau piscine > 27 ==> filtration continue")
      			fibaro:setGlobal("modefiltration", 8)
	      		fibaro:call(id_tel, "sendDefinedPushNotification", "80");
		   		local nbheuresafiltrer = 21,5 * 3600 * 1000
      		else
		    	fibaro:debug("T° eau piscine = " ..temppiscine .. " °C")	
    			local temppiscinearrondi = math.floor(tonumber(temppiscine)+ .5)
				local nbheuresafiltrerenh = ((tonumber(temppiscinearrondi)/2)-2)
				fibaro:debug("nb heures a filtrer = " .. nbheuresafiltrerenh)
				local nbheuresafiltrer = nbheuresafiltrerenh *3600 * 1000
				-- on définit la variable dureefiltration = nb d'heures à  filtrer 
				fibaro:setGlobal("dureefiltration", nbheuresafiltrer)
			end	
		fibaro:debug("Valeur de la variable _dureefiltration_ : "..fibaro:getGlobalValue("dureefiltration"));
		fibaro:sleep(tonumber(fibaro:getGlobalValue("dureefiltration"))-(3600*2*1000));    
    		if fibaro:getGlobalValue("modefiltration") == "12" then
      			fibaro:debug("Fin du mode auto mais CHOC déjà en cours")
      		else
        		fibaro:debug("Fin du timer, j\'arrête de filtrer");
      			fibaro:setGlobal("dureefiltration", 0)
				fibaro:call(id_pompe, "turnOff"); 
      			fibaro:setGlobal('tempref', 99)
    			fibaro:setGlobal("modefiltration", 0)
    			fibaro:call(id_tel, "sendDefinedPushNotification", "52");
      		end

    end

  setTimeout(tempFunc, 60*1000)
  
end

if fibaro:getGlobalValue("Saison") == "Eté" then --je filtre en mode ETE
	fibaro:debug("c\'est l\'été, cool !! :-)")
	tempFunc()
		
else	
	local temppiscine = fibaro:getValue(id_eau, "value")
	fibaro:debug("c\'est l\'hiver...!! :-(")
  	-- test de la température : si < 2, filtration sur 24h, sinon 2h de 4h à 6h du mat		
    	if tonumber(temppiscine) < 2 then
      		fibaro:debug("T° eau piscine < 2 ==> filtration continue")
	      	fibaro:call(id_tel, "sendDefinedPushNotification", "79");
		   	--local nbheuresafiltrer = 23,5 * 3600 * 1000
			fibaro:call(id_pompe, "turnOn"); 
		    fibaro:setGlobal('tempref', temppiscine)
    		fibaro:debug("Je filtre en continu");			
      		fibaro:setGlobal("modefiltration", 8)
			fibaro:sleep(23,5*3600*1000)
    		fibaro:call(id_pompe, "turnOff");
    		fibaro:setGlobal("dureefiltration", 0)
    		fibaro:setGlobal('tempref', 99)
    		fibaro:debug("Fin du timer, j\'arrête de filtrer");
    		fibaro:call(id_tel, "sendDefinedPushNotification", "52");
    		fibaro:setGlobal("modefiltration", 0)
		--end
	
    
  		elseif ( --à 4h du matin, j'active la filtration
 		( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "03:45") )
			) then
		-- s'il y a un CHOC en cours --> priorité au CHOC : je ne fais rien. Sinon, je filtre 2h.
			fibaro:debug("je filtre en mode HIVER")			
    			if fibaro:getGlobalValue("modefiltration") == "12" then
					fibaro:debug("CHOC déjà en cours : la durée de filtration est celle définie par le CHOC") 
      			elseif
      				fibaro:getGlobalValue("EdfTempoJour") == "1" then
        			fibaro:call(id_pompe, "turnOn"); 
		    		fibaro:debug("Je filtre");			
      				fibaro:setGlobal("modefiltration", 1)
      				fibaro:call(id_tel, "sendDefinedPushNotification", "51");
					fibaro:sleep(1.9*3600*1000)
					fibaro:debug("Fin du timer, j\'arrête de filtrer");
					fibaro:call(id_pompe, "turnOff");
    				fibaro:setGlobal("modefiltration", 0) --je ne teste pas s'il ya un CHOC en cours : il faudrait l'avoir déclenché entre 4h et 6H du matin...
    				fibaro:call(id_tel, "sendDefinedPushNotification", "52");
      			
    			end
		end

end

Teste et dis moi.

Modifié par ebtjjn

Partager ce message


Lien à poster
Partager sur d’autres sites

@ebtjjnSalut. Bon ça ne veut pas fonctionner. J'ai copié le code plus haut, changé les paramètres et rien n'y fait. La scène se lance mais la pompe ne se déclenche pas. Les variables sont créés (1 x prédéfinie et 3 x globales) ainsi que les notifications. J'ai vérifié tous mes ID (pompe, thermomètre etc...). Je met le code pour vérification.

--[[
%% autostart
%% properties
%% events
%% globals
--]]

--****************************************
--*************PARAMETRAGE****************
local id_pompe = 570
local id_tel = 590 -- 13= tél JJ : téléphone sur lesquel envoyer une notif push (start et stop)
local id_eau = 587
--****************************************
--****************************************

local sourceTrigger = fibaro:getSourceTrigger();
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();


function tempFunc()	--fonction de filtration en ETE
	local currentDate = os.date("*t");
	local startSource = fibaro:getSourceTrigger();

	if (
 	( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "10:30") )
		)
	then
    	fibaro:debug("Je filtre");
		fibaro:call(id_pompe, "turnOn");
    	fibaro:setGlobal("modefiltration", 1)
    	fibaro:call(id_tel, "sendDefinedPushNotification", "566");
 		fibaro:sleep(3600*2*1000)
		-- 	au bout de 2 heures, prise de température pour gestion auto du nbe d'heures à filtrer selon temp de l'eau
		local temppiscine = fibaro:getValue(id_eau, "value")
    	fibaro:setGlobal('tempref',temppiscine)
		-- test de la température : si > 27, filtration sur 22h30 de plus (=23h30 au total) sinon, règle BAROUDI		
    		if tonumber(temppiscine) > 27 then
      			fibaro:debug("T° eau piscine > 27 ==> filtration continue")
      			fibaro:setGlobal("modefiltration", 8)
	      		fibaro:call(id_tel, "sendDefinedPushNotification", "568");
		   		local nbheuresafiltrer = 22,5 * 3600 * 1000
      		else
		    	fibaro:debug("T° eau piscine = " ..temppiscine .. " °C")	
    			local temppiscinearrondi = math.floor(tonumber(temppiscine)+ .5)
				local nbheuresafiltrerenh = ((tonumber(temppiscinearrondi)/2)-2)
				fibaro:debug("nb heures a filtrer = " .. nbheuresafiltrerenh)
				local nbheuresafiltrer = nbheuresafiltrerenh *3600 * 1000
				-- on définit la variable dureefiltration = nb d'heures à  filtrer 
				fibaro:setGlobal("dureefiltration", nbheuresafiltrer)
			end	
		fibaro:debug("Valeur de la variable _dureefiltration_ : "..fibaro:getGlobalValue("dureefiltration"));
		fibaro:sleep(tonumber(fibaro:getGlobalValue("dureefiltration"))-(3600*2*1000));    
    		if fibaro:getGlobalValue("modefiltration") == "12" then
      			fibaro:debug("Fin du mode auto mais CHOC déjà en cours")
      		else
        		fibaro:debug("Fin du timer, j\'arrête de filtrer");
      			fibaro:setGlobal("dureefiltration", 0)
				fibaro:call(id_pompe, "turnOff"); 
      			fibaro:setGlobal('tempref', 99)
    			fibaro:setGlobal("modefiltration", 0)
    			fibaro:call(id_tel, "sendDefinedPushNotification", "567");
      		end

    end

  setTimeout(tempFunc, 60*1000)
  
end

if fibaro:getGlobalValue("Saison") == "Eté" then --je filtre en mode ETE
	fibaro:debug("c\'est l\'été, cool !! :-)")
	tempFunc()
  
else	
	local temppiscine = fibaro:getValue(id_eau, "value")
	fibaro:debug("c\'est l\'hiver...!! :-(")
  	-- test de la température : si < 2, filtration sur 24h, sinon 2h de 4h à 6h du mat		
    	if tonumber(temppiscine) < 2 then
      		fibaro:debug("T° eau piscine < 2 ==> filtration continue")
	      	fibaro:call(id_tel, "sendDefinedPushNotification", "568");
		   	--local nbheuresafiltrer = 23,5 * 3600 * 1000
			fibaro:call(id_pompe, "turnOn"); 
		    fibaro:setGlobal('tempref', temppiscine)
    		fibaro:debug("Je filtre en continu");			
      		fibaro:setGlobal("modefiltration", 8)
			fibaro:sleep(23,5*3600*1000)
    		fibaro:call(id_pompe, "turnOff");
    		fibaro:setGlobal("dureefiltration", 0)
    		fibaro:setGlobal('tempref', 99)
    		fibaro:debug("Fin du timer, j\'arrête de filtrer");
    		fibaro:call(id_tel, "sendDefinedPushNotification", "567");
    		fibaro:setGlobal("modefiltration", 0)
		--end
	
    
  		elseif ( --à 4h du matin, j'active la filtration
 		( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "04:00") )
			) then
		-- s'il y a un CHOC en cours --> priorité au CHOC : je ne fais rien. Sinon, je filtre 2h.
			fibaro:debug("je filtre en mode HIVER")			
    			if fibaro:getGlobalValue("modefiltration") == "12" then
					fibaro:debug("CHOC déjà en cours : la durée de filtration est celle définie par le CHOC") 
      			elseif
      				fibaro:getGlobalValue("EdfTempoJour") == "1" then
        			fibaro:call(id_pompe, "turnOn"); 
		    		fibaro:debug("Je filtre");			
      				fibaro:setGlobal("modefiltration", 1)
      				fibaro:call(id_tel, "sendDefinedPushNotification", "566");
					fibaro:sleep(1.9*3600*1000)
					fibaro:debug("Fin du timer, j\'arrête de filtrer");
					fibaro:call(id_pompe, "turnOff");
    				fibaro:setGlobal("modefiltration", 0) --je ne teste pas s'il ya un CHOC en cours : il faudrait l'avoir déclenché entre 4h et 6H du matin...
    				fibaro:call(id_tel, "sendDefinedPushNotification", "567");
      			
    			end
		end
end

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut fredokl,

 

je ne comprends pas : j'ai repris ton code et après changement du numéro des modules, ça marche chez moi...

Qu'est ce que tu as en mode débug ?

 

Julirn

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut, le debug me donnait  ceci jusqu'à présent:

[DEBUG] 23:10:39: c'est l'hiver...!! :-(
[DEBUG] 23:10:39: je filtre en mode HIVER
 et pas de démarrage de la pompe.
 
Après pas mal de recherche j'ai vu qu'il y a aussi une variable prédéfinie "EdfTempoJour". Je pense que c'est une variable pour les heures creuses ou pleines alors j'en ai créé avec deux scènes, une pour le "1" et l'autre pour le "0". La variable est pris en compte par la scène. j'ai maintenant ceci dans le debug:
[DEBUG] 23:10:39: c'est l'hiver...!! :-(
[DEBUG] 23:10:39: je filtre en mode HIVER
[DEBUG] 23:10:39: Je filtre
 
La pompe se déclenche, j'ai fait des essais en changeant l'heure et la valeur de la variable "EdfTempoJour". Mais, car il y a toujours un mais... La scène fonctionne uniquement quand j'appuis sur le bouton enregistré (la petite disquette), pourtant l'autostart est bien affiché dans l'entête. Je ne comprend pas.

 

Modifié par fredokl

Partager ce message


Lien à poster
Partager sur d’autres sites

Attention, 2 autres choses :

1- il y a une ligne qui dépend du jour EDF tempo : supprime la : c'est la ligne 105 : fibaro:getGlobalValue("EdfTempoJour") == "1" then

2- tu as bien renseigné la variable prédéfinie avec lles accents et tout et tout... "Hiver" et "Eté" ?

 

Dis moi.

 

Edit : les messages se sont croisés!! lol les grands esprits!! 

Modifié par ebtjjn

Partager ce message


Lien à poster
Partager sur d’autres sites

×