Gestion pompe/temperature piscine

Posez ici vos questions d'utilisation, de configuration de DomoticZ, de bugs, de conseils sur le logiciel lui même dans son utilisation et son paramétrage.
Des forums spécifiques sont ouverts ci-dessous pour regrouper les différents sujets.
dxfantome
Messages : 114
Inscription : 14 sept. 2018, 23:29

Re: Gestion pompe/temperature piscine

Message par dxfantome »

salut
un truc m'étonnes dans la logique de ton diagramme :
Je ne vois nulle part la prise en compte des temps de filtration nécessaire, pourtant tu stipule bien utiliser la meme pompe pour la filtration que pour le circuit de chauffage de l'eau (comme on le fait presque tous).
On estime en générale qu'il faut filtrer selon la formule simple Temp(de filtrage)=T°(temperature de l'eau)/2
La tu prend le risque de ne peut être pas filtrer suffisamment et de te retrouver avec une eau verte , non ?
peux t'être devrait tu prévoir une boucle de contrôle a ce niveau la aussi...
orange pi one, raspberry pi 2 b,yeelink v2, rflink 433.92:inters/pir/écran projecteur,Broadlink ,sonde diy(temperature ,hyrgo,co2,particule fine pm10, pm5, pm2.5 /esp wifi et attiny 433) xiaomi: switch/cube/pir/mi flower
kisskool
Messages : 70
Inscription : 01 juin 2021, 11:24

Re: Gestion pompe/temperature piscine

Message par kisskool »

Très juste, je ne l'ai pas préciser pour simplifier, par contre je ne suis pas convaincu par ta formule, perso je fais un cycle minimum par jour (volume/debit=cycle). Voici ce que j'ai trouvé chez un pisciniste :
  • Lorsque la température de l’eau est supérieure à 25°C, il est préférable d’effectuer 3 cycles complets de filtration
  • Lorsque la température de l’eau est comprise entre 20°C et 24°C, vous pouvez envisager 1 à 2 cycles de filtration
  • Lorsque la température de l’eau est comprise entre 15°C et 20°C, vous pouvez vous contenter d’un cycle de filtration
  • Lorsque la température de l’eau est comprise entre 10 et 14°C, comptez un demi cycle
  • Lorsque la température de l’eau est inférieure à 10°C, vous pouvez pratiquement arrêter la filtration, car les microorganismes ne se développent pas.
J'essayerais d'incorporer une formule dans le script (inspiré de celui de psubiaco) qui pilotera la pompe et qui prendra en compte la température (eau/air)si besoin mais je pense que je ne suis pas le prmeier a y penser, je ferais une recherche le moment venu car je ne me sent pas l'ecrire moi même.
J'ai surdimensionné ma pompe et je fais un cycle en 1h20 (avant 4H) je pense que le débit est maintenant trop élevé pour le chauffage solaire mais je ferais des tests quand même pour voir si j'y gagne.
J'ai trouvé un nodemcu au fond d'un tiroir et un relais, j'attends les sondes de températures (DS18B20) et il faut que je trouve de quoi transformer le 220 en 5v, sans doute une alim de récup...
kisskool
Messages : 70
Inscription : 01 juin 2021, 11:24

Re: Gestion pompe/temperature piscine

Message par kisskool »

Bonjour à tous !
Je reviens à la charge, j'ai reçu le matériel et cette partie est terminée ( je pilote un relais via un nodemcu et j'ai deux sonde de température connectées qui remontent les températures).
dlqziMVb7W.png
dlqziMVb7W.png (47.01 Kio) Consulté 1474 fois
Il me reste maintenant la partie script et j'ai trouvé un exemple de script qui remonte la durée d'utilisation de la pompe, c'est justement quelque chose dont j'avais besoin et qui me paraissait insurmontable (je suis grand débutant)

J'ai donc une variable utilisateur [Pompe Piscine] qui stocke la durée d'utilisation de la pompe et que j'affiche dans un device Text.
nHcUzeoQp6.png
nHcUzeoQp6.png (6.68 Kio) Consulté 1474 fois
J'ai ajouté une variable utilisateur [Besoin_filtration]qui doit me servir à stocker la durée de filtration requise en fonction de la temperature. Ca c'est le premier truc qui marche pas, elle reste à zéro mais je ne pense pas que cela soit la root cause, le problème vient sans doute du calcul de cette variable.
uEqiB4HBe1.png
uEqiB4HBe1.png (4.71 Kio) Consulté 1474 fois
Ensuite je recupere la température d'une sonde ['Sortie_piscine'] pour calculer le temps nécessaire de filtration, le stocker dans [Besoin_filtration] puis l'écrire dans les logs pour faciliter le suivi.
MAcPSpb5es.png
MAcPSpb5es.png (1.99 Kio) Consulté 1474 fois
J'en suis là, il me restera ensuite la mise en route de la pompe mais pour cela j'ai besoin de cette variable.
kZLsBFA3K9.png
kZLsBFA3K9.png (22.79 Kio) Consulté 1467 fois
J'ai essayé plein de chose et appris plein de trucs mais je séche, dans les logs j'obtiens ça :
bVvggtGpZx.png
bVvggtGpZx.png (6.62 Kio) Consulté 1474 fois

Mes questions :
  • Est-ce que la méthode est bonne ? y a t'il plus simple sachant qu'après j'allumerais la pompe en faisant juste après le calcul si [Pompe Piscine]<[Besoin_filtration] alors ON?
  • Comment afficher dans les logs le résultat du calcul de besoin à la place de "Scenario 20-25" pour le vérifier
  • Pourquoi je n'arrive à le stocker dans la variable utilisateur

J'espère être clair et que le script est assez lisible... pour pouvoir obtenir un peu d'aide car je suis coincé.
Merci à ceux qui prendront du temps pour m'aider !

Voici mon script :

Code : Tout sélectionner

--
-- Domoticz passes information to scripts through a number of global tables
--
-- otherdevices, otherdevices_lastupdate and otherdevices_svalues are arrays for all devices: 
--   otherdevices['yourotherdevicename'] = "On"
--   otherdevices_lastupdate['yourotherdevicename'] = "2015-12-27 14:26:40"
--   otherdevices_svalues['yourotherthermometer'] = string of svalues
--
-- uservariables and uservariables_lastupdate are arrays for all user variables: 
--   uservariables['yourvariablename'] = 'Test Value'
--   uservariables_lastupdate['yourvariablename'] = '2015-12-27 11:19:22'
--
-- other useful details are contained in the timeofday table
--   timeofday['Nighttime'] = true or false
--   timeofday['SunriseInMinutes'] = number
--   timeofday['Daytime'] = true or false
--   timeofday['SunsetInMinutes'] = number
--   globalvariables['Security'] = 'Disarmed', 'Armed Home' or 'Armed Away'
--
-- To see examples of commands see: http://www.domoticz.com/wiki/LUA_commands#General
-- To get a list of available values see: http://www.domoticz.com/wiki/LUA_commands#Function_to_dump_all_variables_supplied_to_the_script
--
-- Based on your logic, fill the commandArray with device commands. Device name is case sensitive. 
--



 --------------------------------
 ------ Variables à éditer ------
 --------------------------------
 local user_var = 'Pompe Piscine'  -- Nom de la variable utilisateur (uservariable)utilisé pour mémoriser la valeur en minutes dans Domoticz (Domoticz-->configuration-->plus d'options-->variables utilisateurs).
 local switch = 'Relais_pompe_piscine'		-- Nom de l'interrupteur virtuel de la pompe dans Domoticz
 local Heure_Besoin = 'Besoin_filtration' --Durée de filtration requise en fonctione de la temperature
 local counter_txt = 343            -- Numéro idx du capteur virtuel texte.
 local besoin_txt = 344             -- Numéro idx du capteur virtuel texte.
 local Heure_Raz = 7	-- Heure de remise à zéro du compteur (compris entre 0 et 23).
 local duree_cycle = 80 --M3 piscine / débit M3 pompe* 60
 local T_eau=tonumber((otherdevices_svalues['Sortie_piscine'])) --tonumber((otherdevices_svalues['Lumière']))
 --------------------------------
 -- Fin des variables à éditer --
 --------------------------------
local scriptName = 'Filtration_ON'
local scriptVersion = '0.1'

-----------------------------------------------------------------------------------------------------
--------------------Calcul du temps de fonctionnement Journalier -------------------------------
-----------------------------------------------------------------------------------------------------
commandArray = {}
	time=os.time()
	local minutes = tonumber(os.date('%M',time))
	local hours = tonumber(os.date('%H',time))
	local NowInMinutes = (hours * 60 + minutes)
	local h_min = (Heure_Raz * 60)

	if (otherdevices[switch]=='On') then
		commandArray['Variable:'..user_var] = tostring(uservariables[user_var] +1)--Lecture user variable et enregistrement + 1 dans cette même variable
		Valeur_Compteur = tostring(uservariables[user_var])--Lecture dans variable temporaire
		Valeur_Compteur_txt = tostring(""..math.floor((Valeur_Compteur/60)).. "H:"..math.floor(Valeur_Compteur-(math.floor((Valeur_Compteur/60))*60)).. "Mn")--Calcul et enregistrement dans valeur tempo txt + formatage
		commandArray['UpdateDevice'] = counter_txt .. '|0|' .. Valeur_Compteur_txt--Enregistrement dans Compteur Txt
	end
	if ((NowInMinutes > h_min) and (NowInMinutes < (h_min + 10))) then--RAZ journalier à l'heure voulu.
		commandArray['Variable:'..user_var]= tostring(0)
		Valeur_Compteur_txt = tostring("0H:0Mn")
		commandArray['UpdateDevice'] = counter_txt .. '|0|' .. Valeur_Compteur_txt
	end
--[[-----------Calcul du besoin temps de fonctionnement Journalier -------------------------------
(0,1 * HCYCLE) -- si <10°
(0,5*HCYCLE) -- si 10-14°
(1*HCYCLE) -- si 15-20°
(2*HCYCLE= -- si 20-25°
(3*HCYCLE) -- si >25° 
--------------------------------------------------------------------------------------------------------------------------
--]]
    if (T_eau < 10) then commandArray['Variable:'..Heure_Besoin]  = tostring(duree_cycle * 0.1) and print ("Scenario 10-14°")
        elseif (T_eau > 10) and (T_eau <= 15) then commandArray['Variable:'..Heure_Besoin] = tostring(duree_cycle*0.5) and print ("Scenario 10-14°")
        elseif (T_eau > 15) and (T_eau <= 20) then commandArray['Variable:'..Heure_Besoin] = tostring(duree_cycle*1) and print ("Scenario 15-20°")
        elseif (T_eau > 20) and (T_eau <= 25) then commandArray['Variable:'..Heure_Besoin] = tostring(duree_cycle*2) and print ("Scenario 20-25°")
        elseif (T_eau > 25) then commandArray['Variable:'..Heure_Besoin] = tostring(duree_cycle * 3) and print tostring(uservariables['Heure_Besoin'] ">25°")
    end
        Valeur_Besoin = tostring(uservariables[''..Heure_Besoin]) --Lecture dans variable temporaire
		Valeur_Besoin_txt = tostring(""..math.floor((Valeur_Besoin/60)).. "H:"..math.floor(Valeur_Besoin-(math.floor((Valeur_Besoin/60))*60)).. "Mn")--Calcul et enregistrement dans valeur tempo txt + formatage
		commandArray['UpdateDevice'] = besoin_txt .. '|0|' .. Valeur_Besoin_txt--Enregistrement dans Compteur Txt
    
return commandArray
kisskool
Messages : 70
Inscription : 01 juin 2021, 11:24

Re: Gestion pompe/temperature piscine

Message par kisskool »

Je me reponds :
Au final je n'ai gardé ce script que pour la gestion et l'incrémentation des variables. je pense que l'affichage dans le device Text pourrait être mieux mais je verrais plus tard.
Pour les calculs et la gestion Marche/Arret de la pompe, j'utilise un script blockly, relativement simple et abordable

Code : Tout sélectionner

--
-- Domoticz passes information to scripts through a number of global tables
--
-- otherdevices, otherdevices_lastupdate and otherdevices_svalues are arrays for all devices: 
--   otherdevices['yourotherdevicename'] = "On"
--   otherdevices_lastupdate['yourotherdevicename'] = "2015-12-27 14:26:40"
--   otherdevices_svalues['yourotherthermometer'] = string of svalues
--
-- uservariables and uservariables_lastupdate are arrays for all user variables: 
--   uservariables['yourvariablename'] = 'Test Value'
--   uservariables_lastupdate['yourvariablename'] = '2015-12-27 11:19:22'
--
-- other useful details are contained in the timeofday table
--   timeofday['Nighttime'] = true or false
--   timeofday['SunriseInMinutes'] = number
--   timeofday['Daytime'] = true or false
--   timeofday['SunsetInMinutes'] = number
--   globalvariables['Security'] = 'Disarmed', 'Armed Home' or 'Armed Away'
--
-- To see examples of commands see: http://www.domoticz.com/wiki/LUA_commands#General
-- To get a list of available values see: http://www.domoticz.com/wiki/LUA_commands#Function_to_dump_all_variables_supplied_to_the_script
--
-- Based on your logic, fill the commandArray with device commands. Device name is case sensitive. 
--



 --------------------------------
 ------ Variables à éditer ------
 --------------------------------
 local user_var = 'Pompe Piscine'  -- Nom de la variable utilisateur (uservariable)utilisé pour mémoriser la valeur en minutes dans Domoticz (Domoticz-->configuration-->plus d'options-->variables utilisateurs).
 local switch = 'Relais_pompe_piscine'		-- Nom de l'interrupteur virtuel de la pompe dans Domoticz
 local Heure_Besoin = 'Besoin_filtration' --Durée de filtration requise en fonctione de la temperature
 local counter_txt = 345           -- Numéro idx du capteur virtuel texte.
 local besoin_txt = 344           -- Numéro idx du capteur virtuel texte.
 local Heure_Raz = 10	-- Heure de remise à zéro du compteur (compris entre 0 et 23).
 --local duree_cycle = 80 --M3 piscine / débit M3 pompe *60	
 --local T_eau=tonumber((otherdevices_svalues['Sortie_piscine'])) --tonumber((otherdevices_svalues['Lumière']))
 --------------------------------
 -- Fin des variables à éditer --
 --------------------------------
local scriptName = 'Filtration_ON'
local scriptVersion = '0.1'

-----------------------------------------------------------------------------------------------------
--------------------Calcul du temps de fonctionnement Journalier -------------------------------
-----------------------------------------------------------------------------------------------------
commandArray = {}
	time=os.time()
	local minutes = tonumber(os.date('%M',time))
	local hours = tonumber(os.date('%H',time))
	local NowInMinutes = (hours * 60 + minutes)
	local h_min = (Heure_Raz * 60)

	if (otherdevices[switch]=='On') then
		commandArray['Variable:'..user_var] = tostring(uservariables[user_var] +1)--Lecture user variable et enregistrement + 1 dans cette même variable
		Valeur_Compteur = tostring(uservariables[user_var]) --Lecture dans variable temporaire
		Valeur_Compteur_txt = tostring("0"..math.floor((Valeur_Compteur/60)).. "h"..math.floor(Valeur_Compteur-(math.floor((Valeur_Compteur/60))*60)).. "")--Calcul et enregistrement dans valeur tempo txt + formatage
		--commandArray['UpdateDevice'] = counter_txt .. '|0|' .. Valeur_Compteur_txt--Enregistrement dans Compteur Txt
		--MAJ TXT besoin_txt
		Valeur_Besoin = tostring(uservariables[Heure_Besoin]) --Lecture dans variable temporaire
		Valeur_Besoin_txt = tostring("0"..math.floor((Valeur_Besoin/60)).. "h"..math.floor(Valeur_Besoin-(math.floor((Valeur_Besoin/60))*60)).. "")--Calcul et enregistrement dans valeur tempo txt + formatage
		--commandArray['UpdateDevice'] = besoin_txt .. '|0|' .. Valeur_Besoin_txt
		commandArray[1] = {['UpdateDevice'] = counter_txt ..'|0|'.. Valeur_Compteur_txt} --Enregistrement dans Compteur Txt
        commandArray[2] = {['UpdateDevice'] = besoin_txt ..'|0|'.. Valeur_Besoin_txt} --Enregistrement dans Compteur Txt
	end
	
	if ((NowInMinutes > h_min) and (NowInMinutes < (h_min + 10))) then--RAZ journalier à l'heure voulu.
		commandArray['Variable:'..user_var]= tostring(0)
		Valeur_Compteur_txt = tostring("0H:0Mn")
		commandArray['UpdateDevice'] = counter_txt .. '|0|' .. Valeur_Compteur_txt
		
	end
return commandArray
Répondre