Voilà mon script complet :
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 séquence d'arrosage
local prg_arrosage="Programmateur arrosage" -- Switch de plage de programmation de l'arrosage
local dev_EVA="Zone A" -- Électrovanne maître (Celle avec qui le RFU est calculé)
local dev_EVB="Zone B" -- Électrovanne d arrosage zone B
local dev_EVC="Zone C" -- Électrovanne d arrosage zone C
local dev_EVD="Zone D" -- Électrovanne d arrosage zone D
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 flow_EVA=2580 -- Débit du circuit zone A en l/h
local surf_EVA=90 -- 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=90 -- 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=90 -- 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=30 -- 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'
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))/60
val_Duree_EVB=(round(DRu*surf_EVB/flow_EVB*3600,0))/60
val_Duree_EVC=(round(DRu*surf_EVC/flow_EVB*3600,0))/60
val_Duree_EVD=(round(DRu*surf_EVD/flow_EVB*3600,0))/60
if debug==1 then
print("Apport theorique "..DRu.." mm")
print("Arrosage zone A pendant "..val_Duree_EVA.." min")
print("Arrosage zone B pendant "..val_Duree_EVB.." min")
print("Arrosage zone C pendant "..val_Duree_EVC.." min")
print("Arrosage zone D pendant "..val_Duree_EVD.." min")
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 4 électrovannes
--]]
commandArray[dev_EVA] = 'On FOR val_Duree_EVA'
if devicechanged[dev_EVA] == 'Off' then commandArray[dev_EVB] = 'On FOR val_Duree_EVB' end
if devicechanged[dev_EVB] == 'Off' then commandArray[dev_EVC] = 'On FOR val_Duree_EVC' end
if devicechanged[dev_EVB] == 'Off' then commandArray[dev_EVD] = 'On FOR val_Duree_EVD' end
end
end
return commandArrayJe pense que la partie défaillante est celle ci
Code : Tout sélectionner
commandArray[dev_EVA] = 'On FOR val_Duree_EVA'
if devicechanged[dev_EVA] == 'Off' then commandArray[dev_EVB] = 'On FOR val_Duree_EVB' end
if devicechanged[dev_EVB] == 'Off' then commandArray[dev_EVC] = 'On FOR val_Duree_EVC' end
if devicechanged[dev_EVB] == 'Off' then commandArray[dev_EVD] = 'On FOR val_Duree_EVD' endD'un point de vue matériel, mes électrovannes sont commandées via un SONOFF 4CH et pas par un Wemos D1 mini comme dans le tuto d'aleph0.
Merci d'avance