
Encore un arrosage automatique !
Re: Encore un arrosage automatique !
Oops, @garycooper : C'est seulement maintenant que je vois ton message d'avril de l'an dernier
As-tu résolu ton problème depuis tout ce temps ?

Re: Encore un arrosage automatique !
Bonsoir,
@garycooper Je vous remercie pour votre réponse. En fin d'arrosage je mettrai donc le capteur 'humidité du sol' à 20cB.
Avez vous écrit le script d'arrosage pour vos 4 EV l'an dernier ? Parce que durant les 10 jours d’arrêt du forum j'ai écrit le mien en dzvents pour 4 EVs :
Merci à aleph0 pour ses conseils et ses scripts qui m'ont largement inspirés ...
@garycooper Je vous remercie pour votre réponse. En fin d'arrosage je mettrai donc le capteur 'humidité du sol' à 20cB.
Avez vous écrit le script d'arrosage pour vos 4 EV l'an dernier ? Parce que durant les 10 jours d’arrêt du forum j'ai écrit le mien en dzvents pour 4 EVs :
Code : Tout sélectionner
--[[
Fonctionnement:
+ Le programme calcule la durée d'arrosage nécessaire a chacun des réseaux A,B,C,D une fois
pour toute. La durée de l'arrosage peut atteindre 2h00 ou +
+ Dés détection de la demande d'arrosage manuelle ou planifiée le programme enchaine
l'ouverture et la fermeture des vannes automatiquement dans l'ordre A, B, C, D.
+ En passant l'interrupteur "Arrosage Start" sur OFF l'arrosage en cours s'arrete mais
il redemarrera par le circuit A apres un nouvel appui sur Start ou planifié.
+ La carte 4CH JJX-KG03 a été programmée en mode 3: Verrouillé. Il ne peut y avoir qu'un
seul relai actif en meme temps cad activer l'un désactive automatiquement les 3 autres,
c'est la raison pour laquelle on ne trouve dans le code aucun switchOFF pour les EV.
+ La carte KR2201-A 1CH (220v) a été programmée en mode 3: verrouillage sur 2 boutons séparés
+ L'état des Push on off n'est pas lisible un push on toujours a ON un push off toujours a OFF
+ Le timer se recale automatiquement à minute pleine hh:mm:00 ce qui veut dire qu'une durée
d'arrosage WateringTime de 60s peut en fait durer 119s.
--]]
return {
on = {
timer = { "every minute" }, -- Le timer s'active à hh:mm:00 toutes les minutes
variables = { "Etat Arrosage" } },
data = {
-- Variables globales persistentes mémorisant l'heure de début d'arrosage
-- -1= arrosage jamais démarré; 0= arrosage terminé; 'autre'= arrosage en cours;
TimeStartA = { initial = -1 },
TimeStartB = { initial = -1 },
TimeStartC = { initial = -1 },
TimeStartD = { initial = -1 },
-- Variables durée d'arrosage en secondes 60 étant le minimum
WateringTimeA= { initial= 300 }, -- en secondes 20mn = 1200
WateringTimeB= { initial= 300 },
WateringTimeC= { initial= 300 },
WateringTimeD= { initial= 300 } },
logging = {
-- level = domoticz.LOG_DEBUG, -- Seulement un niveau peut être actif; commenter les autres
-- level = domoticz.LOG_INFO,
-- level = domoticz.LOG_ERROR,
-- level = domoticz.LOG_DEBUG,
-- level = domoticz.LOG_MODULE_EXEC_INFO,
marker = '==>' },
execute = function(dz, item)
local function logWrite(str)
if str == 'TimeStart' then
dz.log('TimeStartA '.. dz.data.TimeStartA)
dz.log('TimeStartB '.. dz.data.TimeStartB)
dz.log('TimeStartC '.. dz.data.TimeStartC)
dz.log('TimeStartD '.. dz.data.TimeStartD)
end
end
local dev_Hs="Humidité du sol" -- Capteur d'humidité du sol
-- Constantes
local start_Hs=25 -- Seuil d'humidité (cb) pour déclencher un arrosage
local target_Hs=20 -- Cible d'humidité (cb) pour l'arrosage
local RUmax= 320
local flow_EV1= 670 -- watering flowrate of EV1 in l/h (mesuré=625 l/h)
local surf_EV1= 50 -- surface watered by EV1, in m²
local ratioB= 1 -- Ratios à adapter en fonction de la taille de
local ratioC= 1 -- chacune des parcelles à arroser
local ratioD= 1
local t= 0
if (dz.variables('Etat Arrosage').value == 'En cours') then
if (dz.data.TimeStartA == -1) then
-- Calcul du temps d'Arrosage
-- ne DOIT etre executé qu'une fois durant toute la période d'arrosage
print("Calcul de la durée d'arrosage")
val_Hs= dz.devices('Humidité du sol').moisture -- de la parcelle de reference
dz.log("Humidité du sol "..val_Hs.." cb")
if val_Hs>=start_Hs then
-- calcul du quota d'arrosage nécessaire pour passer de val_Hs à target_Hs
DRu= (val_Hs-target_Hs)/200 * RUmax -- Apport théorique d'eau en mm
print("Apport théorique "..DRu.." mm")
-- Durées d'arrosage de chacune des parcelles en secondes
dz.data.WateringTimeA= dz.utils.round(DRu*surf_EV1/flow_EV1*3600)
dz.data.WateringTimeB= dz.data.WateringTimeA * ratioB
dz.data.WateringTimeC= dz.data.WateringTimeA * ratioC
dz.data.WateringTimeD= dz.data.WateringTimeA * ratioD
else
print("Sol suffisament humide ; inutile d'arroser")
dz.variables('Etat Arrosage').set ('Terminé')
return
end
-- Arrosage accepté
-- on attend 2 secondes que le 220v soit présent sur K2 avant de demarrer l'arrosage
dz.devices('Arrosage circuit A').switchOn().afterSec(2) -- arrosage en cours
dz.data.TimeStartA = os.time()
elseif (dz.data.TimeStartA > 0) then
t = os.difftime(os.time(), dz.data.TimeStartA)
print('Arrosage circuit A en cours depuis : ' .. dz.utils.round(t) .. '/'..dz.data.WateringTimeA..' secondes')
if (t >= dz.data.WateringTimeA) then
-- Le timer à claqué: Arret arrosage circuitA
dz.data.TimeStartA = 0
end
end -- StartA
-- arrosage B ne peut démarrer que si A est terminé
if (dz.data.TimeStartB == -1) and (dz.data.TimeStartA == 0) then
-- Début arrosage demandé
dz.data.TimeStartB = os.time()
dz.devices('Arrosage circuit B').switchOn() -- arrosage en cours
elseif (dz.data.TimeStartB > 0) then
t = os.difftime(os.time(), dz.data.TimeStartB)
print('Arrosage circuit B en cours depuis : ' .. dz.utils.round(t) .. '/'..dz.data.WateringTimeB..' secondes')
if (t >= dz.data.WateringTimeB) then
-- Le timer à claqué: Arret arrosage Arret arrosage circuitB
dz.data.TimeStartB = 0
end
end -- StartB
if (dz.data.TimeStartC == -1) and (dz.data.TimeStartB == 0) then
-- Début arrosage demandé
dz.data.TimeStartC = os.time()
dz.devices('Arrosage circuit C').switchOn() -- arrosage en cours
elseif (dz.data.TimeStartC > 0) then
t = os.difftime(os.time(), dz.data.TimeStartC)
print('Arrosage circuit C en cours depuis : ' .. dz.utils.round(t) ..'/'..dz.data.WateringTimeC..' secondes')
if (t >= dz.data.WateringTimeC) then
-- Le timer à claqué: Arret arrosage Arret arrosage circuitC
dz.data.TimeStartC = 0
end
end-- StartC
if (dz.data.TimeStartD == -1) and (dz.data.TimeStartC == 0) then
-- Début arrosage demandé
dz.data.TimeStartD = os.time()
dz.devices('Arrosage circuit D').switchOn() -- arrosage en cours
elseif (dz.data.TimeStartD > 0) then
t = os.difftime(os.time(), dz.data.TimeStartD)
print('Arrosage circuit D en cours depuis : ' .. dz.utils.round(t) .. '/'..dz.data.WateringTimeD..' secondes')
if (t >= dz.data.WateringTimeD) then
dz.data.TimeStartD = 0
-- la séquence d'arrosage est TERMINEE
dz.devices('Arrosage Stop').switchOff() -- coupure du 24v arret arrosage circuitD
dz.variables('Etat Arrosage').set ('Terminé')
end
end -- StartD
--logWrite('TimeStart')
end -- état en cours
if (dz.variables('Etat Arrosage').value == 'Terminé') then
-- l'inter d'arrosage est passé a OFF soit Arret d’urgence ou séquence d’arrosage terminée
-- Le relai alim coupe le 24v des EV et éteind la LED "en service"
dz.data.initialize ('TimeStartA') -- retour a la valeur -1
dz.data.initialize ('TimeStartB')
dz.data.initialize ('TimeStartC')
dz.data.initialize ('TimeStartD')
--logWrite('TimeStart')
end -- état Terminé
end -- execute
}
Domoticz 2020.2 sur NAS Synology DS215+
RFXcom
RFXcom
-
- Messages : 286
- Enregistré le : 07 août 2017, 23:58
Re: Encore un arrosage automatique !
Bonjour, oui j'ai fini par m'en sortir en l'intégrant directement dans le script lua. J'ai dû tricher car je n'arrivais pas à faire ouvrir l'électrovanne B après la fermeture de l'électrovanne A. En gros, ça calcule le temps d'ouverture pour chaque électrovanne et j'ai créé des temporisations qui correspondent au temps d'ouverture calculé de l'électrovanne précédente ou du cumul des temps d'ouverture. L'objectif est ainsi de décaler le temps d'ouverture de l'électrovanne. J'ai également complété mon installation avec 3 autres électrovannes pour arroser mon bananier (il a souffert de la chaleur l'année dernière), la pelouse au pied de mon mûrier et des massifs de plantes aromatiques (celles-ci sont arrosées depuis un récupérateur d'eau). Pour cette nouvelle installation, je suis parti sur une durée fixe d'arrosage car je n'ai que 2 arroseurs et une surface à arroser d'environ 7m². Je verrai si je fais évoluer ou non mais il ne devrait pas y avoir une grosse consommation d'eau sur ces points d'arrosage. Le script complet est le suivant :
Mon problème aujourd'hui, c'est mon interrupteur "Programmateur d'arrosage". Je n'arrive pas à l'activer automatiquement de 6h à 7 du matin les mois de Mars à Octobre. J'ai fait ce script de type time, mais le programmateur ne passe jamais à "On" :
Code : Tout sélectionner
--[[
Script pour gérer l arrosage automatique
Modes :
- Off : Ne fais rien
- Manu : Arrose inconditionnellement selon la scène "arrosage"
- Auto : Arrose en fonction de l'humidité du sol
Les ordres d ouverture des électrovannes se font successivement
--]]
-- Paramètres
local dev_Modes="Mode arrosage" -- Sélecteur du mode d'arrosage (Off/Manu/Auto)
local scene="Arrosage" -- Scène avec programmation d'une séquence d'arrosage
local prg_arrosage="Programmateur arrosage" -- Switch de plage de programmation de l'arrosage
local dev_EVA="Zone A" -- Electrovanne maître (Celle avec qui le RFU est calculé)
local dev_EVB="Zone B" -- Electrovanne d arrosage zone B
local dev_EVC="Zone C" -- Electrovanne d arrosage zone C
local dev_EVD="Zone D" -- Electrovanne d arrosage zone D
local murier="Murier" -- Electrovanne arrosage murier
local bananier="Bananier" -- Electrovanne arrosage bananier
local aromatiques="Plantes aromatiques" -- Electrovanne plantes aromatiques
local dev_Hs="Humidite du sol" -- Capteur d'humidité du sol
local start_Hs=25 -- Seuil d'humidité (cb) pour déclencher un arrosage
local target_Hs=20 -- Cible d'humidité (cb) pour l'arrosage
local val_Duree_bananier=600 -- Durée d'arrosage du bananier (ici 10 min) en secondes
local val_Duree_murier=420 -- Durée d'arrosage du murier (ici 7 min) en secondes
local val_Duree_aromatiques=420 -- Durée d'arrosage des plantes aromatiques (ici 7 min) en secondes
local flow_EVA=2580 -- Débit du circuit zone A en l/h
local surf_EVA=110 -- surface arrosée par l électrovanne A, en m²
local flow_EVB=2460 -- Débit du circuit zone B en l/h
local surf_EVB=110 -- surface arrosée par l électrovanne B, en m²
local flow_EVC=3180 -- Débit du circuit zone C en l/h
local surf_EVC=110 -- surface arrosée par l électrovanne C, en m²
local flow_EVD=600 -- Débit du circuit zone D en l/h
local surf_EVD=40 -- surface arrosée par l électrovanne D, en m²
local RUmax=270 -- (maximum 270mm de stockable dans le sol)
-- Variables internes
local debug=1
--------------------------------------------------------------------------------
-- Bibliothèque de fonctions --
--------------------------------------------------------------------------------
function round(num, dec)
if num == 0 then
return 0
else
local mult = 10^(dec or 0)
return math.floor(num * mult + 0.5) / mult
end
end
--------------------------------------------------------------------------------
-- Fin bibliothèque de fonctions --
--------------------------------------------------------------------------------
commandArray = {}
-- Gestion de l'arrosage
-- Si le mode d'arrosage est mis sur Manu, déclenchement d une scène d arrosage puis, chaque électrovanne sera gérée manuellement
if devicechanged[dev_Modes] == 'Manu' then
print("Declenchement d'une scene d arrosage automatique")
commandArray['Scene:Arrosage']='On'
end
-- Si le mode d'arrosage est mis sur Off, cela referme toute électrovanne ouverte ou arrête toute pompe ES
if (otherdevices[dev_Modes] == 'Off') and
((otherdevices[dev_EVA] == 'On') or (otherdevices[dev_EVB] == 'On') or (otherdevices[dev_EVC] == 'On') or (otherdevices[dev_EVD] == 'On')) then
print("Mise a l arret de l arrosage")
commandArray[dev_EVA]='Off'
commandArray[dev_EVB]='Off'
commandArray[dev_EVC]='Off'
commandArray[dev_EVD]='Off'
commandArray[murier]='Off'
commandArray[bananier]='Off'
end
if (otherdevices[dev_Modes]=="Auto") and (devicechanged[prg_arrosage] == 'On') then
print("Arrosage demande en automatique")
val_Hs=tonumber(otherdevices[dev_Hs])
print("Humidite du sol "..val_Hs.." cb")
if val_Hs<=start_Hs then
print("Sol suffisament humide ; inutile d'arroser")
else
-- calcul de la durée d'arrosage nécessaire pour passer de val_Hs à target_Hs
DRu=(val_Hs-target_Hs)/200*RUmax
val_Duree_EVA=round(DRu*surf_EVA/flow_EVA*3600,0)
val_Duree_EVB=round(DRu*surf_EVB/flow_EVB*3600,0)
val_Duree_EVC=round(DRu*surf_EVC/flow_EVB*3600,0)
val_Duree_EVD=round(DRu*surf_EVD/flow_EVB*3600,0)
if debug==1 then
print("Apport theorique "..DRu.." mm")
print("Arrosage de la zone A pendant "..val_Duree_EVA.." sec")
print("Arrosage de la zone B pendant "..val_Duree_EVB.." sec")
print("Arrosage de la zone C pendant "..val_Duree_EVC.." sec")
print("Arrosage de la zone D pendant "..val_Duree_EVD.." sec")
print("Arrosage du bananier pendant "..val_Duree_bananier.." sec")
print("Arrosage du murier pendant "..val_Duree_murier.." sec")
print("Arrosage des plantes aromatiques pendant "..val_Duree_aromatiques.." sec")
end
--[[
Sur mon installation, les électrovannes doivent être ouvertes
séparément car il n'y a pas assez de débit disponible pour ouvrir les 7 électrovannes
--]]
local tempo1=val_Duree_EVA+val_Duree_EVB
local tempo2=tempo1+val_Duree_EVC
local tempo3=tempo2+val_Duree_EVD
local tempo4=tempo3+val_Duree_bananier
local tempo5=tempo4+val_Duree_murier
local tempo6=tempo4+val_Duree_aromatiques
commandArray[1] = {[dev_EVA] = 'On'} -- Ouvre l'électrovanne A
commandArray[2] = {[dev_EVA] = 'Off AFTER ' .. val_Duree_EVA} -- Referme l'électrovanne A après la durée calculée pour la zone A
commandArray[3] = {[dev_EVB] = 'On AFTER ' .. val_Duree_EVA} -- Ouvre l'électrovanne B après la fermeture de l électrovanne A
commandArray[4] = {[dev_EVB] = 'Off AFTER ' .. tempo1} -- Referme l'électrovanne B après la durée calculée pour la zone B
commandArray[5] = {[dev_EVC] = 'On AFTER ' .. tempo1} -- Ouvre l'électrovanne C après la fermeture de l électrovanne B
commandArray[6] = {[dev_EVC] = 'Off AFTER ' .. tempo2} -- Referme l'électrovanne C après la durée calculée pour la zone C
commandArray[7] = {[dev_EVD] = 'On AFTER ' .. tempo2} -- Ouvre l'électrovanne D après la fermeture de l électrovanne C
commandArray[8] = {[dev_EVD] = 'Off AFTER ' .. tempo3} -- Referme l'électrovanne D après la durée calculée pour la zone pour la zone D
commandArray[9] = {[bananier] = 'On AFTER ' .. tempo3} -- Ouvre l'électrovanne du bananier après la fermeture de l électrovanne D
commandArray[10] = {[bananier] = 'Off AFTER ' .. tempo4} -- Referme l'électrovanne du bananier après la durée définie
commandArray[11] = {[murier] = 'On AFTER ' .. tempo4} -- Ouvre l'électrovanne du murier après la fermeture de l électrovanne du bananier
commandArray[12] = {[aromatiques] = 'On AFTER ' .. tempo4} -- Ouvre l'électrovanne des plantes aromatiques après la fermeture de l électrovanne du bananier
commandArray[13] = {[aromatiques] = 'Off AFTER ' .. tempo6} -- Referme l'électrovanne des plantes aromatiques après la durée définie
commandArray[14] = {[murier] = 'Off AFTER ' .. tempo5} -- Referme l'électrovanne du murier après la durée définie
commandArray[15] = {[prg_arrosage] = 'Off AFTER ' .. tempo6} -- Passe le switch de programmateur d arrosage à Off
end
end
return commandArray
Code : Tout sélectionner
local prg_arrosage = 'Programmateur arrosage'
-- retourne le mois en cours
local mois = os.date("%m")
-- retourne le jour actuel
local days = {"dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"}
local jour = days[(os.date("%w")+1)]
-- retourne l'heure actuelle ex: "12:45"
local heure = string.sub(os.date("%X"), 1, 5)
local ete = mois >= '3' and mois < '10'
local heure_arros = heure >= '06:00' and heure < '07:00'
commandArray = {}
if (otherdevices['Mode arrosage'] == 'Auto') and ete and heure_arros then
commandArray[prg_arrosage]='On'
end
if not heure_arros then
commandArray[prg_arrosage] = 'Off'
end
return commandArray
Re: Encore un arrosage automatique !
Bonsoir garycooper ,
depuis l'incendie d'OVH je ne suis plus notifié d'une réponse par easydomoticz !
Je ne suis pas très au fait avec LUA étant novice j'ai démarré directement en Dzvents.
Quel est le type de votre inter d'arrosage parceque j'ai eu le meme genre de souci avec les push on et push off ?
depuis l'incendie d'OVH je ne suis plus notifié d'une réponse par easydomoticz !
Je ne suis pas très au fait avec LUA étant novice j'ai démarré directement en Dzvents.
Quel est le type de votre inter d'arrosage parceque j'ai eu le meme genre de souci avec les push on et push off ?
Domoticz 2020.2 sur NAS Synology DS215+
RFXcom
RFXcom
-
- Messages : 286
- Enregistré le : 07 août 2017, 23:58
Re: Encore un arrosage automatique !
Mon interrupteur et un interrupteur basique de type on/off.
J'ai plutôt le sentiment que c'est la récupération du mois qui déconne parce que j'ai un script similaire pour mon programmateur de chauffage (sans rapatrier le mois) et ça fonctionne parfaitement.
J'ai plutôt le sentiment que c'est la récupération du mois qui déconne parce que j'ai un script similaire pour mon programmateur de chauffage (sans rapatrier le mois) et ça fonctionne parfaitement.
Re: Encore un arrosage automatique !
Il y a plus simple pour récupérer les mois, jours, etc... :
Enfin, je ne pense pas que tu puisse faire simplement des inégalités sur des chaines de type hh:mm. Pour faire ton test heure_arros, vu que tu n'as pas de minutes tu peux simplement tester temps.hour>=6 and temps.hour<7 (ce qui revient à dire temps.hour=6
). Si tu avais des minutes, convertis tout en minutes pour le test : par exemple 60*temps.hour+temps.min>=390 pour >=6:30
Code : Tout sélectionner
temps = os.date("*t") --produces the table {year = 1998, month = 9, day = 16, yday = 259, wday = 4, hour = 23, min = 48, sec = 10, isdst = false}
mois=temps.month
local days = {"dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"}
local jour = days[temps.wday+1]
heure=temps.hour

-
- Messages : 286
- Enregistré le : 07 août 2017, 23:58
Re: Encore un arrosage automatique !
Je teste ça pour demain matin et je te redis ! Merci
-
- Messages : 286
- Enregistré le : 07 août 2017, 23:58
Re: Encore un arrosage automatique !
Merci aleph0 ! Ça a marché comme sur des roulettes !