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...
Gestion pompe/temperature piscine
Re: Gestion pompe/temperature piscine
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
Re: Gestion pompe/temperature piscine
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 :
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...
- 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'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...
Re: Gestion pompe/temperature piscine
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). 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. 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. 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. J'en suis là, il me restera ensuite la mise en route de la pompe mais pour cela j'ai besoin de cette variable. J'ai essayé plein de chose et appris plein de trucs mais je séche, dans les logs j'obtiens ça :
Mes questions :
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 :
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). 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. 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. 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. J'en suis là, il me restera ensuite la mise en route de la pompe mais pour cela j'ai besoin de cette variable. J'ai essayé plein de chose et appris plein de trucs mais je séche, dans les logs j'obtiens ça :
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
Re: Gestion pompe/temperature piscine
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
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